diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index f6ea46272316a..baee9753ce56c 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -55,7 +55,6 @@ disabled: - x-pack/plugins/synthetics/e2e/config.ts - x-pack/plugins/synthetics/e2e/synthetics_run.ts - x-pack/plugins/ux/e2e/synthetics_run.ts - - x-pack/plugins/observability/e2e/synthetics_run.ts - x-pack/plugins/exploratory_view/e2e/synthetics_run.ts # Configs that exist but weren't running in CI when this file was introduced diff --git a/.buildkite/pipelines/pull_request/observability_plugin.yml b/.buildkite/pipelines/pull_request/observability_plugin.yml deleted file mode 100644 index 55ffaf9f5f5f8..0000000000000 --- a/.buildkite/pipelines/pull_request/observability_plugin.yml +++ /dev/null @@ -1,15 +0,0 @@ -steps: - - command: .buildkite/scripts/steps/functional/observability_plugin.sh - label: 'Observability @elastic/synthetics Tests' - agents: - queue: n2-4-spot - depends_on: build - timeout_in_minutes: 120 - artifact_paths: - - 'x-pack/plugins/observability/e2e/.journeys/**/*' - retry: - automatic: - - exit_status: '-1' - limit: 3 - - exit_status: '*' - limit: 1 diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index fdaca3654b15c..4fc571ba51d8a 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -137,10 +137,6 @@ const uploadPipeline = (pipelineContent: string | object) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/osquery_cypress.yml')); } - if (await doAnyChangesMatch([/^x-pack\/plugins\/observability/])) { - pipeline.push(getPipeline('.buildkite/pipelines/pull_request/observability_plugin.yml')); - } - if (await doAnyChangesMatch([/^x-pack\/plugins\/exploratory_view/])) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/exploratory_view_plugin.yml')); } @@ -148,20 +144,13 @@ const uploadPipeline = (pipelineContent: string | object) => { if ( await doAnyChangesMatch([ /^x-pack\/plugins\/synthetics/, - /^x-pack\/plugins\/observability\/public\/components\/shared\/exploratory_view/, /^x-pack\/plugins\/exploratory_view/, ]) ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/synthetics_plugin.yml')); } - if ( - await doAnyChangesMatch([ - /^x-pack\/plugins\/ux/, - /^x-pack\/plugins\/observability\/public\/components\/shared\/exploratory_view/, - /^x-pack\/plugins\/exploratory_view/, - ]) - ) { + if (await doAnyChangesMatch([/^x-pack\/plugins\/ux/, /^x-pack\/plugins\/exploratory_view/])) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/ux_plugin_e2e.yml')); } diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 2dfd3ae1781a9..092e6571b1606 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: 2023-03-29 +date: 2023-03-30 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 785ac0d85f062..5b11188e1a588 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 65b3bdb2bffd5..2bca2e8ecb891 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 57fa2b2f03938..de2538ab0f9a7 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -2384,7 +2384,7 @@ "section": "def-common.SanitizedRule", "text": "SanitizedRule" }, - ", \"id\" | \"consumer\" | \"name\" | \"actions\" | \"tags\" | \"enabled\" | \"schedule\" | \"createdBy\" | \"updatedBy\" | \"createdAt\" | \"updatedAt\" | \"throttle\" | \"muteAll\" | \"notifyWhen\" | \"snoozeSchedule\"> & { producer: string; ruleTypeId: string; ruleTypeName: string; }" + ", \"id\" | \"consumer\" | \"name\" | \"actions\" | \"tags\" | \"enabled\" | \"schedule\" | \"createdBy\" | \"updatedBy\" | \"createdAt\" | \"updatedAt\" | \"throttle\" | \"muteAll\" | \"notifyWhen\" | \"snoozeSchedule\" | \"revision\"> & { producer: string; ruleTypeId: string; ruleTypeName: string; }" ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, @@ -9148,7 +9148,7 @@ "section": "def-common.SanitizedRule", "text": "SanitizedRule" }, - ", \"id\" | \"consumer\" | \"name\" | \"actions\" | \"tags\" | \"enabled\" | \"schedule\" | \"createdBy\" | \"updatedBy\" | \"createdAt\" | \"updatedAt\" | \"throttle\" | \"muteAll\" | \"notifyWhen\" | \"snoozeSchedule\"> & { producer: string; ruleTypeId: string; ruleTypeName: string; }" + ", \"id\" | \"consumer\" | \"name\" | \"actions\" | \"tags\" | \"enabled\" | \"schedule\" | \"createdBy\" | \"updatedBy\" | \"createdAt\" | \"updatedAt\" | \"throttle\" | \"muteAll\" | \"notifyWhen\" | \"snoozeSchedule\" | \"revision\"> & { producer: string; ruleTypeId: string; ruleTypeName: string; }" ], "path": "x-pack/plugins/alerting/common/rule.ts", "deprecated": false, diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index fca56a5d4701f..7461125c3db95 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: 2023-03-29 +date: 2023-03-30 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 bddf23b38f201..fdff221d15c4a 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -4448,7 +4448,9 @@ "TypeC", "<{ transactionType: ", "StringC", - "; }>, ", + "; bucketSizeInSeconds: ", + "Type", + "; }>, ", "PartialC", "<{ transactionName: ", "StringC", @@ -4488,7 +4490,41 @@ "PartialC", "<{ offset: ", "StringC", - "; }>]>]>; }>, ", + "; }>, ", + "TypeC", + "<{ documentType: ", + "UnionC", + "<[", + "LiteralC", + "<", + "ApmDocumentType", + ".ServiceTransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionEvent>]>; rollupInterval: ", + "UnionC", + "<[", + "LiteralC", + "<", + "RollupInterval", + ".OneMinute>, ", + "LiteralC", + "<", + "RollupInterval", + ".TenMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".SixtyMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".None>]>; }>]>]>; }>, ", { "pluginId": "apm", "scope": "server", @@ -5924,7 +5960,9 @@ "TypeC", "<{ transactionType: ", "StringC", - "; }>, ", + "; bucketSizeInSeconds: ", + "Type", + "; }>, ", "PartialC", "<{ transactionName: ", "StringC", @@ -5964,7 +6002,41 @@ "PartialC", "<{ offset: ", "StringC", - "; }>]>]>; }>, ", + "; }>, ", + "TypeC", + "<{ documentType: ", + "UnionC", + "<[", + "LiteralC", + "<", + "ApmDocumentType", + ".ServiceTransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionEvent>]>; rollupInterval: ", + "UnionC", + "<[", + "LiteralC", + "<", + "RollupInterval", + ".OneMinute>, ", + "LiteralC", + "<", + "RollupInterval", + ".TenMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".SixtyMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".None>]>; }>]>]>; }>, ", { "pluginId": "apm", "scope": "server", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index d9726b9415f64..9ce323bbde7e3 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 53c832dde609f..98b4a5f975c81 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: 2023-03-29 +date: 2023-03-30 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 0e4ac62b6f867..180279f6e835e 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: 2023-03-29 +date: 2023-03-30 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 ea5777661037a..1c353680bd78f 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: 2023-03-29 +date: 2023-03-30 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 86bb6f1f81f9c..f41c36245553d 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.devdocs.json b/api_docs/cases.devdocs.json index a2142365e3ee9..d296b38bd3375 100644 --- a/api_docs/cases.devdocs.json +++ b/api_docs/cases.devdocs.json @@ -673,7 +673,7 @@ "section": "def-common.Case", "text": "Case" }, - ") => Promise) | undefined; attachments?: ", + ") => void) | undefined; attachments?: ", { "pluginId": "cases", "scope": "public", @@ -968,7 +968,7 @@ "label": "hooks", "description": [], "signature": [ - "{ getUseCasesAddToNewCaseFlyout: (props?: AddToNewCaseFlyoutProps) => { open: ({ attachments, headerContent, }?: { attachments?: ", + "{ useCasesAddToNewCaseFlyout: (props?: AddToNewCaseFlyoutProps) => { open: ({ attachments, headerContent, }?: { attachments?: ", { "pluginId": "cases", "scope": "public", @@ -976,7 +976,7 @@ "section": "def-public.CaseAttachmentsWithoutOwner", "text": "CaseAttachmentsWithoutOwner" }, - " | undefined; headerContent?: React.ReactNode; }) => void; close: () => void; }; getUseCasesAddToExistingCaseModal: (props?: AddToExistingFlyoutProps) => { open: ({ attachments }?: { attachments?: ", + " | undefined; headerContent?: React.ReactNode; }) => void; close: () => void; }; useCasesAddToExistingCaseModal: (props?: AddToExistingFlyoutProps) => { open: ({ attachments }?: { attachments?: ", { "pluginId": "cases", "scope": "public", @@ -1016,14 +1016,8 @@ "section": "def-common.CasesPermissions", "text": "CasesPermissions" }, - "; getRuleIdFromEvent: (event: Event) => { id: string; name: string; }; groupAlertsByRule: (items: Event[]) => ", - { - "pluginId": "cases", - "scope": "public", - "docId": "kibCasesPluginApi", - "section": "def-public.CaseAttachmentsWithoutOwner", - "text": "CaseAttachmentsWithoutOwner" - }, + "; getRuleIdFromEvent: (event: Event) => { id: string; name: string; }; groupAlertsByRule: ", + "GroupAlertsByRule", "; }" ], "path": "x-pack/plugins/cases/public/types.ts", diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index cb402e62b1663..33193d0d9b1e5 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.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 | |-------------------|-----------|------------------------|-----------------| -| 96 | 0 | 79 | 30 | +| 96 | 0 | 79 | 31 | ## Client diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 0ce9cab55acca..ac5f4a0b982ce 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: 2023-03-29 +date: 2023-03-30 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 ed0be49d98f91..c6a55a053f3ad 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index 3d35155a2f201..9a5181d8d190e 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 8b39f8b7dbd1a..63bc7dc5e72f2 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: 2023-03-29 +date: 2023-03-30 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 32870870f9eb7..351e1e62fabc4 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: 2023-03-29 +date: 2023-03-30 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 0bef777735b5e..d748236cdf206 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: 2023-03-29 +date: 2023-03-30 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 caf863a493c34..d7354cbbac6e8 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: 2023-03-29 +date: 2023-03-30 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 05723f6077baa..293c223951ae6 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: 2023-03-29 +date: 2023-03-30 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 c2d5e6873b48d..345b2897d5345 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: 2023-03-29 +date: 2023-03-30 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 afb02a6e35cd9..f9c4541461b29 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: 2023-03-29 +date: 2023-03-30 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 69c7f62079def..c1c0df680f1f9 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: 2023-03-29 +date: 2023-03-30 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 e9bb6fb3b567c..264387210a5c9 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: 2023-03-29 +date: 2023-03-30 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 a5e113bc13775..08f5195922b3a 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 8524fd1f7d0c9..36c8272fec2e6 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -13853,6 +13853,22 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/report_definition_field.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/use_filter_values.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" + }, { "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts" @@ -14125,6 +14141,18 @@ "plugin": "ml", "path": "x-pack/plugins/ml/public/application/services/new_job_capabilities/remove_nested_field_children.test.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_kpi.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" @@ -14137,6 +14165,26 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/mobile_test_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_cwv.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" @@ -21435,6 +21483,22 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/report_definition_field.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/use_filter_values.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" + }, { "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts" @@ -21707,6 +21771,18 @@ "plugin": "ml", "path": "x-pack/plugins/ml/public/application/services/new_job_capabilities/remove_nested_field_children.test.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_kpi.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" @@ -21719,6 +21795,26 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/mobile_test_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_cwv.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 1d5ecd84763ec..872b144971082 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: 2023-03-29 +date: 2023-03-30 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 331554063d507..503fa6e6254c4 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: 2023-03-29 +date: 2023-03-30 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 0acdab728ac51..bf463bc5d044e 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: 2023-03-29 +date: 2023-03-30 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 c2d6b8f475451..e5b41a5c704fa 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: 2023-03-29 +date: 2023-03-30 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 daf54f5cef35e..7e11277dd8570 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: 2023-03-29 +date: 2023-03-30 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 81fce1ccbc309..015417d6333f9 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index 4e03f692e4a39..bfd5dafc1484a 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -395,6 +395,22 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/report_definition_field.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/use_filter_values.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" + }, { "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts" @@ -667,6 +683,18 @@ "plugin": "ml", "path": "x-pack/plugins/ml/public/application/services/new_job_capabilities/remove_nested_field_children.test.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_kpi.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" @@ -679,6 +707,26 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/mobile_test_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_cwv.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" @@ -8604,6 +8652,22 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/report_definition_field.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/use_filter_values.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" + }, { "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts" @@ -8876,6 +8940,18 @@ "plugin": "ml", "path": "x-pack/plugins/ml/public/application/services/new_job_capabilities/remove_nested_field_children.test.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_kpi.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" @@ -8888,6 +8964,26 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/mobile_test_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_cwv.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" @@ -15870,6 +15966,22 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/report_definition_field.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/use_filter_values.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx" + }, { "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts" @@ -16142,6 +16254,18 @@ "plugin": "ml", "path": "x-pack/plugins/ml/public/application/services/new_job_capabilities/remove_nested_field_children.test.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_kpi.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts" @@ -16154,6 +16278,26 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/mobile_test_attribute.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_cwv.ts" + }, { "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts" diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 0c04af7970da0..64e4d3220d949 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: 2023-03-29 +date: 2023-03-30 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 8959cd31ca130..6fba430cc0c5b 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 738f48a92d8e7..7c177f1606b03 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -17,10 +17,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Referencing plugin(s) | Remove By | | ---------------|-----------|-----------| | | ml, stackAlerts | - | -| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, savedObjectsManagement, unifiedSearch, triggersActionsUi, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | -| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, savedObjectsManagement, unifiedSearch, triggersActionsUi, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | -| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, data, savedObjectsManagement, unifiedSearch, triggersActionsUi, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover | - | -| | home, data, esUiShared, spaces, savedObjectsManagement, fleet, observability, ml, apm, enterpriseSearch, indexLifecycleManagement, synthetics, upgradeAssistant, ux, kibanaOverview | - | +| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, savedObjectsManagement, unifiedSearch, triggersActionsUi, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, exploratoryView, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | +| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, savedObjectsManagement, unifiedSearch, triggersActionsUi, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, exploratoryView, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | +| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, data, savedObjectsManagement, unifiedSearch, triggersActionsUi, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, exploratoryView, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover | - | +| | home, data, esUiShared, spaces, savedObjectsManagement, observability, exploratoryView, fleet, ml, apm, enterpriseSearch, indexLifecycleManagement, synthetics, upgradeAssistant, ux, kibanaOverview | - | | | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | | | actions, ml, savedObjectsTagging, enterpriseSearch | - | | | @kbn/core-plugins-browser-internal, @kbn/core-root-browser-internal, dataViews, home, data, savedObjects, unifiedSearch, presentationUtil, visualizations, dashboard, lens, discover, fileUpload, maps, ml, infra, fleet, canvas, dashboardEnhanced, graph, monitoring, synthetics, transform, watcher, dataVisualizer, cloudSecurityPosture, securitySolution | - | @@ -83,7 +83,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-saved-objects-browser-internal, @kbn/core | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core | - | | | @kbn/core-saved-objects-browser-internal | - | -| | @kbn/core-lifecycle-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, savedSearch, visualizations, dashboard, lens, observability, canvas, transform, @kbn/core-saved-objects-browser-mocks | - | +| | @kbn/core-lifecycle-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, savedSearch, visualizations, dashboard, lens, observability, exploratoryView, canvas, transform, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core | - | | | @kbn/core | - | | | @kbn/core, lens, savedObjects, visualizations | - | @@ -98,7 +98,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | dataViewManagement, dataViews | - | | | visTypeTimeseries, graph, dataViewManagement, dataViews | - | | | dataViews, dataViewManagement | - | -| | observability, dataVisualizer, fleet, cloudSecurityPosture, discoverEnhanced, osquery, synthetics | - | +| | observability, exploratoryView, dataVisualizer, fleet, cloudSecurityPosture, discoverEnhanced, osquery, synthetics | - | | | @kbn/core-saved-objects-api-server-internal, fleet | - | | | canvas | - | | | canvas | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index a7510e990109a..0ecd6053d2fc2 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -306,7 +306,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=license%24), [license_state.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/lib/license_state.test.ts#:~:text=license%24), [license_state.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/lib/license_state.test.ts#:~:text=license%24) | 8.8.0 | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=authc) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=authz) | - | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=index), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=index) | - | +| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=index) | - | | | [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes)+ 16 more | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/saved_objects/index.ts#:~:text=convertToMultiNamespaceTypeVersion), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/saved_objects/index.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -639,6 +639,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## exploratoryView + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [observability_data_views.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts#:~:text=title), [report_definition_field.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/report_definition_field.tsx#:~:text=title), [use_filter_values.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/use_filter_values.ts#:~:text=title), [filter_value_btn.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx#:~:text=title), [sample_attribute.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts#:~:text=title), [sample_attribute_kpi.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_kpi.ts#:~:text=title), [sample_attribute_with_reference_lines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts#:~:text=title), [test_formula_metric_attribute.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts#:~:text=title), [single_metric_attributes.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts#:~:text=title), [single_metric_attributes.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts#:~:text=title)+ 14 more | - | +| | [observability_data_views.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts#:~:text=title), [report_definition_field.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/report_definition_field.tsx#:~:text=title), [use_filter_values.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/use_filter_values.ts#:~:text=title), [filter_value_btn.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx#:~:text=title), [sample_attribute.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts#:~:text=title), [sample_attribute_kpi.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_kpi.ts#:~:text=title), [sample_attribute_with_reference_lines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts#:~:text=title), [test_formula_metric_attribute.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts#:~:text=title), [single_metric_attributes.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts#:~:text=title), [single_metric_attributes.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts#:~:text=title)+ 14 more | - | +| | [observability_data_views.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/utils/observability_data_views/observability_data_views.ts#:~:text=title), [report_definition_field.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/report_definition_field.tsx#:~:text=title), [use_filter_values.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/use_filter_values.ts#:~:text=title), [filter_value_btn.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/series_editor/columns/filter_value_btn.tsx#:~:text=title), [sample_attribute.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute.ts#:~:text=title), [sample_attribute_kpi.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_kpi.ts#:~:text=title), [sample_attribute_with_reference_lines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/sample_attribute_with_reference_lines.ts#:~:text=title), [test_formula_metric_attribute.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/test_data/test_formula_metric_attribute.ts#:~:text=title), [single_metric_attributes.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts#:~:text=title), [single_metric_attributes.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/lens_attributes/single_metric_attributes.test.ts#:~:text=title)+ 2 more | - | +| | [use_discover_link.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/hooks/use_discover_link.tsx#:~:text=indexPatternId) | - | +| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/application/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/application/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/application/index.tsx#:~:text=RedirectAppLinks) | - | +| | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/application/types.ts#:~:text=SavedObjectsStart), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/exploratory_view/public/application/types.ts#:~:text=SavedObjectsStart) | - | + + + ## expressionPartitionVis | Deprecated API | Reference location(s) | Remove By | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index ba0c3d050126a..43f7f41eb88af 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 85fe9337b5b69..43a0cc991c210 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index 12e7039d39ac0..e60eaff8d3a01 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -1162,6 +1162,10 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/hooks/use_discover_link.tsx" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/hooks/use_discover_link.tsx" + }, { "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx" diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 20bfd9d33ee52..406b99bbe9de0 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: 2023-03-29 +date: 2023-03-30 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 666c6e9831fff..1ba0d53809590 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: 2023-03-29 +date: 2023-03-30 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 c85df2cef0854..bab7053d6163c 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index f3dc2b85ea63b..f336154afc06a 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: 2023-03-29 +date: 2023-03-30 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 9613d205e6e88..3439f977f939c 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: 2023-03-29 +date: 2023-03-30 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 ffcb27fd9dd3f..d45190e8a3569 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: 2023-03-29 +date: 2023-03-30 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 e47726d6c8b4a..5759899e72dfd 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: 2023-03-29 +date: 2023-03-30 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 f31d1b49d49f4..7893eb4eccf77 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: 2023-03-29 +date: 2023-03-30 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 4e283c68bfdaf..55b680e46e63c 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 78ec0cf971647..a7fd91c561f33 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.devdocs.json b/api_docs/exploratory_view.devdocs.json new file mode 100644 index 0000000000000..5da838194cf97 --- /dev/null +++ b/api_docs/exploratory_view.devdocs.json @@ -0,0 +1,6057 @@ +{ + "id": "exploratoryView", + "client": { + "classes": [], + "functions": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ActionMenu", + "type": "Function", + "tags": [], + "label": "ActionMenu", + "description": [], + "signature": [ + "(props: Props) => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ActionMenu.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ActionMenuDivider", + "type": "Function", + "tags": [], + "label": "ActionMenuDivider", + "description": [], + "signature": [ + "() => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.convertTo", + "type": "Function", + "tags": [], + "label": "convertTo", + "description": [ + "\nConverts a microseconds value into the unit defined." + ], + "signature": [ + "({\n unit,\n microseconds,\n defaultValue = NOT_AVAILABLE_LABEL,\n extended,\n}: { unit: DurationTimeUnit; microseconds: ", + "Maybe", + "; defaultValue?: string | undefined; extended?: boolean | undefined; }) => ConvertedDuration" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.convertTo.$1", + "type": "Object", + "tags": [], + "label": "{\n unit,\n microseconds,\n defaultValue = NOT_AVAILABLE_LABEL,\n extended,\n}", + "description": [], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.convertTo.$1.unit", + "type": "CompoundType", + "tags": [], + "label": "unit", + "description": [], + "signature": [ + "TimeUnit", + " | \"microseconds\"" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.convertTo.$1.microseconds", + "type": "CompoundType", + "tags": [], + "label": "microseconds", + "description": [], + "signature": [ + "number | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.convertTo.$1.defaultValue", + "type": "string", + "tags": [], + "label": "defaultValue", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.convertTo.$1.extended", + "type": "CompoundType", + "tags": [], + "label": "extended", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.createExploratoryViewUrl", + "type": "Function", + "tags": [], + "label": "createExploratoryViewUrl", + "description": [], + "signature": [ + "({ reportType, allSeries }: { reportType: ", + "ReportViewType", + "; allSeries: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.AllSeries", + "text": "AllSeries" + }, + "; }, baseHref: string) => string" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/exploratory_view_url.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.createExploratoryViewUrl.$1", + "type": "Object", + "tags": [], + "label": "{ reportType, allSeries }", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/exploratory_view_url.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.createExploratoryViewUrl.$1.reportType", + "type": "CompoundType", + "tags": [], + "label": "reportType", + "description": [], + "signature": [ + "\"heatmap\" | \"data-distribution\" | \"kpi-over-time\" | \"core-web-vitals\" | \"device-data-distribution\" | \"single-metric\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/exploratory_view_url.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.createExploratoryViewUrl.$1.allSeries", + "type": "Array", + "tags": [], + "label": "allSeries", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.SeriesUrl", + "text": "SeriesUrl" + }, + "[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/exploratory_view_url.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.createExploratoryViewUrl.$2", + "type": "string", + "tags": [], + "label": "baseHref", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/exploratory_view_url.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryView", + "type": "Function", + "tags": [], + "label": "ExploratoryView", + "description": [], + "signature": [ + "(props: ", + "ExploratoryViewPageProps", + ") => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryView.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "ExploratoryViewPageProps" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewContextProvider", + "type": "Function", + "tags": [], + "label": "ExploratoryViewContextProvider", + "description": [], + "signature": [ + "({\n children,\n reportTypes,\n dataTypes,\n reportConfigMap,\n setHeaderActionMenu,\n asPanel = true,\n theme$,\n}: { children: JSX.Element; } & ExploratoryViewContextValue) => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/contexts/exploratory_view_config.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewContextProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n children,\n reportTypes,\n dataTypes,\n reportConfigMap,\n setHeaderActionMenu,\n asPanel = true,\n theme$,\n}", + "description": [], + "signature": [ + "{ children: JSX.Element; } & ExploratoryViewContextValue" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/contexts/exploratory_view_config.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.formatAlertEvaluationValue", + "type": "Function", + "tags": [], + "label": "formatAlertEvaluationValue", + "description": [], + "signature": [ + "(ruleTypeId?: string | undefined, evaluationValue?: number | undefined) => any" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/format_alert_evaluation_value.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.formatAlertEvaluationValue.$1", + "type": "string", + "tags": [], + "label": "ruleTypeId", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/format_alert_evaluation_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.formatAlertEvaluationValue.$2", + "type": "number", + "tags": [], + "label": "evaluationValue", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/format_alert_evaluation_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.fromQuery", + "type": "Function", + "tags": [], + "label": "fromQuery", + "description": [], + "signature": [ + "(query: Record) => string" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/url.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.fromQuery.$1", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + "Record" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/url.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.getApmTraceUrl", + "type": "Function", + "tags": [], + "label": "getApmTraceUrl", + "description": [], + "signature": [ + "({\n traceId,\n rangeFrom,\n rangeTo,\n}: { traceId: string; rangeFrom: string; rangeTo: string; }) => string" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/get_apm_trace_url.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.getApmTraceUrl.$1", + "type": "Object", + "tags": [], + "label": "{\n traceId,\n rangeFrom,\n rangeTo,\n}", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/utils/get_apm_trace_url.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.getApmTraceUrl.$1.traceId", + "type": "string", + "tags": [], + "label": "traceId", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/utils/get_apm_trace_url.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.getApmTraceUrl.$1.rangeFrom", + "type": "string", + "tags": [], + "label": "rangeFrom", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/utils/get_apm_trace_url.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.getApmTraceUrl.$1.rangeTo", + "type": "string", + "tags": [], + "label": "rangeTo", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/utils/get_apm_trace_url.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.InspectorContextProvider", + "type": "Function", + "tags": [], + "label": "InspectorContextProvider", + "description": [], + "signature": [ + "({ children }: { children: React.ReactNode; }) => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/context/inspector/inspector_context.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.InspectorContextProvider.$1", + "type": "Object", + "tags": [], + "label": "{ children }", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/context/inspector/inspector_context.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.InspectorContextProvider.$1.children", + "type": "CompoundType", + "tags": [], + "label": "children", + "description": [], + "signature": [ + "boolean | React.ReactChild | React.ReactFragment | React.ReactPortal | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/context/inspector/inspector_context.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.NavigationWarningPromptProvider", + "type": "Function", + "tags": [], + "label": "NavigationWarningPromptProvider", + "description": [], + "signature": [ + "({ children }: { children?: React.ReactNode; }) => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/navigation_warning_prompt/context.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.NavigationWarningPromptProvider.$1", + "type": "Object", + "tags": [], + "label": "{ children }", + "description": [], + "signature": [ + "{ children?: React.ReactNode; }" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/navigation_warning_prompt/context.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.Prompt", + "type": "Function", + "tags": [], + "label": "Prompt", + "description": [], + "signature": [ + "({ prompt }: React.PropsWithChildren) => null" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/navigation_warning_prompt/prompt.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.Prompt.$1", + "type": "CompoundType", + "tags": [], + "label": "{ prompt }", + "description": [], + "signature": [ + "React.PropsWithChildren" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/navigation_warning_prompt/prompt.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.Section", + "type": "Function", + "tags": [], + "label": "Section", + "description": [], + "signature": [ + "string & ", + "StyledComponentBase", + "<\"div\", any, {}, never> & ", + "NonReactStatics", + "" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionLink", + "type": "Function", + "tags": [], + "label": "SectionLink", + "description": [], + "signature": [ + "(props: ", + "EuiListGroupItemProps", + ") => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionLink.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "EuiListGroupItemProps" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionLinks", + "type": "Function", + "tags": [], + "label": "SectionLinks", + "description": [], + "signature": [ + "({ children, ...props }: { children?: React.ReactNode; } & ", + "CommonProps", + " & Omit, \"color\"> & { bordered?: boolean | undefined; flush?: boolean | undefined; gutterSize?: \"m\" | \"none\" | \"s\" | undefined; listItems?: ", + "EuiListGroupItemProps", + "[] | undefined; color?: \"text\" | \"subdued\" | \"primary\" | undefined; size?: \"m\" | \"s\" | \"xs\" | \"l\" | undefined; maxWidth?: boolean | ", + "Property", + ".MaxWidth | undefined; showToolTips?: boolean | undefined; wrapText?: boolean | undefined; ariaLabelledby?: string | undefined; }) => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionLinks.$1", + "type": "CompoundType", + "tags": [], + "label": "{ children, ...props }", + "description": [], + "signature": [ + "{ children?: React.ReactNode; } & ", + "CommonProps", + " & Omit, \"color\"> & { bordered?: boolean | undefined; flush?: boolean | undefined; gutterSize?: \"m\" | \"none\" | \"s\" | undefined; listItems?: ", + "EuiListGroupItemProps", + "[] | undefined; color?: \"text\" | \"subdued\" | \"primary\" | undefined; size?: \"m\" | \"s\" | \"xs\" | \"l\" | undefined; maxWidth?: boolean | ", + "Property", + ".MaxWidth | undefined; showToolTips?: boolean | undefined; wrapText?: boolean | undefined; ariaLabelledby?: string | undefined; }" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionSpacer", + "type": "Function", + "tags": [], + "label": "SectionSpacer", + "description": [], + "signature": [ + "() => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionSubtitle", + "type": "Function", + "tags": [], + "label": "SectionSubtitle", + "description": [], + "signature": [ + "({ children }: { children?: React.ReactNode; }) => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionSubtitle.$1", + "type": "Object", + "tags": [], + "label": "{ children }", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionSubtitle.$1.children", + "type": "CompoundType", + "tags": [], + "label": "children", + "description": [], + "signature": [ + "boolean | React.ReactChild | React.ReactFragment | React.ReactPortal | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionTitle", + "type": "Function", + "tags": [], + "label": "SectionTitle", + "description": [], + "signature": [ + "({ children }: { children?: React.ReactNode; }) => JSX.Element" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionTitle.$1", + "type": "Object", + "tags": [], + "label": "{ children }", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionTitle.$1.children", + "type": "CompoundType", + "tags": [], + "label": "children", + "description": [], + "signature": [ + "boolean | React.ReactChild | React.ReactFragment | React.ReactPortal | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.toQuery", + "type": "Function", + "tags": [], + "label": "toQuery", + "description": [], + "signature": [ + "(search: string | undefined) => ", + "ParsedQuery", + "" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/url.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.toQuery.$1", + "type": "string", + "tags": [], + "label": "search", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/utils/url.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.useInspectorContext", + "type": "Function", + "tags": [], + "label": "useInspectorContext", + "description": [], + "signature": [ + "() => ", + "InspectorContextValue" + ], + "path": "x-pack/plugins/exploratory_view/public/context/inspector/use_inspector_context.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ApmFetchDataResponse", + "type": "Interface", + "tags": [], + "label": "ApmFetchDataResponse", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.ApmFetchDataResponse", + "text": "ApmFetchDataResponse" + }, + " extends ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.FetchDataResponse", + "text": "FetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ApmFetchDataResponse.stats", + "type": "Object", + "tags": [], + "label": "stats", + "description": [], + "signature": [ + "{ services: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Stat", + "text": "Stat" + }, + "; transactions: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Stat", + "text": "Stat" + }, + "; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ApmFetchDataResponse.series", + "type": "Object", + "tags": [], + "label": "series", + "description": [], + "signature": [ + "{ transactions: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Series", + "text": "Series" + }, + "; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.APMHasDataResponse", + "type": "Interface", + "tags": [], + "label": "APMHasDataResponse", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.APMHasDataResponse.hasData", + "type": "boolean", + "tags": [], + "label": "hasData", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.APMHasDataResponse.indices", + "type": "Object", + "tags": [], + "label": "indices", + "description": [], + "signature": [ + "ApmIndicesConfig" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ConfigProps", + "type": "Interface", + "tags": [], + "label": "ConfigProps", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ConfigProps.dataView", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ConfigProps.series", + "type": "Object", + "tags": [], + "label": "series", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.SeriesUrl", + "text": "SeriesUrl" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ConfigProps.spaceId", + "type": "string", + "tags": [], + "label": "spaceId", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.Coordinates", + "type": "Interface", + "tags": [], + "label": "Coordinates", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.Coordinates.x", + "type": "number", + "tags": [], + "label": "x", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.Coordinates.y", + "type": "CompoundType", + "tags": [], + "label": "y", + "description": [], + "signature": [ + "number | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.DataHandler", + "type": "Interface", + "tags": [], + "label": "DataHandler", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.DataHandler", + "text": "DataHandler" + }, + "" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.DataHandler.fetchData", + "type": "Function", + "tags": [], + "label": "fetchData", + "description": [], + "signature": [ + "(fetchDataParams: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.FetchDataParams", + "text": "FetchDataParams" + }, + ") => Promise<", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.ObservabilityFetchDataResponse", + "text": "ObservabilityFetchDataResponse" + }, + "[T]>" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.DataHandler.fetchData.$1", + "type": "Object", + "tags": [], + "label": "fetchDataParams", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.FetchDataParams", + "text": "FetchDataParams" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.DataHandler.hasData", + "type": "Function", + "tags": [], + "label": "hasData", + "description": [], + "signature": [ + "(params?: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.HasDataParams", + "text": "HasDataParams" + }, + " | undefined) => Promise<", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.ObservabilityHasDataResponse", + "text": "ObservabilityHasDataResponse" + }, + "[T]>" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.DataHandler.hasData.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.HasDataParams", + "text": "HasDataParams" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps", + "type": "Interface", + "tags": [], + "label": "ExploratoryEmbeddableProps", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.appId", + "type": "CompoundType", + "tags": [], + "label": "appId", + "description": [], + "signature": [ + "\"observability\" | \"securitySolutionUI\" | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.appendTitle", + "type": "Object", + "tags": [], + "label": "appendTitle", + "description": [], + "signature": [ + "JSX.Element | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.attributes", + "type": "Array", + "tags": [], + "label": "attributes", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.AllSeries", + "text": "AllSeries" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.axisTitlesVisibility", + "type": "Object", + "tags": [], + "label": "axisTitlesVisibility", + "description": [], + "signature": [ + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.AxesSettingsConfig", + "text": "AxesSettingsConfig" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.gridlinesVisibilitySettings", + "type": "Object", + "tags": [], + "label": "gridlinesVisibilitySettings", + "description": [], + "signature": [ + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.AxesSettingsConfig", + "text": "AxesSettingsConfig" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.customHeight", + "type": "string", + "tags": [], + "label": "customHeight", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.customLensAttrs", + "type": "Any", + "tags": [], + "label": "customLensAttrs", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.customTimeRange", + "type": "Object", + "tags": [], + "label": "customTimeRange", + "description": [], + "signature": [ + "{ from: string; to: string; } | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.dataTypesIndexPatterns", + "type": "Object", + "tags": [], + "label": "dataTypesIndexPatterns", + "description": [], + "signature": [ + "Partial> | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.isSingleMetric", + "type": "CompoundType", + "tags": [], + "label": "isSingleMetric", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.legendIsVisible", + "type": "CompoundType", + "tags": [], + "label": "legendIsVisible", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.legendPosition", + "type": "CompoundType", + "tags": [], + "label": "legendPosition", + "description": [], + "signature": [ + "Position", + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.hideTicks", + "type": "CompoundType", + "tags": [], + "label": "hideTicks", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.onBrushEnd", + "type": "Function", + "tags": [], + "label": "onBrushEnd", + "description": [], + "signature": [ + "((param: { range: number[]; }) => void) | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.onBrushEnd.$1", + "type": "Object", + "tags": [], + "label": "param", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.onBrushEnd.$1.range", + "type": "Array", + "tags": [], + "label": "range", + "description": [], + "signature": [ + "number[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.onLoad", + "type": "Function", + "tags": [], + "label": "onLoad", + "description": [], + "signature": [ + "((loading: boolean) => void) | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.onLoad.$1", + "type": "boolean", + "tags": [], + "label": "loading", + "description": [], + "signature": [ + "boolean" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.caseOwner", + "type": "string", + "tags": [], + "label": "caseOwner", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.reportConfigMap", + "type": "Object", + "tags": [], + "label": "reportConfigMap", + "description": [], + "signature": [ + "ReportConfigMap", + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.reportType", + "type": "CompoundType", + "tags": [], + "label": "reportType", + "description": [], + "signature": [ + "\"heatmap\" | \"data-distribution\" | \"kpi-over-time\" | \"core-web-vitals\" | \"device-data-distribution\" | \"single-metric\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.showCalculationMethod", + "type": "CompoundType", + "tags": [], + "label": "showCalculationMethod", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.title", + "type": "CompoundType", + "tags": [], + "label": "title", + "description": [], + "signature": [ + "string | JSX.Element | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.withActions", + "type": "CompoundType", + "tags": [], + "label": "withActions", + "description": [], + "signature": [ + "boolean | ", + "ActionTypes", + "[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.align", + "type": "CompoundType", + "tags": [], + "label": "align", + "description": [], + "signature": [ + "\"right\" | \"left\" | \"center\" | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.sparklineMode", + "type": "CompoundType", + "tags": [], + "label": "sparklineMode", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.noLabel", + "type": "CompoundType", + "tags": [], + "label": "noLabel", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.fontSize", + "type": "number", + "tags": [], + "label": "fontSize", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.lineHeight", + "type": "number", + "tags": [], + "label": "lineHeight", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.dataTestSubj", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryEmbeddableProps.searchSessionId", + "type": "string", + "tags": [], + "label": "searchSessionId", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsSetup", + "type": "Interface", + "tags": [], + "label": "ExploratoryViewPublicPluginsSetup", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsSetup.data", + "type": "Object", + "tags": [], + "label": "data", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataPluginApi", + "section": "def-public.DataPublicPluginSetup", + "text": "DataPublicPluginSetup" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsSetup.observability", + "type": "Object", + "tags": [], + "label": "observability", + "description": [], + "signature": [ + "{ dashboard: { register: ({ appName, fetchData, hasData, }: { appName: T; } & ", + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.DataHandler", + "text": "DataHandler" + }, + ") => void; }; observabilityRuleTypeRegistry: { register: (type: ", + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.ObservabilityRuleTypeModel", + "text": "ObservabilityRuleTypeModel" + }, + ") => void; getFormatter: (typeId: string) => ", + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.ObservabilityRuleTypeFormatter", + "text": "ObservabilityRuleTypeFormatter" + }, + " | undefined; list: () => string[]; }; navigation: { registerSections: (sections$: ", + "Observable", + "<", + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.NavigationSection", + "text": "NavigationSection" + }, + "[]>) => void; }; useRulesLink: (options?: ", + "Options", + ") => ", + "LinkProps", + "; }" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsSetup.share", + "type": "CompoundType", + "tags": [], + "label": "share", + "description": [], + "signature": [ + "{ register: (shareMenuProvider: ", + { + "pluginId": "share", + "scope": "public", + "docId": "kibSharePluginApi", + "section": "def-public.ShareMenuProvider", + "text": "ShareMenuProvider" + }, + ") => void; } & { url: ", + { + "pluginId": "share", + "scope": "public", + "docId": "kibSharePluginApi", + "section": "def-public.BrowserUrlService", + "text": "BrowserUrlService" + }, + "; navigate(options: ", + "RedirectOptions", + "<", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + }, + ">): void; setAnonymousAccessServiceProvider: (provider: () => ", + { + "pluginId": "share", + "scope": "common", + "docId": "kibSharePluginApi", + "section": "def-common.AnonymousAccessServiceContract", + "text": "AnonymousAccessServiceContract" + }, + ") => void; }" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsSetup.triggersActionsUi", + "type": "Object", + "tags": [], + "label": "triggersActionsUi", + "description": [], + "signature": [ + { + "pluginId": "triggersActionsUi", + "scope": "public", + "docId": "kibTriggersActionsUiPluginApi", + "section": "def-public.TriggersAndActionsUIPublicPluginSetup", + "text": "TriggersAndActionsUIPublicPluginSetup" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsSetup.usageCollection", + "type": "Object", + "tags": [], + "label": "usageCollection", + "description": [], + "signature": [ + { + "pluginId": "usageCollection", + "scope": "public", + "docId": "kibUsageCollectionPluginApi", + "section": "def-public.UsageCollectionSetup", + "text": "UsageCollectionSetup" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsSetup.home", + "type": "Object", + "tags": [], + "label": "home", + "description": [], + "signature": [ + { + "pluginId": "home", + "scope": "public", + "docId": "kibHomePluginApi", + "section": "def-public.HomePublicPluginSetup", + "text": "HomePublicPluginSetup" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart", + "type": "Interface", + "tags": [], + "label": "ExploratoryViewPublicPluginsStart", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.cases", + "type": "Object", + "tags": [], + "label": "cases", + "description": [], + "signature": [ + { + "pluginId": "cases", + "scope": "public", + "docId": "kibCasesPluginApi", + "section": "def-public.CasesUiStart", + "text": "CasesUiStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.charts", + "type": "CompoundType", + "tags": [], + "label": "charts", + "description": [], + "signature": [ + { + "pluginId": "charts", + "scope": "public", + "docId": "kibChartsPluginApi", + "section": "def-public.ChartsPluginSetup", + "text": "ChartsPluginSetup" + }, + " & { activeCursor: ", + "ActiveCursor", + "; }" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.data", + "type": "Object", + "tags": [], + "label": "data", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataPluginApi", + "section": "def-public.DataPublicPluginStart", + "text": "DataPublicPluginStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.dataViews", + "type": "Object", + "tags": [], + "label": "dataViews", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "public", + "docId": "kibDataViewsPluginApi", + "section": "def-public.DataViewsServicePublic", + "text": "DataViewsServicePublic" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.discover", + "type": "Object", + "tags": [], + "label": "discover", + "description": [], + "signature": [ + { + "pluginId": "discover", + "scope": "public", + "docId": "kibDiscoverPluginApi", + "section": "def-public.DiscoverStart", + "text": "DiscoverStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.embeddable", + "type": "Object", + "tags": [], + "label": "embeddable", + "description": [], + "signature": [ + { + "pluginId": "embeddable", + "scope": "public", + "docId": "kibEmbeddablePluginApi", + "section": "def-public.EmbeddableStart", + "text": "EmbeddableStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.guidedOnboarding", + "type": "Object", + "tags": [], + "label": "guidedOnboarding", + "description": [], + "signature": [ + { + "pluginId": "guidedOnboarding", + "scope": "public", + "docId": "kibGuidedOnboardingPluginApi", + "section": "def-public.GuidedOnboardingPluginStart", + "text": "GuidedOnboardingPluginStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.lens", + "type": "Object", + "tags": [], + "label": "lens", + "description": [], + "signature": [ + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.LensPublicStart", + "text": "LensPublicStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.licensing", + "type": "Object", + "tags": [], + "label": "licensing", + "description": [], + "signature": [ + { + "pluginId": "licensing", + "scope": "public", + "docId": "kibLicensingPluginApi", + "section": "def-public.LicensingPluginStart", + "text": "LicensingPluginStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.observability", + "type": "Object", + "tags": [], + "label": "observability", + "description": [], + "signature": [ + "{ observabilityRuleTypeRegistry: { register: (type: ", + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.ObservabilityRuleTypeModel", + "text": "ObservabilityRuleTypeModel" + }, + ") => void; getFormatter: (typeId: string) => ", + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.ObservabilityRuleTypeFormatter", + "text": "ObservabilityRuleTypeFormatter" + }, + " | undefined; list: () => string[]; }; navigation: { PageTemplate: (pageTemplateProps: ", + "WrappedPageTemplateProps", + ") => JSX.Element; }; createExploratoryViewUrl: ({ reportType, allSeries }: { reportType: ", + "ReportViewType", + "; allSeries: ", + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.AllSeries", + "text": "AllSeries" + }, + "; }, baseHref?: string, appId?: string) => string; getAppDataView: (appId: ", + "AppDataType", + ", indexPattern?: string | undefined) => Promise<", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + " | null | undefined>; ExploratoryViewEmbeddable: (props: ", + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.ExploratoryEmbeddableProps", + "text": "ExploratoryEmbeddableProps" + }, + ") => JSX.Element | null; useRulesLink: (options?: ", + "Options", + ") => ", + "LinkProps", + "; }" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.security", + "type": "Object", + "tags": [], + "label": "security", + "description": [], + "signature": [ + { + "pluginId": "security", + "scope": "public", + "docId": "kibSecurityPluginApi", + "section": "def-public.SecurityPluginStart", + "text": "SecurityPluginStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.share", + "type": "CompoundType", + "tags": [], + "label": "share", + "description": [], + "signature": [ + "{ toggleShareContextMenu: (options: ", + { + "pluginId": "share", + "scope": "public", + "docId": "kibSharePluginApi", + "section": "def-public.ShowShareMenuOptions", + "text": "ShowShareMenuOptions" + }, + ") => void; } & { url: ", + { + "pluginId": "share", + "scope": "public", + "docId": "kibSharePluginApi", + "section": "def-public.BrowserUrlService", + "text": "BrowserUrlService" + }, + "; navigate(options: ", + "RedirectOptions", + "<", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + }, + ">): void; }" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.spaces", + "type": "Object", + "tags": [], + "label": "spaces", + "description": [], + "signature": [ + { + "pluginId": "spaces", + "scope": "public", + "docId": "kibSpacesPluginApi", + "section": "def-public.SpacesApi", + "text": "SpacesApi" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.triggersActionsUi", + "type": "Object", + "tags": [], + "label": "triggersActionsUi", + "description": [], + "signature": [ + { + "pluginId": "triggersActionsUi", + "scope": "public", + "docId": "kibTriggersActionsUiPluginApi", + "section": "def-public.TriggersAndActionsUIPublicPluginStart", + "text": "TriggersAndActionsUIPublicPluginStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.usageCollection", + "type": "Object", + "tags": [], + "label": "usageCollection", + "description": [], + "signature": [ + { + "pluginId": "usageCollection", + "scope": "public", + "docId": "kibUsageCollectionPluginApi", + "section": "def-public.UsageCollectionSetup", + "text": "UsageCollectionSetup" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.unifiedSearch", + "type": "Object", + "tags": [], + "label": "unifiedSearch", + "description": [], + "signature": [ + { + "pluginId": "unifiedSearch", + "scope": "public", + "docId": "kibUnifiedSearchPluginApi", + "section": "def-public.UnifiedSearchPublicPluginStart", + "text": "UnifiedSearchPublicPluginStart" + } + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicPluginsStart.home", + "type": "Object", + "tags": [], + "label": "home", + "description": [], + "signature": [ + { + "pluginId": "home", + "scope": "public", + "docId": "kibHomePluginApi", + "section": "def-public.HomePublicPluginStart", + "text": "HomePublicPluginStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchDataParams", + "type": "Interface", + "tags": [], + "label": "FetchDataParams", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchDataParams.absoluteTime", + "type": "Object", + "tags": [], + "label": "absoluteTime", + "description": [], + "signature": [ + "{ start: number; end: number; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchDataParams.relativeTime", + "type": "Object", + "tags": [], + "label": "relativeTime", + "description": [], + "signature": [ + "{ start: string; end: string; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchDataParams.serviceName", + "type": "string", + "tags": [], + "label": "serviceName", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchDataParams.bucketSize", + "type": "number", + "tags": [], + "label": "bucketSize", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchDataParams.intervalString", + "type": "string", + "tags": [], + "label": "intervalString", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchDataParams.timeZone", + "type": "string", + "tags": [], + "label": "timeZone", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchDataResponse", + "type": "Interface", + "tags": [], + "label": "FetchDataResponse", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchDataResponse.appLink", + "type": "string", + "tags": [], + "label": "appLink", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.HasDataParams", + "type": "Interface", + "tags": [], + "label": "HasDataParams", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.HasDataParams.absoluteTime", + "type": "Object", + "tags": [], + "label": "absoluteTime", + "description": [], + "signature": [ + "{ start: number; end: number; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.HasDataResponse", + "type": "Interface", + "tags": [], + "label": "HasDataResponse", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.HasDataResponse.hasData", + "type": "boolean", + "tags": [], + "label": "hasData", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.InfraLogsHasDataResponse", + "type": "Interface", + "tags": [], + "label": "InfraLogsHasDataResponse", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.InfraLogsHasDataResponse.hasData", + "type": "boolean", + "tags": [], + "label": "hasData", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.InfraLogsHasDataResponse.indices", + "type": "string", + "tags": [], + "label": "indices", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.InfraMetricsHasDataResponse", + "type": "Interface", + "tags": [], + "label": "InfraMetricsHasDataResponse", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.InfraMetricsHasDataResponse.hasData", + "type": "boolean", + "tags": [], + "label": "hasData", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.InfraMetricsHasDataResponse.indices", + "type": "string", + "tags": [], + "label": "indices", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.LogsFetchDataResponse", + "type": "Interface", + "tags": [], + "label": "LogsFetchDataResponse", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.LogsFetchDataResponse", + "text": "LogsFetchDataResponse" + }, + " extends ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.FetchDataResponse", + "text": "FetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.LogsFetchDataResponse.stats", + "type": "Object", + "tags": [], + "label": "stats", + "description": [], + "signature": [ + "{ [x: string]: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Stat", + "text": "Stat" + }, + " & { label: string; }; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.LogsFetchDataResponse.series", + "type": "Object", + "tags": [], + "label": "series", + "description": [], + "signature": [ + "{ [x: string]: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Series", + "text": "Series" + }, + " & { label: string; }; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataResponse", + "type": "Interface", + "tags": [], + "label": "MetricsFetchDataResponse", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.MetricsFetchDataResponse", + "text": "MetricsFetchDataResponse" + }, + " extends ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.FetchDataResponse", + "text": "FetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataResponse.sort", + "type": "Function", + "tags": [], + "label": "sort", + "description": [], + "signature": [ + "(by: string, direction: string) => Promise<", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.MetricsFetchDataResponse", + "text": "MetricsFetchDataResponse" + }, + ">" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataResponse.sort.$1", + "type": "string", + "tags": [], + "label": "by", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataResponse.sort.$2", + "type": "string", + "tags": [], + "label": "direction", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataResponse.series", + "type": "Array", + "tags": [], + "label": "series", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.MetricsFetchDataSeries", + "text": "MetricsFetchDataSeries" + }, + "[]" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries", + "type": "Interface", + "tags": [], + "label": "MetricsFetchDataSeries", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.name", + "type": "CompoundType", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.platform", + "type": "CompoundType", + "tags": [], + "label": "platform", + "description": [], + "signature": [ + "string | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.provider", + "type": "CompoundType", + "tags": [], + "label": "provider", + "description": [], + "signature": [ + "string | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.cpu", + "type": "CompoundType", + "tags": [], + "label": "cpu", + "description": [], + "signature": [ + "number | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.iowait", + "type": "CompoundType", + "tags": [], + "label": "iowait", + "description": [], + "signature": [ + "number | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.load", + "type": "CompoundType", + "tags": [], + "label": "load", + "description": [], + "signature": [ + "number | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.uptime", + "type": "CompoundType", + "tags": [], + "label": "uptime", + "description": [], + "signature": [ + "number | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.rx", + "type": "CompoundType", + "tags": [], + "label": "rx", + "description": [], + "signature": [ + "number | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.tx", + "type": "CompoundType", + "tags": [], + "label": "tx", + "description": [], + "signature": [ + "number | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.MetricsFetchDataSeries.timeseries", + "type": "Array", + "tags": [], + "label": "timeseries", + "description": [], + "signature": [ + "{ timestamp: number; cpu: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.NumberOrNull", + "text": "NumberOrNull" + }, + "; iowait: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.NumberOrNull", + "text": "NumberOrNull" + }, + "; load: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.NumberOrNull", + "text": "NumberOrNull" + }, + "; rx: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.NumberOrNull", + "text": "NumberOrNull" + }, + "; tx: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.NumberOrNull", + "text": "NumberOrNull" + }, + "; }[]" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.NavigationSection", + "type": "Interface", + "tags": [], + "label": "NavigationSection", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/services/navigation_registry.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.NavigationSection.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/services/navigation_registry.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.NavigationSection.sortKey", + "type": "number", + "tags": [], + "label": "sortKey", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/services/navigation_registry.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.NavigationSection.entries", + "type": "Array", + "tags": [], + "label": "entries", + "description": [], + "signature": [ + "NavigationEntry", + "[]" + ], + "path": "x-pack/plugins/exploratory_view/public/services/navigation_registry.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.NavigationSection.isBetaFeature", + "type": "CompoundType", + "tags": [], + "label": "isBetaFeature", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/services/navigation_registry.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityFetchDataResponse", + "type": "Interface", + "tags": [], + "label": "ObservabilityFetchDataResponse", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityFetchDataResponse.apm", + "type": "Object", + "tags": [], + "label": "apm", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.ApmFetchDataResponse", + "text": "ApmFetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityFetchDataResponse.infra_metrics", + "type": "Object", + "tags": [], + "label": "infra_metrics", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.MetricsFetchDataResponse", + "text": "MetricsFetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityFetchDataResponse.infra_logs", + "type": "Object", + "tags": [], + "label": "infra_logs", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.LogsFetchDataResponse", + "text": "LogsFetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityFetchDataResponse.uptime", + "type": "Object", + "tags": [], + "label": "uptime", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.UptimeFetchDataResponse", + "text": "UptimeFetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityFetchDataResponse.ux", + "type": "Object", + "tags": [], + "label": "ux", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.UxFetchDataResponse", + "text": "UxFetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityHasDataResponse", + "type": "Interface", + "tags": [], + "label": "ObservabilityHasDataResponse", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityHasDataResponse.apm", + "type": "Object", + "tags": [], + "label": "apm", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.APMHasDataResponse", + "text": "APMHasDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityHasDataResponse.infra_metrics", + "type": "Object", + "tags": [], + "label": "infra_metrics", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.InfraMetricsHasDataResponse", + "text": "InfraMetricsHasDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityHasDataResponse.infra_logs", + "type": "Object", + "tags": [], + "label": "infra_logs", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.InfraLogsHasDataResponse", + "text": "InfraLogsHasDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityHasDataResponse.uptime", + "type": "Object", + "tags": [], + "label": "uptime", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.SyntheticsHasDataResponse", + "text": "SyntheticsHasDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityHasDataResponse.ux", + "type": "Object", + "tags": [], + "label": "ux", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.UXHasDataResponse", + "text": "UXHasDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.Series", + "type": "Interface", + "tags": [], + "label": "Series", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.Series.coordinates", + "type": "Array", + "tags": [], + "label": "coordinates", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Coordinates", + "text": "Coordinates" + }, + "[]" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig", + "type": "Interface", + "tags": [], + "label": "SeriesConfig", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.reportType", + "type": "string", + "tags": [], + "label": "reportType", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.xAxisColumn", + "type": "CompoundType", + "tags": [], + "label": "xAxisColumn", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.LastValueIndexPatternColumn", + "text": "LastValueIndexPatternColumn" + }, + "> | Partial<", + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.DateHistogramIndexPatternColumn", + "text": "DateHistogramIndexPatternColumn" + }, + ">" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.yAxisColumns", + "type": "Array", + "tags": [], + "label": "yAxisColumns", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.FieldBasedIndexPatternColumn", + "text": "FieldBasedIndexPatternColumn" + }, + ">[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.breakdownFields", + "type": "Array", + "tags": [], + "label": "breakdownFields", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.defaultSeriesType", + "type": "CompoundType", + "tags": [], + "label": "defaultSeriesType", + "description": [], + "signature": [ + "\"area\" | \"line\" | \"bar\" | \"bar_stacked\" | \"area_stacked\" | \"bar_horizontal\" | \"bar_percentage_stacked\" | \"bar_horizontal_stacked\" | \"area_percentage_stacked\" | \"bar_horizontal_percentage_stacked\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.filterFields", + "type": "Array", + "tags": [], + "label": "filterFields", + "description": [], + "signature": [ + "(string | { field: string; nested?: string | undefined; isNegated?: boolean | undefined; })[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.seriesTypes", + "type": "Array", + "tags": [], + "label": "seriesTypes", + "description": [], + "signature": [ + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.SeriesType", + "text": "SeriesType" + }, + "[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.baseFilters", + "type": "Array", + "tags": [], + "label": "baseFilters", + "description": [], + "signature": [ + "(", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.PhraseFilter", + "text": "PhraseFilter" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.ExistsFilter", + "text": "ExistsFilter" + }, + " | ", + { + "pluginId": "lens", + "scope": "common", + "docId": "kibLensPluginApi", + "section": "def-common.PersistableFilter", + "text": "PersistableFilter" + }, + ")[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.definitionFields", + "type": "Array", + "tags": [], + "label": "definitionFields", + "description": [], + "signature": [ + "(string | { field: string; nested?: string | undefined; singleSelection?: boolean | undefined; filters?: (", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.PhraseFilter", + "text": "PhraseFilter" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.ExistsFilter", + "text": "ExistsFilter" + }, + " | ", + { + "pluginId": "lens", + "scope": "common", + "docId": "kibLensPluginApi", + "section": "def-common.PersistableFilter", + "text": "PersistableFilter" + }, + ")[] | undefined; })[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.textDefinitionFields", + "type": "Array", + "tags": [], + "label": "textDefinitionFields", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.metricOptions", + "type": "Array", + "tags": [], + "label": "metricOptions", + "description": [], + "signature": [ + "(", + "MetricOption", + " | { id: string; field?: string | undefined; label: string; items: ", + "MetricOption", + "[]; columnType?: string | undefined; })[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.labels", + "type": "Object", + "tags": [], + "label": "labels", + "description": [], + "signature": [ + "{ [x: string]: string; }" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.hasOperationType", + "type": "boolean", + "tags": [], + "label": "hasOperationType", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.palette", + "type": "Object", + "tags": [], + "label": "palette", + "description": [], + "signature": [ + { + "pluginId": "@kbn/coloring", + "scope": "common", + "docId": "kibKbnColoringPluginApi", + "section": "def-common.PaletteOutput", + "text": "PaletteOutput" + }, + "<{ [key: string]: unknown; }> | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.yTitle", + "type": "string", + "tags": [], + "label": "yTitle", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.yConfig", + "type": "Array", + "tags": [], + "label": "yConfig", + "description": [], + "signature": [ + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.YConfig", + "text": "YConfig" + }, + "[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesConfig.query", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + "{ query: string; language: \"kuery\"; } | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl", + "type": "Interface", + "tags": [], + "label": "SeriesUrl", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.time", + "type": "Object", + "tags": [], + "label": "time", + "description": [], + "signature": [ + "{ to: string; from: string; }" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.breakdown", + "type": "string", + "tags": [], + "label": "breakdown", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.filters", + "type": "Array", + "tags": [], + "label": "filters", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.UrlFilter", + "text": "UrlFilter" + }, + "[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.seriesType", + "type": "CompoundType", + "tags": [], + "label": "seriesType", + "description": [], + "signature": [ + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.SeriesType", + "text": "SeriesType" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.operationType", + "type": "string", + "tags": [], + "label": "operationType", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.dataType", + "type": "CompoundType", + "tags": [], + "label": "dataType", + "description": [], + "signature": [ + "\"uptime\" | \"alerts\" | \"synthetics\" | \"ux\" | \"infra_logs\" | \"infra_metrics\" | \"apm\" | \"mobile\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.reportDefinitions", + "type": "Object", + "tags": [], + "label": "reportDefinitions", + "description": [], + "signature": [ + "URLReportDefinition", + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.textReportDefinitions", + "type": "Object", + "tags": [], + "label": "textReportDefinitions", + "description": [], + "signature": [ + "URLTextReportDefinition", + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.selectedMetricField", + "type": "string", + "tags": [], + "label": "selectedMetricField", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.hidden", + "type": "CompoundType", + "tags": [], + "label": "hidden", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.showPercentileAnnotations", + "type": "CompoundType", + "tags": [], + "label": "showPercentileAnnotations", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SeriesUrl.color", + "type": "string", + "tags": [], + "label": "color", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.Stat", + "type": "Interface", + "tags": [], + "label": "Stat", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.Stat.type", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"number\" | \"percent\" | \"bytesPerSecond\"" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.Stat.value", + "type": "number", + "tags": [], + "label": "value", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SyntheticsHasDataResponse", + "type": "Interface", + "tags": [], + "label": "SyntheticsHasDataResponse", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.SyntheticsHasDataResponse", + "text": "SyntheticsHasDataResponse" + }, + " extends ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.HasDataResponse", + "text": "HasDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.SyntheticsHasDataResponse.indices", + "type": "string", + "tags": [], + "label": "indices", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UptimeFetchDataResponse", + "type": "Interface", + "tags": [], + "label": "UptimeFetchDataResponse", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.UptimeFetchDataResponse", + "text": "UptimeFetchDataResponse" + }, + " extends ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.FetchDataResponse", + "text": "FetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.UptimeFetchDataResponse.stats", + "type": "Object", + "tags": [], + "label": "stats", + "description": [], + "signature": [ + "{ monitors: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Stat", + "text": "Stat" + }, + "; up: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Stat", + "text": "Stat" + }, + "; down: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Stat", + "text": "Stat" + }, + "; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UptimeFetchDataResponse.series", + "type": "Object", + "tags": [], + "label": "series", + "description": [], + "signature": [ + "{ up: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Series", + "text": "Series" + }, + "; down: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Series", + "text": "Series" + }, + "; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UrlFilter", + "type": "Interface", + "tags": [], + "label": "UrlFilter", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.UrlFilter.field", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UrlFilter.values", + "type": "Array", + "tags": [], + "label": "values", + "description": [], + "signature": [ + "(string | number)[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UrlFilter.notValues", + "type": "Array", + "tags": [], + "label": "notValues", + "description": [], + "signature": [ + "(string | number)[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UrlFilter.wildcards", + "type": "Array", + "tags": [], + "label": "wildcards", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UrlFilter.notWildcards", + "type": "Array", + "tags": [], + "label": "notWildcards", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UxFetchDataResponse", + "type": "Interface", + "tags": [], + "label": "UxFetchDataResponse", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.UxFetchDataResponse", + "text": "UxFetchDataResponse" + }, + " extends ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.FetchDataResponse", + "text": "FetchDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.UxFetchDataResponse.coreWebVitals", + "type": "Object", + "tags": [], + "label": "coreWebVitals", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.UXMetrics", + "text": "UXMetrics" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXHasDataResponse", + "type": "Interface", + "tags": [], + "label": "UXHasDataResponse", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.UXHasDataResponse", + "text": "UXHasDataResponse" + }, + " extends ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.HasDataResponse", + "text": "HasDataResponse" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXHasDataResponse.serviceName", + "type": "CompoundType", + "tags": [], + "label": "serviceName", + "description": [], + "signature": [ + "string | number | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXHasDataResponse.indices", + "type": "string", + "tags": [], + "label": "indices", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics", + "type": "Interface", + "tags": [], + "label": "UXMetrics", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics.cls", + "type": "CompoundType", + "tags": [], + "label": "cls", + "description": [], + "signature": [ + "number | null" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics.fid", + "type": "CompoundType", + "tags": [], + "label": "fid", + "description": [], + "signature": [ + "number | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics.lcp", + "type": "CompoundType", + "tags": [], + "label": "lcp", + "description": [], + "signature": [ + "number | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics.tbt", + "type": "number", + "tags": [], + "label": "tbt", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics.fcp", + "type": "CompoundType", + "tags": [], + "label": "fcp", + "description": [], + "signature": [ + "number | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics.coreVitalPages", + "type": "number", + "tags": [], + "label": "coreVitalPages", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics.lcpRanks", + "type": "Array", + "tags": [], + "label": "lcpRanks", + "description": [], + "signature": [ + "number[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics.fidRanks", + "type": "Array", + "tags": [], + "label": "fidRanks", + "description": [], + "signature": [ + "number[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.UXMetrics.clsRanks", + "type": "Array", + "tags": [], + "label": "clsRanks", + "description": [], + "signature": [ + "number[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/core_web_vitals/index.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.ReportTypes", + "type": "Enum", + "tags": [], + "label": "ReportTypes", + "description": [], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.AddInspectorRequest", + "type": "Type", + "tags": [], + "label": "AddInspectorRequest", + "description": [], + "signature": [ + "(result: ", + "FetcherResult", + "<{ mainStatisticsData?: { _inspect?: ", + "InspectResponse", + " | undefined; } | undefined; _inspect?: ", + "InspectResponse", + " | undefined; }>) => void" + ], + "path": "x-pack/plugins/exploratory_view/public/context/inspector/inspector_context.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.AddInspectorRequest.$1", + "type": "Object", + "tags": [], + "label": "result", + "description": [], + "signature": [ + "FetcherResult", + "<{ mainStatisticsData?: { _inspect?: ", + "InspectResponse", + " | undefined; } | undefined; _inspect?: ", + "InspectResponse", + " | undefined; }>" + ], + "path": "x-pack/plugins/exploratory_view/public/context/inspector/inspector_context.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ALL_VALUES_SELECTED", + "type": "string", + "tags": [], + "label": "ALL_VALUES_SELECTED", + "description": [], + "signature": [ + "\"ALL_VALUES\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/url_constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.AllSeries", + "type": "Type", + "tags": [], + "label": "AllSeries", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.SeriesUrl", + "text": "SeriesUrl" + }, + "[]" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/hooks/use_series_storage.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.APP_ROUTE", + "type": "string", + "tags": [], + "label": "APP_ROUTE", + "description": [], + "signature": [ + "\"/app/exploratory-view\"" + ], + "path": "x-pack/plugins/exploratory_view/public/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ENVIRONMENT_ALL", + "type": "string", + "tags": [], + "label": "ENVIRONMENT_ALL", + "description": [], + "signature": [ + "\"ENVIRONMENT_ALL\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchData", + "type": "Type", + "tags": [], + "label": "FetchData", + "description": [], + "signature": [ + "(fetchDataParams: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.FetchDataParams", + "text": "FetchDataParams" + }, + ") => Promise" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.FetchData.$1", + "type": "Object", + "tags": [], + "label": "fetchDataParams", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.FetchDataParams", + "text": "FetchDataParams" + } + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.FILTER_RECORDS", + "type": "string", + "tags": [], + "label": "FILTER_RECORDS", + "description": [], + "signature": [ + "\"FILTER_RECORDS\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.HasData", + "type": "Type", + "tags": [], + "label": "HasData", + "description": [], + "signature": [ + "(params?: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.HasDataParams", + "text": "HasDataParams" + }, + " | undefined) => Promise<", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.ObservabilityHasDataResponse", + "text": "ObservabilityHasDataResponse" + }, + "[T]>" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-public.HasData.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.HasDataParams", + "text": "HasDataParams" + }, + " | undefined" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.NumberOrNull", + "type": "Type", + "tags": [], + "label": "NumberOrNull", + "description": [], + "signature": [ + "number | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.ObservabilityFetchDataPlugins", + "type": "Type", + "tags": [], + "label": "ObservabilityFetchDataPlugins", + "description": [], + "signature": [ + "\"uptime\" | \"ux\" | \"infra_logs\" | \"infra_metrics\" | \"apm\"" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.OPERATION_COLUMN", + "type": "string", + "tags": [], + "label": "OPERATION_COLUMN", + "description": [], + "signature": [ + "\"operation\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.RECORDS_FIELD", + "type": "string", + "tags": [], + "label": "RECORDS_FIELD", + "description": [], + "signature": [ + "\"___records___\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.RECORDS_PERCENTAGE_FIELD", + "type": "string", + "tags": [], + "label": "RECORDS_PERCENTAGE_FIELD", + "description": [], + "signature": [ + "\"RecordsPercentage\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.REPORT_METRIC_FIELD", + "type": "string", + "tags": [], + "label": "REPORT_METRIC_FIELD", + "description": [], + "signature": [ + "\"REPORT_METRIC_FIELD\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.SectionLinkProps", + "type": "Type", + "tags": [], + "label": "SectionLinkProps", + "description": [], + "signature": [ + "CommonProps", + " & Omit<(", + "DisambiguateSet", + "<(", + "DisambiguateSet", + ", Omit, \"href\">> & Omit, \"href\">) | (", + "DisambiguateSet", + ", \"href\">, React.ButtonHTMLAttributes> & React.ButtonHTMLAttributes), React.HTMLAttributes> & React.HTMLAttributes) | (", + "DisambiguateSet", + ", (", + "DisambiguateSet", + ", Omit, \"href\">> & Omit, \"href\">) | (", + "DisambiguateSet", + ", \"href\">, React.ButtonHTMLAttributes> & React.ButtonHTMLAttributes)> & ((", + "DisambiguateSet", + ", Omit, \"href\">> & Omit, \"href\">) | (", + "DisambiguateSet", + ", \"href\">, React.ButtonHTMLAttributes> & React.ButtonHTMLAttributes))), \"color\" | \"onClick\" | \"rel\" | \"target\"> & { size?: \"m\" | \"s\" | \"xs\" | \"l\" | undefined; color?: \"text\" | \"subdued\" | \"primary\" | undefined; label: React.ReactNode; isActive?: boolean | undefined; isDisabled?: boolean | undefined; href?: string | undefined; target?: string | undefined; rel?: string | undefined; iconType?: ", + "IconType", + " | undefined; iconProps?: Omit<", + "EuiIconProps", + ", \"type\"> | undefined; icon?: React.ReactElement> | undefined; showToolTip?: boolean | undefined; extraAction?: ", + "EuiListGroupItemExtraActionProps", + " | undefined; onClick?: React.MouseEventHandler | undefined; wrapText?: boolean | undefined; buttonRef?: React.Ref | undefined; toolTipText?: string | undefined; }" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/action_menu/index.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.StringOrNull", + "type": "Type", + "tags": [], + "label": "StringOrNull", + "description": [], + "signature": [ + "string | null" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.Subset", + "type": "Type", + "tags": [], + "label": "Subset", + "description": [ + "\nAllow partial of nested object" + ], + "signature": [ + "{ [attr in keyof K]?: (K[attr] extends object ? ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.Subset", + "text": "Subset" + }, + " : K[attr]) | undefined; }" + ], + "path": "x-pack/plugins/exploratory_view/public/typings/utils.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.TERMS_COLUMN", + "type": "string", + "tags": [], + "label": "TERMS_COLUMN", + "description": [], + "signature": [ + "\"TERMS_COLUMN\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-public.USE_BREAK_DOWN_COLUMN", + "type": "string", + "tags": [], + "label": "USE_BREAK_DOWN_COLUMN", + "description": [], + "signature": [ + "\"USE_BREAK_DOWN_COLUMN\"" + ], + "path": "x-pack/plugins/exploratory_view/public/components/shared/exploratory_view/configurations/constants/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [], + "setup": { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicSetup", + "type": "Type", + "tags": [], + "label": "ExploratoryViewPublicSetup", + "description": [], + "signature": [ + "{ register: ({ appName, fetchData, hasData, }: { appName: T; } & ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.DataHandler", + "text": "DataHandler" + }, + ") => void; }" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "exploratoryView", + "id": "def-public.ExploratoryViewPublicStart", + "type": "Type", + "tags": [], + "label": "ExploratoryViewPublicStart", + "description": [], + "signature": [ + "{ createExploratoryViewUrl: ({ reportType, allSeries }: { reportType: ", + "ReportViewType", + "; allSeries: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.AllSeries", + "text": "AllSeries" + }, + "; }, baseHref?: string) => string; getAppDataView: (appId: ", + "AppDataType", + ", indexPattern?: string | undefined) => Promise<", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + " | null | undefined>; ExploratoryViewEmbeddable: (props: ", + { + "pluginId": "exploratoryView", + "scope": "public", + "docId": "kibExploratoryViewPluginApi", + "section": "def-public.ExploratoryEmbeddableProps", + "text": "ExploratoryEmbeddableProps" + }, + ") => JSX.Element | null; }" + ], + "path": "x-pack/plugins/exploratory_view/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "lifecycle": "start", + "initialIsOpen": true + } + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "exploratoryView", + "id": "def-server.ObservabilityConfig", + "type": "Type", + "tags": [], + "label": "ObservabilityConfig", + "description": [], + "signature": [ + "{ readonly annotations: Readonly<{} & { enabled: boolean; index: string; }>; }" + ], + "path": "x-pack/plugins/exploratory_view/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-server.ScopedAnnotationsClient", + "type": "Type", + "tags": [], + "label": "ScopedAnnotationsClient", + "description": [], + "signature": [ + "{ readonly index: string; create: (createParams: { annotation: { type: string; }; '@timestamp': string; message: string; } & { tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; }) => Promise<{ _id: string; _index: string; _source: ", + "Annotation", + "; }>; getById: (getByIdParams: { id: string; }) => Promise<", + "GetResponse", + ">; delete: (deleteParams: { id: string; }) => Promise<", + "WriteResponseBase", + ">; }" + ], + "path": "x-pack/plugins/exploratory_view/server/lib/annotations/bootstrap_annotations.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [], + "setup": { + "parentPluginId": "exploratoryView", + "id": "def-server.ExploratoryViewPluginSetup", + "type": "Type", + "tags": [], + "label": "ExploratoryViewPluginSetup", + "description": [], + "signature": [ + "{ getScopedAnnotationsClient: (requestContext: ", + { + "pluginId": "@kbn/core-http-request-handler-context-server", + "scope": "common", + "docId": "kibKbnCoreHttpRequestHandlerContextServerPluginApi", + "section": "def-common.RequestHandlerContext", + "text": "RequestHandlerContext" + }, + " & { licensing: Promise<", + { + "pluginId": "licensing", + "scope": "server", + "docId": "kibLicensingPluginApi", + "section": "def-server.LicensingApiRequestHandlerContext", + "text": "LicensingApiRequestHandlerContext" + }, + ">; }, request: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.KibanaRequest", + "text": "KibanaRequest" + }, + ") => Promise<{ readonly index: string; create: (createParams: { annotation: { type: string; }; '@timestamp': string; message: string; } & { tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; }) => Promise<{ _id: string; _index: string; _source: ", + "Annotation", + "; }>; getById: (getByIdParams: { id: string; }) => Promise<", + "GetResponse", + ">; delete: (deleteParams: { id: string; }) => Promise<", + "WriteResponseBase", + ">; } | undefined>; }" + ], + "path": "x-pack/plugins/exploratory_view/server/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "lifecycle": "setup", + "initialIsOpen": true + } + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.asPercent", + "type": "Function", + "tags": [], + "label": "asPercent", + "description": [], + "signature": [ + "(numerator: ", + "Maybe", + ", denominator: number | undefined, fallbackResult: any) => any" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/formatters.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.asPercent.$1", + "type": "CompoundType", + "tags": [], + "label": "numerator", + "description": [], + "signature": [ + "Maybe", + "" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/formatters.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.asPercent.$2", + "type": "number", + "tags": [], + "label": "denominator", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/formatters.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.asPercent.$3", + "type": "Any", + "tags": [], + "label": "fallbackResult", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/formatters.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.formatDurationFromTimeUnitChar", + "type": "Function", + "tags": [], + "label": "formatDurationFromTimeUnitChar", + "description": [], + "signature": [ + "(time: number, unit: ", + { + "pluginId": "exploratoryView", + "scope": "common", + "docId": "kibExploratoryViewPluginApi", + "section": "def-common.TimeUnitChar", + "text": "TimeUnitChar" + }, + ") => string" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.formatDurationFromTimeUnitChar.$1", + "type": "number", + "tags": [], + "label": "time", + "description": [], + "signature": [ + "number" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.formatDurationFromTimeUnitChar.$2", + "type": "CompoundType", + "tags": [], + "label": "unit", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "common", + "docId": "kibExploratoryViewPluginApi", + "section": "def-common.TimeUnitChar", + "text": "TimeUnitChar" + } + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.getDurationFormatter", + "type": "Function", + "tags": [], + "label": "getDurationFormatter", + "description": [], + "signature": [ + "(max: number) => ", + { + "pluginId": "exploratoryView", + "scope": "common", + "docId": "kibExploratoryViewPluginApi", + "section": "def-common.TimeFormatter", + "text": "TimeFormatter" + } + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.getDurationFormatter.$1", + "type": "number", + "tags": [], + "label": "max", + "description": [], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.getInspectResponse", + "type": "Function", + "tags": [], + "label": "getInspectResponse", + "description": [ + "\nCreate a formatted response to be sent in the _inspect key for use in the\ninspector." + ], + "signature": [ + "({\n esError,\n esRequestParams,\n esRequestStatus,\n esResponse,\n kibanaRequest,\n operationName,\n startTime,\n}: { esError: ", + "WrappedElasticsearchClientError", + " | null; esRequestParams: Record; esRequestStatus: ", + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.RequestStatus", + "text": "RequestStatus" + }, + "; esResponse: any; kibanaRequest: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.KibanaRequest", + "text": "KibanaRequest" + }, + "; operationName: string; startTime: number; }) => ", + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.Request", + "text": "Request" + } + ], + "path": "x-pack/plugins/exploratory_view/common/utils/get_inspect_response.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.getInspectResponse.$1", + "type": "Object", + "tags": [], + "label": "{\n esError,\n esRequestParams,\n esRequestStatus,\n esResponse,\n kibanaRequest,\n operationName,\n startTime,\n}", + "description": [], + "path": "x-pack/plugins/exploratory_view/common/utils/get_inspect_response.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.getInspectResponse.$1.esError", + "type": "CompoundType", + "tags": [], + "label": "esError", + "description": [], + "signature": [ + "WrappedElasticsearchClientError", + " | null" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/get_inspect_response.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.getInspectResponse.$1.esRequestParams", + "type": "Object", + "tags": [], + "label": "esRequestParams", + "description": [], + "signature": [ + "{ [x: string]: any; }" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/get_inspect_response.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.getInspectResponse.$1.esRequestStatus", + "type": "Enum", + "tags": [], + "label": "esRequestStatus", + "description": [], + "signature": [ + { + "pluginId": "inspector", + "scope": "common", + "docId": "kibInspectorPluginApi", + "section": "def-common.RequestStatus", + "text": "RequestStatus" + } + ], + "path": "x-pack/plugins/exploratory_view/common/utils/get_inspect_response.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.getInspectResponse.$1.esResponse", + "type": "Any", + "tags": [], + "label": "esResponse", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/get_inspect_response.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.getInspectResponse.$1.kibanaRequest", + "type": "Object", + "tags": [], + "label": "kibanaRequest", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.KibanaRequest", + "text": "KibanaRequest" + }, + "" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/get_inspect_response.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.getInspectResponse.$1.operationName", + "type": "string", + "tags": [], + "label": "operationName", + "description": [], + "path": "x-pack/plugins/exploratory_view/common/utils/get_inspect_response.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.getInspectResponse.$1.startTime", + "type": "number", + "tags": [], + "label": "startTime", + "description": [], + "path": "x-pack/plugins/exploratory_view/common/utils/get_inspect_response.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.getProbabilityFromProgressiveLoadingQuality", + "type": "Function", + "tags": [], + "label": "getProbabilityFromProgressiveLoadingQuality", + "description": [], + "signature": [ + "(quality: ", + { + "pluginId": "exploratoryView", + "scope": "common", + "docId": "kibExploratoryViewPluginApi", + "section": "def-common.ProgressiveLoadingQuality", + "text": "ProgressiveLoadingQuality" + }, + ") => number" + ], + "path": "x-pack/plugins/exploratory_view/common/progressive_loading.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.getProbabilityFromProgressiveLoadingQuality.$1", + "type": "Enum", + "tags": [], + "label": "quality", + "description": [], + "signature": [ + { + "pluginId": "exploratoryView", + "scope": "common", + "docId": "kibExploratoryViewPluginApi", + "section": "def-common.ProgressiveLoadingQuality", + "text": "ProgressiveLoadingQuality" + } + ], + "path": "x-pack/plugins/exploratory_view/common/progressive_loading.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.ProcessorEvent", + "type": "Enum", + "tags": [], + "label": "ProcessorEvent", + "description": [], + "path": "x-pack/plugins/exploratory_view/common/processor_event.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.ProgressiveLoadingQuality", + "type": "Enum", + "tags": [], + "label": "ProgressiveLoadingQuality", + "description": [], + "path": "x-pack/plugins/exploratory_view/common/progressive_loading.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.apmAWSLambdaPriceFactor", + "type": "string", + "tags": [], + "label": "apmAWSLambdaPriceFactor", + "description": [], + "signature": [ + "\"observability:apmAWSLambdaPriceFactor\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.apmAWSLambdaRequestCostPerMillion", + "type": "string", + "tags": [], + "label": "apmAWSLambdaRequestCostPerMillion", + "description": [], + "signature": [ + "\"observability:apmAWSLambdaRequestCostPerMillion\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.apmEnableContinuousRollups", + "type": "string", + "tags": [], + "label": "apmEnableContinuousRollups", + "description": [], + "signature": [ + "\"observability:apmEnableContinuousRollups\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.apmEnableServiceMetrics", + "type": "string", + "tags": [], + "label": "apmEnableServiceMetrics", + "description": [], + "signature": [ + "\"observability:apmEnableServiceMetrics\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.apmLabsButton", + "type": "string", + "tags": [], + "label": "apmLabsButton", + "description": [], + "signature": [ + "\"observability:apmLabsButton\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.apmProgressiveLoading", + "type": "string", + "tags": [], + "label": "apmProgressiveLoading", + "description": [], + "signature": [ + "\"observability:apmProgressiveLoading\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.apmServiceGroupMaxNumberOfServices", + "type": "string", + "tags": [], + "label": "apmServiceGroupMaxNumberOfServices", + "description": [], + "signature": [ + "\"observability:apmServiceGroupMaxNumberOfServices\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.apmServiceInventoryOptimizedSorting", + "type": "string", + "tags": [], + "label": "apmServiceInventoryOptimizedSorting", + "description": [], + "signature": [ + "\"observability:apmServiceInventoryOptimizedSorting\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.apmTraceExplorerTab", + "type": "string", + "tags": [], + "label": "apmTraceExplorerTab", + "description": [], + "signature": [ + "\"observability:apmTraceExplorerTab\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.AsDuration", + "type": "Type", + "tags": [], + "label": "AsDuration", + "description": [], + "signature": [ + "(value: ", + "Maybe", + ", { defaultValue, extended }?: FormatterOptions) => string" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.AsDuration.$1", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "number | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.AsDuration.$2", + "type": "Object", + "tags": [], + "label": "__1", + "description": [], + "signature": [ + "FormatterOptions" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.AsPercent", + "type": "Type", + "tags": [], + "label": "AsPercent", + "description": [], + "signature": [ + "(numerator: ", + "Maybe", + ", denominator: number | undefined, fallbackResult?: any) => any" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/formatters.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.AsPercent.$1", + "type": "CompoundType", + "tags": [], + "label": "numerator", + "description": [], + "signature": [ + "number | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/formatters.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.AsPercent.$2", + "type": "number", + "tags": [], + "label": "denominator", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/formatters.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.AsPercent.$3", + "type": "Any", + "tags": [], + "label": "fallbackResult", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/formatters.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.casesFeatureId", + "type": "string", + "tags": [], + "label": "casesFeatureId", + "description": [], + "signature": [ + "\"observabilityCases\"" + ], + "path": "x-pack/plugins/exploratory_view/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.casesPath", + "type": "string", + "tags": [], + "label": "casesPath", + "description": [], + "signature": [ + "\"/cases\"" + ], + "path": "x-pack/plugins/exploratory_view/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.defaultApmServiceEnvironment", + "type": "string", + "tags": [], + "label": "defaultApmServiceEnvironment", + "description": [], + "signature": [ + "\"observability:apmDefaultServiceEnvironment\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.enableAgentExplorerView", + "type": "string", + "tags": [], + "label": "enableAgentExplorerView", + "description": [], + "signature": [ + "\"observability:apmAgentExplorerView\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.enableAwsLambdaMetrics", + "type": "string", + "tags": [], + "label": "enableAwsLambdaMetrics", + "description": [], + "signature": [ + "\"observability:enableAwsLambdaMetrics\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.enableComparisonByDefault", + "type": "string", + "tags": [], + "label": "enableComparisonByDefault", + "description": [], + "signature": [ + "\"observability:enableComparisonByDefault\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.enableCriticalPath", + "type": "string", + "tags": [], + "label": "enableCriticalPath", + "description": [], + "signature": [ + "\"observability:apmEnableCriticalPath\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.enableInfrastructureHostsView", + "type": "string", + "tags": [], + "label": "enableInfrastructureHostsView", + "description": [], + "signature": [ + "\"observability:enableInfrastructureHostsView\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.enableInspectEsQueries", + "type": "string", + "tags": [], + "label": "enableInspectEsQueries", + "description": [], + "signature": [ + "\"observability:enableInspectEsQueries\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.maxSuggestions", + "type": "string", + "tags": [], + "label": "maxSuggestions", + "description": [], + "signature": [ + "\"observability:maxSuggestions\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.NETWORK_TIMINGS_FIELDS", + "type": "Array", + "tags": [], + "label": "NETWORK_TIMINGS_FIELDS", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.observabilityAppId", + "type": "string", + "tags": [], + "label": "observabilityAppId", + "description": [], + "signature": [ + "\"observability-overview\"" + ], + "path": "x-pack/plugins/exploratory_view/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.profilingElasticsearchPlugin", + "type": "string", + "tags": [], + "label": "profilingElasticsearchPlugin", + "description": [], + "signature": [ + "\"observability:profilingElasticsearchPlugin\"" + ], + "path": "x-pack/plugins/exploratory_view/common/ui_settings_keys.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.ruleDetailsLocatorID", + "type": "string", + "tags": [], + "label": "ruleDetailsLocatorID", + "description": [], + "signature": [ + "\"RULE_DETAILS_LOCATOR\"" + ], + "path": "x-pack/plugins/exploratory_view/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.sloFeatureId", + "type": "string", + "tags": [], + "label": "sloFeatureId", + "description": [], + "signature": [ + "\"slo\"" + ], + "path": "x-pack/plugins/exploratory_view/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.SYNTHETICS_BLOCKED_TIMINGS", + "type": "string", + "tags": [], + "label": "SYNTHETICS_BLOCKED_TIMINGS", + "description": [], + "signature": [ + "\"synthetics.payload.timings.blocked\"" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.SYNTHETICS_CONNECT_TIMINGS", + "type": "string", + "tags": [], + "label": "SYNTHETICS_CONNECT_TIMINGS", + "description": [], + "signature": [ + "\"synthetics.payload.timings.connect\"" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.SYNTHETICS_DNS_TIMINGS", + "type": "string", + "tags": [], + "label": "SYNTHETICS_DNS_TIMINGS", + "description": [], + "signature": [ + "\"synthetics.payload.timings.dns\"" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.SYNTHETICS_RECEIVE_TIMINGS", + "type": "string", + "tags": [], + "label": "SYNTHETICS_RECEIVE_TIMINGS", + "description": [], + "signature": [ + "\"synthetics.payload.timings.receive\"" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.SYNTHETICS_SEND_TIMINGS", + "type": "string", + "tags": [], + "label": "SYNTHETICS_SEND_TIMINGS", + "description": [], + "signature": [ + "\"synthetics.payload.timings.send\"" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.SYNTHETICS_SSL_TIMINGS", + "type": "string", + "tags": [], + "label": "SYNTHETICS_SSL_TIMINGS", + "description": [], + "signature": [ + "\"synthetics.payload.timings.ssl\"" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.SYNTHETICS_STEP_DURATION", + "type": "string", + "tags": [], + "label": "SYNTHETICS_STEP_DURATION", + "description": [], + "signature": [ + "\"synthetics.step.duration.us\"" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.SYNTHETICS_TOTAL_TIMINGS", + "type": "string", + "tags": [], + "label": "SYNTHETICS_TOTAL_TIMINGS", + "description": [], + "signature": [ + "\"synthetics.payload.timings.total\"" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.SYNTHETICS_WAIT_TIMINGS", + "type": "string", + "tags": [], + "label": "SYNTHETICS_WAIT_TIMINGS", + "description": [], + "signature": [ + "\"synthetics.payload.timings.wait\"" + ], + "path": "x-pack/plugins/exploratory_view/common/field_names/synthetics.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.syntheticsEditMonitorLocatorID", + "type": "string", + "tags": [], + "label": "syntheticsEditMonitorLocatorID", + "description": [], + "signature": [ + "\"SYNTHETICS_EDIT_MONITOR_LOCATOR\"" + ], + "path": "x-pack/plugins/exploratory_view/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.syntheticsMonitorDetailLocatorID", + "type": "string", + "tags": [], + "label": "syntheticsMonitorDetailLocatorID", + "description": [], + "signature": [ + "\"SYNTHETICS_MONITOR_DETAIL_LOCATOR\"" + ], + "path": "x-pack/plugins/exploratory_view/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.TimeFormatter", + "type": "Type", + "tags": [], + "label": "TimeFormatter", + "description": [], + "signature": [ + "(value: ", + "Maybe", + ", options?: FormatterOptions | undefined) => ConvertedDuration" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "exploratoryView", + "id": "def-common.TimeFormatter.$1", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "number | null | undefined" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.TimeFormatter.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "FormatterOptions | undefined" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.TimeUnitChar", + "type": "Type", + "tags": [], + "label": "TimeUnitChar", + "description": [], + "signature": [ + "\"m\" | \"s\" | \"d\" | \"h\"" + ], + "path": "x-pack/plugins/exploratory_view/common/utils/formatters/duration.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "exploratoryView", + "id": "def-common.uptimeOverviewLocatorID", + "type": "string", + "tags": [], + "label": "uptimeOverviewLocatorID", + "description": [], + "signature": [ + "\"UPTIME_OVERVIEW_LOCATOR\"" + ], + "path": "x-pack/plugins/exploratory_view/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx new file mode 100644 index 0000000000000..ec91ca58d3b5f --- /dev/null +++ b/api_docs/exploratory_view.mdx @@ -0,0 +1,64 @@ +--- +#### +#### 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: kibExploratoryViewPluginApi +slug: /kibana-dev-docs/api/exploratoryView +title: "exploratoryView" +image: https://source.unsplash.com/400x175/?github +description: API docs for the exploratoryView plugin +date: 2023-03-30 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] +--- +import exploratoryViewObj from './exploratory_view.devdocs.json'; + + + +Contact [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 342 | 4 | 339 | 17 | + +## Client + +### Setup + + +### Start + + +### Functions + + +### Interfaces + + +### Enums + + +### Consts, variables and types + + +## Server + +### Setup + + +### Consts, variables and types + + +## Common + +### Functions + + +### Enums + + +### Consts, variables and types + + diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 339200a81cd88..ad18726d420e8 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: 2023-03-29 +date: 2023-03-30 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 c04ae8740d124..cef144e3dc113 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: 2023-03-29 +date: 2023-03-30 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 b87901191a218..b3c207a23571b 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: 2023-03-29 +date: 2023-03-30 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 3d2cddbca71a2..8d01ca743965c 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: 2023-03-29 +date: 2023-03-30 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 dba2f5b4127db..28269bd4c73c2 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: 2023-03-29 +date: 2023-03-30 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 1093ccff416aa..2a3127f7a1b5c 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: 2023-03-29 +date: 2023-03-30 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 5ff34ccfcf8ed..0a3ef9f5fa51d 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: 2023-03-29 +date: 2023-03-30 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 a67dca022391d..5b79a72bfc237 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: 2023-03-29 +date: 2023-03-30 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 bad5b4f141809..b845f0cef34f8 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: 2023-03-29 +date: 2023-03-30 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 69f840980018b..73b402491df81 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: 2023-03-29 +date: 2023-03-30 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 69bdf3e41f93f..0e267f2793bd7 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: 2023-03-29 +date: 2023-03-30 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 0d7daa55a807b..25ff572ae44f8 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: 2023-03-29 +date: 2023-03-30 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 fc5c6bc33c4c7..a0b3a8cb6854d 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.devdocs.json b/api_docs/expressions.devdocs.json index 9ac913a878dcb..87d08b9d06f8c 100644 --- a/api_docs/expressions.devdocs.json +++ b/api_docs/expressions.devdocs.json @@ -7499,7 +7499,7 @@ "\nTracks state of execution.\n\n- `not-started` - before .start() method was called.\n- `pending` - immediately after .start() method is called.\n- `result` - when expression execution completed.\n- `error` - when execution failed with error." ], "signature": [ - "\"error\" | \"pending\" | \"not-started\" | \"result\"" + "\"error\" | \"pending\" | \"result\" | \"not-started\"" ], "path": "src/plugins/expressions/common/execution/container.ts", "deprecated": false, @@ -18892,7 +18892,7 @@ "\nTracks state of execution.\n\n- `not-started` - before .start() method was called.\n- `pending` - immediately after .start() method is called.\n- `result` - when expression execution completed.\n- `error` - when execution failed with error." ], "signature": [ - "\"error\" | \"pending\" | \"not-started\" | \"result\"" + "\"error\" | \"pending\" | \"result\" | \"not-started\"" ], "path": "src/plugins/expressions/common/execution/container.ts", "deprecated": false, @@ -31189,7 +31189,7 @@ "\nTracks state of execution.\n\n- `not-started` - before .start() method was called.\n- `pending` - immediately after .start() method is called.\n- `result` - when expression execution completed.\n- `error` - when execution failed with error." ], "signature": [ - "\"error\" | \"pending\" | \"not-started\" | \"result\"" + "\"error\" | \"pending\" | \"result\" | \"not-started\"" ], "path": "src/plugins/expressions/common/execution/container.ts", "deprecated": false, diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 6b511cc83e04c..16ff57a04e6f5 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: 2023-03-29 +date: 2023-03-30 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 72caa58d943f2..5752bd170e438 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: 2023-03-29 +date: 2023-03-30 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 16003771307aa..a0c44cb5e0a5e 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: 2023-03-29 +date: 2023-03-30 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 c9ed06dacd7b9..e35d74283a0dc 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: 2023-03-29 +date: 2023-03-30 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 fc136a7423c38..3284dcfd9b8db 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: 2023-03-29 +date: 2023-03-30 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 64595e6645c67..7e2e6c41252b5 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index cd721b32b5a80..820d7a11557ba 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -21800,7 +21800,7 @@ "label": "[RegistryVarsEntryKeys.type]", "description": [], "signature": [ - "\"string\" | \"text\" | \"integer\" | \"select\" | \"textarea\" | \"bool\" | \"password\" | \"yaml\"" + "\"string\" | \"text\" | \"integer\" | \"select\" | \"textarea\" | \"password\" | \"bool\" | \"yaml\"" ], "path": "x-pack/plugins/fleet/common/types/models/epm.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index c4d6459924e24..d6e51d16a0acb 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: 2023-03-29 +date: 2023-03-30 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 52cde375bb197..375eaf448911f 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: 2023-03-29 +date: 2023-03-30 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 6bcdbc682902b..b2a2e8eaf34a7 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: 2023-03-29 +date: 2023-03-30 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 08b343c865d99..c19d40a338f95 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: 2023-03-29 +date: 2023-03-30 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 d8669daf9d254..fdcf3a0929adf 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: 2023-03-29 +date: 2023-03-30 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 21046f2650b0a..34d748ca7b074 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: 2023-03-29 +date: 2023-03-30 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 341a13ca6f357..1bc2726352d13 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: 2023-03-29 +date: 2023-03-30 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 8f6bb4f38eed1..9e1f037f08499 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 895f30c72cd02..929f3afa75b73 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: 2023-03-29 +date: 2023-03-30 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 39987e0c9097b..ccbb12070e6c4 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: 2023-03-29 +date: 2023-03-30 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 4fe5283260c5c..36d38f546d9f7 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index d73c10a276b23..8b610cf690fe8 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: 2023-03-29 +date: 2023-03-30 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 98ae8dbaf9a2b..a6edcd5c499e0 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index f7ef30cb88eda..71628b654be68 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.devdocs.json b/api_docs/kbn_alerts_as_data_utils.devdocs.json index 1dc2a279ca7e3..ea06121f4eb48 100644 --- a/api_docs/kbn_alerts_as_data_utils.devdocs.json +++ b/api_docs/kbn_alerts_as_data_utils.devdocs.json @@ -114,7 +114,7 @@ "label": "AlertFieldMap", "description": [], "signature": [ - "{ readonly \"kibana.alert.action_group\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.case_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.duration.us\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.end\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping_history\": { readonly type: \"boolean\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.instance.id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.last_detected\": { readonly type: \"date\"; readonly required: false; readonly array: false; }; readonly \"kibana.alert.reason\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.category\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.consumer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.execution.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.name\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.parameters\": { readonly array: false; readonly type: \"flattened\"; readonly ignore_above: 4096; readonly required: false; }; readonly \"kibana.alert.rule.producer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.rule.rule_type_id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.start\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.status\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.time_range\": { readonly type: \"date_range\"; readonly format: \"epoch_millis||strict_date_optional_time\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.workflow_status\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.space_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: true; }; readonly \"@timestamp\": { readonly type: \"date\"; readonly required: true; readonly array: false; }; readonly \"kibana.version\": { readonly type: \"version\"; readonly array: false; readonly required: false; }; }" + "{ readonly \"kibana.alert.action_group\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.case_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.duration.us\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.end\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping_history\": { readonly type: \"boolean\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.instance.id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.last_detected\": { readonly type: \"date\"; readonly required: false; readonly array: false; }; readonly \"kibana.alert.reason\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.category\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.consumer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.execution.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.name\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.parameters\": { readonly array: false; readonly type: \"flattened\"; readonly ignore_above: 4096; readonly required: false; }; readonly \"kibana.alert.rule.producer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.revision\": { readonly type: \"long\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.rule.rule_type_id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.start\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.status\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.time_range\": { readonly type: \"date_range\"; readonly format: \"epoch_millis||strict_date_optional_time\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.workflow_status\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.space_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: true; }; readonly \"@timestamp\": { readonly type: \"date\"; readonly required: true; readonly array: false; }; readonly \"kibana.version\": { readonly type: \"version\"; readonly array: false; readonly required: false; }; }" ], "path": "packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts", "deprecated": false, @@ -182,7 +182,7 @@ "label": "alertFieldMap", "description": [], "signature": [ - "{ readonly \"kibana.alert.action_group\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.case_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.duration.us\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.end\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping_history\": { readonly type: \"boolean\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.instance.id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.last_detected\": { readonly type: \"date\"; readonly required: false; readonly array: false; }; readonly \"kibana.alert.reason\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.category\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.consumer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.execution.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.name\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.parameters\": { readonly array: false; readonly type: \"flattened\"; readonly ignore_above: 4096; readonly required: false; }; readonly \"kibana.alert.rule.producer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.rule.rule_type_id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.start\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.status\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.time_range\": { readonly type: \"date_range\"; readonly format: \"epoch_millis||strict_date_optional_time\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.workflow_status\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.space_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: true; }; readonly \"@timestamp\": { readonly type: \"date\"; readonly required: true; readonly array: false; }; readonly \"kibana.version\": { readonly type: \"version\"; readonly array: false; readonly required: false; }; }" + "{ readonly \"kibana.alert.action_group\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.case_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.duration.us\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.end\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping_history\": { readonly type: \"boolean\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.instance.id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.last_detected\": { readonly type: \"date\"; readonly required: false; readonly array: false; }; readonly \"kibana.alert.reason\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.category\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.consumer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.execution.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.name\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.parameters\": { readonly array: false; readonly type: \"flattened\"; readonly ignore_above: 4096; readonly required: false; }; readonly \"kibana.alert.rule.producer\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.revision\": { readonly type: \"long\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.rule.rule_type_id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.rule.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.start\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.status\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.time_range\": { readonly type: \"date_range\"; readonly format: \"epoch_millis||strict_date_optional_time\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.uuid\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.workflow_status\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.space_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: true; }; readonly \"@timestamp\": { readonly type: \"date\"; readonly required: true; readonly array: false; }; readonly \"kibana.version\": { readonly type: \"version\"; readonly array: false; readonly required: false; }; }" ], "path": "packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts", "deprecated": false, diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index dc819b02027d6..50c3f819969b4 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: 2023-03-29 +date: 2023-03-30 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.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 72871efe00175..1969ee4337252 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 2e5fb4a09ebda..a5b77e7e04207 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: 2023-03-29 +date: 2023-03-30 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 5cff3a887f672..0633e04faa390 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.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 c22335ac4218e..97071c69859ab 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: 2023-03-29 +date: 2023-03-30 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 ad0374b51fe2e..12e5a26ee1f27 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: 2023-03-29 +date: 2023-03-30 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 a2254fe782a17..2204cc377f6cd 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: 2023-03-29 +date: 2023-03-30 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 7ee872e846005..795db20bb19c0 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index ce2da17ed04b6..567bfbe9a7088 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index a396030402323..295d394c1942b 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: 2023-03-29 +date: 2023-03-30 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 cce73fb5dd952..410864a3eb213 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: 2023-03-29 +date: 2023-03-30 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 dcb3d9de3a564..3b06679aec0ae 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: 2023-03-29 +date: 2023-03-30 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 8075d0d7d5fdf..6c4703fe6042b 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: 2023-03-29 +date: 2023-03-30 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 637cc81a397d5..17a293154763c 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index b5dc96e48b303..bd0d57f4b2831 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: 2023-03-29 +date: 2023-03-30 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 c67b45d7c91cd..2d4b5b4d79d44 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: 2023-03-29 +date: 2023-03-30 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 97dfbe8e4de13..9aefd129e1500 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: 2023-03-29 +date: 2023-03-30 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 cfa94603cd514..661227023c0b5 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: 2023-03-29 +date: 2023-03-30 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 8122026105579..ff25016d1476f 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: 2023-03-29 +date: 2023-03-30 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 640aafe98a0e3..7e3d8e68bcffe 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: 2023-03-29 +date: 2023-03-30 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 88e84b408b85c..298919324c7d3 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: 2023-03-29 +date: 2023-03-30 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 9cea9d06c0b5b..a731f048c497b 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: 2023-03-29 +date: 2023-03-30 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 180de35a50d2b..8226d0dd508c6 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 04c8dd2c4f794..736637a6579d2 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 238cf80146e24..ce09ab9a058cc 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: 2023-03-29 +date: 2023-03-30 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 c1f327deecf76..eeac4ed2d6562 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: 2023-03-29 +date: 2023-03-30 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 b494e638b5cee..1cf17842a3dc5 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: 2023-03-29 +date: 2023-03-30 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 46054396645c0..ba1f7f0987cf7 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: 2023-03-29 +date: 2023-03-30 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 c8c80115da5e3..8e5b206ddd348 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: 2023-03-29 +date: 2023-03-30 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_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index 08edd6a6c9483..eaf86d3995d51 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index fb04a7a7cee00..62a3c8e7e7de5 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: 2023-03-29 +date: 2023-03-30 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 353208e6faf18..000a1cd2e8d6e 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: 2023-03-29 +date: 2023-03-30 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 7ff20967dd329..bbb9856315e5f 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: 2023-03-29 +date: 2023-03-30 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 6cc2cb0895405..a6c5b63ccb6f1 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: 2023-03-29 +date: 2023-03-30 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 6873e8f7a24d4..bc24886d432cd 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: 2023-03-29 +date: 2023-03-30 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 258549930a648..d300ddac23cd8 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: 2023-03-29 +date: 2023-03-30 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 48ad1a08be750..93cb480f4f1ac 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: 2023-03-29 +date: 2023-03-30 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 e64f50278c78d..311045b7977a1 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: 2023-03-29 +date: 2023-03-30 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 6fe888d852995..aea783196a74a 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: 2023-03-29 +date: 2023-03-30 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 216ef4c315ef6..8c1575a8074a0 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: 2023-03-29 +date: 2023-03-30 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 a83edb295f5da..ec39830568d27 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: 2023-03-29 +date: 2023-03-30 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 54b610099f29b..6ad1a169c734f 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: 2023-03-29 +date: 2023-03-30 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 7cd789f3db1e7..831ef55bdf6a2 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: 2023-03-29 +date: 2023-03-30 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 2d2b1a30f09a9..ddee3dcd19b46 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: 2023-03-29 +date: 2023-03-30 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 86bbcc9807d78..322c456e8cf1a 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: 2023-03-29 +date: 2023-03-30 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 3a360c2080327..1f783c93c1b4d 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: 2023-03-29 +date: 2023-03-30 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 c767d6c489d21..0cb1eb4906dda 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: 2023-03-29 +date: 2023-03-30 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 e9b8e0d1976d6..3a40a58430165 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: 2023-03-29 +date: 2023-03-30 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 867c013c3d50d..c16c5f4cc96c6 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: 2023-03-29 +date: 2023-03-30 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 b61c5ab23d84e..641e6cff13ccd 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: 2023-03-29 +date: 2023-03-30 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 974b57065a327..3775c8c8e7fa6 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: 2023-03-29 +date: 2023-03-30 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 0127b0c659da7..6ccd6096a7398 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: 2023-03-29 +date: 2023-03-30 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 f3bd7577315d7..5d4e49b857b40 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: 2023-03-29 +date: 2023-03-30 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 cccaee28dd489..7dcdd160d4dc7 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: 2023-03-29 +date: 2023-03-30 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 0009cbd715cac..dd3414d635641 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: 2023-03-29 +date: 2023-03-30 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 d74ca5f9ae700..e1c135e83fc7a 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: 2023-03-29 +date: 2023-03-30 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 d62b481fb310c..6b0c5754a50f3 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: 2023-03-29 +date: 2023-03-30 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 d44f087b53aac..a57595f20ce1c 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: 2023-03-29 +date: 2023-03-30 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 ad455c580650d..f43a374aadd85 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: 2023-03-29 +date: 2023-03-30 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 cd3c76874546f..2672c6ef16665 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: 2023-03-29 +date: 2023-03-30 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 393facc4773f4..b57b9f153c8a9 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: 2023-03-29 +date: 2023-03-30 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 df27dcf8f99b2..96b8f3cf947d1 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: 2023-03-29 +date: 2023-03-30 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 5afb0fedda2ca..ad156c274ff26 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: 2023-03-29 +date: 2023-03-30 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 fe61f4f62b600..a8c8ced343a16 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: 2023-03-29 +date: 2023-03-30 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 a54aac7ebed0f..1b87dbb0b553b 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: 2023-03-29 +date: 2023-03-30 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 98c70048efb32..8f4b3a6f6d9e2 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: 2023-03-29 +date: 2023-03-30 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 b950aa599515b..37b98ea67acfa 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: 2023-03-29 +date: 2023-03-30 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 da492c1a2508c..dd8aea21d9251 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: 2023-03-29 +date: 2023-03-30 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 532b16f0a9d3e..3d5fcc4e98abb 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: 2023-03-29 +date: 2023-03-30 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 92f36ec455b84..1d84ef9ba1fbf 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: 2023-03-29 +date: 2023-03-30 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 a60c0fda89583..8db784a8684bd 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: 2023-03-29 +date: 2023-03-30 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 a91d584321515..49fe0f249f0d4 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: 2023-03-29 +date: 2023-03-30 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 e9954e9ea6e40..229e0a5b362de 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: 2023-03-29 +date: 2023-03-30 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 cde6c464c56fd..4e6f76d41e4e0 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: 2023-03-29 +date: 2023-03-30 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 399fe986910c5..d59f6591c36c2 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: 2023-03-29 +date: 2023-03-30 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 0f132fd5d526a..144868b222134 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: 2023-03-29 +date: 2023-03-30 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 b55ae9277c8b6..0cdf6aef49e86 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: 2023-03-29 +date: 2023-03-30 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 53a4b046df91f..2759924d91f65 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: 2023-03-29 +date: 2023-03-30 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 a1d243ec5aa94..786a862d7e015 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: 2023-03-29 +date: 2023-03-30 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 eb873ca49ea74..d90ce939490bf 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: 2023-03-29 +date: 2023-03-30 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 a3156b34790d7..07468802125cf 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: 2023-03-29 +date: 2023-03-30 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 4cc090e806480..959c0d842400a 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: 2023-03-29 +date: 2023-03-30 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 445c82c80793a..9ca48a29cc0f9 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: 2023-03-29 +date: 2023-03-30 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 06faaa685509d..a1b45b89a1f4a 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: 2023-03-29 +date: 2023-03-30 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 69b56855ea5ae..c4c6c878c7252 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: 2023-03-29 +date: 2023-03-30 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 c8abf427dac0e..1a4851d4d2064 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: 2023-03-29 +date: 2023-03-30 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 6d446145fa512..ad6e24c4ad1e5 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: 2023-03-29 +date: 2023-03-30 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 73f4a6d8f9c80..0419414e3dade 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: 2023-03-29 +date: 2023-03-30 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 9cdd44c933e0d..312eb0edbd4d1 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: 2023-03-29 +date: 2023-03-30 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 54437b870b449..c54e85b12f8a6 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: 2023-03-29 +date: 2023-03-30 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 5e7f867f4ce86..eddab63ca27d9 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: 2023-03-29 +date: 2023-03-30 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 74b4903ad99b4..fc27d58e28d67 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: 2023-03-29 +date: 2023-03-30 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 fdb974539b5ca..cfbd11578dac6 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: 2023-03-29 +date: 2023-03-30 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 7bdb5565f101f..789fa907fc8f9 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: 2023-03-29 +date: 2023-03-30 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 ee28a2a2adcad..bdf78aaaf49e4 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: 2023-03-29 +date: 2023-03-30 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 62d6c17c5d18f..f45dc48b1fbd1 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: 2023-03-29 +date: 2023-03-30 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 be049b644a9d7..2c244b7adf479 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: 2023-03-29 +date: 2023-03-30 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 fcc96c139b018..b18ec59b41807 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: 2023-03-29 +date: 2023-03-30 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 669eea7b306c5..a1198cbec719e 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: 2023-03-29 +date: 2023-03-30 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.mdx b/api_docs/kbn_core_http_server.mdx index 194086be1f02b..2089443fd5be3 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: 2023-03-29 +date: 2023-03-30 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 fa2f01f2ab1c2..52741adc84fd0 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: 2023-03-29 +date: 2023-03-30 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 ba0812fb9a08a..de3f375124136 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: 2023-03-29 +date: 2023-03-30 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_http_versioned_router_server_internal.mdx b/api_docs/kbn_core_http_versioned_router_server_internal.mdx index 925666d0e1908..2f1ad673c447c 100644 --- a/api_docs/kbn_core_http_versioned_router_server_internal.mdx +++ b/api_docs/kbn_core_http_versioned_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-versioned-router-server-internal title: "@kbn/core-http-versioned-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-versioned-router-server-internal plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-versioned-router-server-internal'] --- import kbnCoreHttpVersionedRouterServerInternalObj from './kbn_core_http_versioned_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index edb25404671f8..9f9d89ffbd2e5 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: 2023-03-29 +date: 2023-03-30 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 1f6b759a502ed..341a9c47497b5 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: 2023-03-29 +date: 2023-03-30 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 2a380a4caddc8..8ab7c7ed8e636 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: 2023-03-29 +date: 2023-03-30 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 5e11481a64d3d..aad2becbfa1b7 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: 2023-03-29 +date: 2023-03-30 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 14c77583ecc58..84e568a265c57 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: 2023-03-29 +date: 2023-03-30 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 a85d9dde48407..475d2717f89b2 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: 2023-03-29 +date: 2023-03-30 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 c046190d075e6..2390b626869d0 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: 2023-03-29 +date: 2023-03-30 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 baa3da5ae2b99..fca3965b429ba 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: 2023-03-29 +date: 2023-03-30 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 48acd59cd2d3e..80eb866a58243 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: 2023-03-29 +date: 2023-03-30 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 41e4a0a4f2688..2b22a93d349f9 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: 2023-03-29 +date: 2023-03-30 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 0bd672f411c38..9255c9593e71c 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: 2023-03-29 +date: 2023-03-30 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 18ab4d6d0b0fd..8e4d133dbd4fe 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: 2023-03-29 +date: 2023-03-30 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 e2c61138ac348..07ee16ddac412 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: 2023-03-29 +date: 2023-03-30 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 b46b139f16692..6b0cc14a651a4 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: 2023-03-29 +date: 2023-03-30 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 8b3ee901d5c15..8dbe9192946db 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: 2023-03-29 +date: 2023-03-30 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 01dbec09b53ea..67fa59275b989 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: 2023-03-29 +date: 2023-03-30 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 4b3ef4b7adfa2..2d47be1c6a999 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: 2023-03-29 +date: 2023-03-30 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 4cd6f4d2c907b..759326cbe73ee 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: 2023-03-29 +date: 2023-03-30 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 e4a7cbad4a799..6dd92f543380e 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: 2023-03-29 +date: 2023-03-30 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.devdocs.json b/api_docs/kbn_core_metrics_server.devdocs.json index c1b49b0117dea..e2146a6534f6b 100644 --- a/api_docs/kbn_core_metrics_server.devdocs.json +++ b/api_docs/kbn_core_metrics_server.devdocs.json @@ -786,6 +786,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/core-metrics-server", + "id": "def-common.OpsProcessMetrics.event_loop_utilization", + "type": "Object", + "tags": [], + "label": "event_loop_utilization", + "description": [ + "node event loop utilization since last collection" + ], + "signature": [ + "EventLoopUtilization" + ], + "path": "packages/core/metrics/core-metrics-server/src/metrics.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/core-metrics-server", "id": "def-common.OpsProcessMetrics.uptime_in_millis", diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 006c8d8448ff2..21a2dd8d01863 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 54 | 0 | 8 | 0 | +| 55 | 0 | 8 | 0 | ## Common diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index 8ef4da3565205..05f2ea8d57056 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: 2023-03-29 +date: 2023-03-30 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 7821ca3bcb041..be10de1a3ac38 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: 2023-03-29 +date: 2023-03-30 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 f19e8f5744c66..a6319fce79190 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: 2023-03-29 +date: 2023-03-30 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 e7ef423a38977..dcf401b47a1d6 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: 2023-03-29 +date: 2023-03-30 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 4d9d5a4a6c0dd..d6691c8460aa0 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: 2023-03-29 +date: 2023-03-30 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 28bf08f8a9c24..ab52fcc417f53 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: 2023-03-29 +date: 2023-03-30 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 320c0e40bea26..570318615b052 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: 2023-03-29 +date: 2023-03-30 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 f12e6381b5ccf..3542f66d187be 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: 2023-03-29 +date: 2023-03-30 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 9e36a4930a96e..e8d53337baf56 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: 2023-03-29 +date: 2023-03-30 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 fd364e5e48f20..11297f524807c 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: 2023-03-29 +date: 2023-03-30 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 9bb2b70b26a22..bab717f318171 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: 2023-03-29 +date: 2023-03-30 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 f4ba9db9f3c91..85b94fb5a3a05 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: 2023-03-29 +date: 2023-03-30 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 1339a3b8a0c4d..94de8e171ac65 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: 2023-03-29 +date: 2023-03-30 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 2b74405b2d70d..1051fac562511 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: 2023-03-29 +date: 2023-03-30 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_server.mdx b/api_docs/kbn_core_plugins_server.mdx index cb98a3d9926e4..087a2868c1592 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: 2023-03-29 +date: 2023-03-30 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 f1a16d434be5c..21ee4ffad284d 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: 2023-03-29 +date: 2023-03-30 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 0683c5013217f..8101fdcb7f77f 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: 2023-03-29 +date: 2023-03-30 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 d398861c70484..8b0148fb837e6 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: 2023-03-29 +date: 2023-03-30 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 83377084bac0c..6a30cb7dcc06a 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: 2023-03-29 +date: 2023-03-30 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 f1fc2a0b12a41..485324fb4e2e0 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: 2023-03-29 +date: 2023-03-30 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 9498ce5b14f27..ceff4bc290448 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: 2023-03-29 +date: 2023-03-30 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 f93e3986770ff..b421d10e5b556 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: 2023-03-29 +date: 2023-03-30 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 f6711cbbbb907..0fbb505dbe876 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: 2023-03-29 +date: 2023-03-30 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 c95827ee0c475..b53fbf832632e 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: 2023-03-29 +date: 2023-03-30 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_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index 1cf72c1627e75..55389340ba46e 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 e030955650cc8..d7af756ccda1a 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: 2023-03-29 +date: 2023-03-30 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 1cdf77864dd22..ab470ff3766fb 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: 2023-03-29 +date: 2023-03-30 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 fa4ef370acd60..0da3abd001774 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: 2023-03-29 +date: 2023-03-30 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.devdocs.json b/api_docs/kbn_core_saved_objects_browser.devdocs.json index 9f6a7cc47c66c..b7d377b2da608 100644 --- a/api_docs/kbn_core_saved_objects_browser.devdocs.json +++ b/api_docs/kbn_core_saved_objects_browser.devdocs.json @@ -97,6 +97,14 @@ "plugin": "observability", "path": "x-pack/plugins/observability/public/application/types.ts" }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/application/types.ts" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/application/types.ts" + }, { "plugin": "canvas", "path": "x-pack/plugins/canvas/public/services/platform.ts" diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 16057ea949de7..7d6c2df9e4a57 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: 2023-03-29 +date: 2023-03-30 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 5440d45c53e44..842814b3b74d0 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: 2023-03-29 +date: 2023-03-30 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 a6855327279ea..b489cfb2afc1a 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.devdocs.json b/api_docs/kbn_core_saved_objects_common.devdocs.json index b7a84d7ac7d3e..d07a7c9e99278 100644 --- a/api_docs/kbn_core_saved_objects_common.devdocs.json +++ b/api_docs/kbn_core_saved_objects_common.devdocs.json @@ -3332,7 +3332,7 @@ "\nThe namespace type dictates how a saved object can be interacted in relation to namespaces. Each type is mutually exclusive:\n * single (default): This type of saved object is namespace-isolated, e.g., it exists in only one namespace.\n * multiple: This type of saved object is shareable, e.g., it can exist in one or more namespaces.\n * multiple-isolated: This type of saved object is namespace-isolated, e.g., it exists in only one namespace, but object IDs must be\n unique across all namespaces. This is intended to be an intermediate step when objects with a \"single\" namespace type are being\n converted to a \"multiple\" namespace type. In other words, objects with a \"multiple-isolated\" namespace type will be *share-capable*,\n but will not actually be shareable until the namespace type is changed to \"multiple\".\n * agnostic: This type of saved object is global.\n" ], "signature": [ - "\"single\" | \"multiple\" | \"agnostic\" | \"multiple-isolated\"" + "\"multiple\" | \"single\" | \"agnostic\" | \"multiple-isolated\"" ], "path": "packages/core/saved-objects/core-saved-objects-common/src/saved_objects.ts", "deprecated": false, diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 54a7d693579f7..67cbc80b6e083 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: 2023-03-29 +date: 2023-03-30 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 65873b0292607..af9ddb1c6e2d3 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: 2023-03-29 +date: 2023-03-30 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 4376eced1d561..2a7223cbecdfe 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: 2023-03-29 +date: 2023-03-30 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 443e92a7620b7..a59d87534808e 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: 2023-03-29 +date: 2023-03-30 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 b2a944d8baf31..ef02fbf5aa74d 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.devdocs.json b/api_docs/kbn_core_saved_objects_server.devdocs.json index d3c8316c81852..5fe5749e4bd65 100644 --- a/api_docs/kbn_core_saved_objects_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server.devdocs.json @@ -9488,7 +9488,7 @@ "\nThe {@link SavedObjectsNamespaceType | namespace type} for the type." ], "signature": [ - "\"single\" | \"multiple\" | \"agnostic\" | \"multiple-isolated\"" + "\"multiple\" | \"single\" | \"agnostic\" | \"multiple-isolated\"" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_type.ts", "deprecated": false, diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index fbb8d4fd1e1a0..6850d2e986321 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: 2023-03-29 +date: 2023-03-30 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 a0befcef1b57b..b964772d16c22 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: 2023-03-29 +date: 2023-03-30 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 6d04f79d0d8ea..2e907fb429d7b 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: 2023-03-29 +date: 2023-03-30 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 979c3e342e58d..f6031eb3ce774 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: 2023-03-29 +date: 2023-03-30 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 0b5e2ae9898d0..65a5381d598a9 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: 2023-03-29 +date: 2023-03-30 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 f50bd5c0c0c10..35f8defd54c5e 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: 2023-03-29 +date: 2023-03-30 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 a7d3363340736..dc77063dde864 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: 2023-03-29 +date: 2023-03-30 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 2ea9756dc4c5d..0b295788ddb93 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: 2023-03-29 +date: 2023-03-30 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 68d056588ecf3..261c9d8160a91 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: 2023-03-29 +date: 2023-03-30 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 3a390f516c0bd..2d470f38b6533 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: 2023-03-29 +date: 2023-03-30 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 bc3a7005e8e07..a3d4ce82b1822 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: 2023-03-29 +date: 2023-03-30 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 4cc4e3aeaabc2..90bc5ba274d03 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: 2023-03-29 +date: 2023-03-30 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_so_type_serializer.devdocs.json b/api_docs/kbn_core_test_helpers_so_type_serializer.devdocs.json index df070b1f4b526..07859c0d5731c 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.devdocs.json +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.devdocs.json @@ -156,7 +156,7 @@ "label": "namespaceType", "description": [], "signature": [ - "\"single\" | \"multiple\" | \"agnostic\" | \"multiple-isolated\"" + "\"multiple\" | \"single\" | \"agnostic\" | \"multiple-isolated\"" ], "path": "packages/core/test-helpers/core-test-helpers-so-type-serializer/src/extract_migration_info.ts", "deprecated": false, 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 0615fdb006fe9..6437a01bd383f 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: 2023-03-29 +date: 2023-03-30 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 7543658b76c90..3fd453d86ee5c 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: 2023-03-29 +date: 2023-03-30 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 4915cd9703d69..59f84cee586a2 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: 2023-03-29 +date: 2023-03-30 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_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 7a77fee3cc5fe..bf36419c0bc43 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 17d40fb9f7473..d435854d35bc9 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: 2023-03-29 +date: 2023-03-30 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 c689d361525bb..97b4e55bfef57 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: 2023-03-29 +date: 2023-03-30 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 3836ee74ae6cd..e5f9ecf468822 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: 2023-03-29 +date: 2023-03-30 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 0a039771fa43b..759d47e774789 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: 2023-03-29 +date: 2023-03-30 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 bbb2ccf2c145a..56752d4105e43 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: 2023-03-29 +date: 2023-03-30 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 16952ef0d9051..2659c9fbff3af 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: 2023-03-29 +date: 2023-03-30 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 a3bef3e8f928c..e4e194475ffac 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: 2023-03-29 +date: 2023-03-30 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 024040cb5e7dd..8025016e3a1b5 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: 2023-03-29 +date: 2023-03-30 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 9792f2a09608b..ba275dadd8fd0 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: 2023-03-29 +date: 2023-03-30 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 7a377758e2087..c21db302d02ac 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: 2023-03-29 +date: 2023-03-30 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 2667305e46be2..f573b9c396a48 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: 2023-03-29 +date: 2023-03-30 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_crypto.mdx b/api_docs/kbn_crypto.mdx index e6ee9d6776783..e1dc5092ff43b 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: 2023-03-29 +date: 2023-03-30 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 2c0b1ab972bfb..6cd442cbf18ab 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 0411140b62b8a..17b398cb32383 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index cadb00a400adf..23f9b4d6e18cc 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index c354581e6d9f6..8ef1af8b99b3d 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: 2023-03-29 +date: 2023-03-30 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 fc782cce20ef6..b7bb7a19e9e7a 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: 2023-03-29 +date: 2023-03-30 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 23cdc66f8aaa8..d17c06a7c51bc 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: 2023-03-29 +date: 2023-03-30 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 28a120b5a584b..db762612d669f 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 8f081663e7c05..4a57c8935bae2 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: 2023-03-29 +date: 2023-03-30 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 22f1ebc71121f..de76f7a4a685f 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: 2023-03-29 +date: 2023-03-30 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 767495590f234..df2ea830519be 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: 2023-03-29 +date: 2023-03-30 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 d1914f9f2072c..63faf485113b8 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: 2023-03-29 +date: 2023-03-30 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 a6c879e269a80..82be5d2bf6715 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: 2023-03-29 +date: 2023-03-30 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 c6cfa4bb4ea65..47027392d2c97 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: 2023-03-29 +date: 2023-03-30 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_es.mdx b/api_docs/kbn_es.mdx index a335b30b93211..12efdfbea0b2f 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: 2023-03-29 +date: 2023-03-30 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 31e7aa7e4ba65..62d6aa599fd7d 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: 2023-03-29 +date: 2023-03-30 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 961dfe4cc6c43..ee6fc8d3fafa5 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: 2023-03-29 +date: 2023-03-30 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 019fc367d8ba0..566dce29e0043 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: 2023-03-29 +date: 2023-03-30 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 5a9c6671a5512..315dfe37b5b67 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: 2023-03-29 +date: 2023-03-30 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 7cb9d718bff74..2c0d0ee05ab44 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index f01069eb06ff3..bb1b676e3b684 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: 2023-03-29 +date: 2023-03-30 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 0e8e26f52b934..8d5903718324d 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 1dad2f910ee5d..653492cefd134 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: 2023-03-29 +date: 2023-03-30 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 d893510699058..121470d980d1e 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: 2023-03-29 +date: 2023-03-30 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_generate.mdx b/api_docs/kbn_generate.mdx index d1fe21985dd9d..3d1c014466076 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 2d3c1e2c7d984..dd6efff07da6c 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: 2023-03-29 +date: 2023-03-30 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 7fc6dc2efe2d0..1aab1ed65b069 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: 2023-03-29 +date: 2023-03-30 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 b6c9b450ac6a6..84dac50164a22 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: 2023-03-29 +date: 2023-03-30 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 b260a639f811c..89058c44c57f4 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: 2023-03-29 +date: 2023-03-30 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 c7f18cba2b341..3e6a5ef7ecc06 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: 2023-03-29 +date: 2023-03-30 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 47e53a1244d6f..10ee7b8c2cb26 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: 2023-03-29 +date: 2023-03-30 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 003ca5bf7c33c..b441eb016bad9 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: 2023-03-29 +date: 2023-03-30 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 f1d174fb75d13..14350fc599b06 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: 2023-03-29 +date: 2023-03-30 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 329e087cab6c0..b7dae87bee2b3 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 422c50043d19b..f5e8b8c9468a4 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: 2023-03-29 +date: 2023-03-30 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 89712ade90a91..3c9bef2c2f783 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: 2023-03-29 +date: 2023-03-30 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 530bc21a0b16c..8d72d230e551e 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: 2023-03-29 +date: 2023-03-30 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 8bda435f42214..460cadfdb41ed 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: 2023-03-29 +date: 2023-03-30 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 537a3ada8adf5..6ce462b036190 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: 2023-03-29 +date: 2023-03-30 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 8a89946935493..234c6234b00e3 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: 2023-03-29 +date: 2023-03-30 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 437703a3741ef..bae745b8217c9 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 288bae8f59db0..358c29797d0e7 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: 2023-03-29 +date: 2023-03-30 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 585284b308ee7..d96be0738d5ac 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 090639cd04a1c..cbbff818bdf86 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.devdocs.json b/api_docs/kbn_mapbox_gl.devdocs.json index 1ea33a1ad2373..079f9c68f7a61 100644 --- a/api_docs/kbn_mapbox_gl.devdocs.json +++ b/api_docs/kbn_mapbox_gl.devdocs.json @@ -8632,7 +8632,7 @@ "label": "MapEvent", "description": [], "signature": [ - "\"error\" | \"remove\" | \"data\" | \"move\" | \"render\" | \"rotate\" | \"resize\" | \"zoom\" | \"idle\" | \"mousedown\" | \"mouseup\" | \"mouseover\" | \"mousemove\" | \"click\" | \"dblclick\" | \"mouseenter\" | \"mouseleave\" | \"mouseout\" | \"contextmenu\" | \"wheel\" | \"touchstart\" | \"touchend\" | \"touchmove\" | \"touchcancel\" | \"movestart\" | \"moveend\" | \"dragstart\" | \"drag\" | \"dragend\" | \"zoomstart\" | \"zoomend\" | \"rotatestart\" | \"rotateend\" | \"pitchstart\" | \"pitch\" | \"pitchend\" | \"boxzoomstart\" | \"boxzoomend\" | \"boxzoomcancel\" | \"webglcontextlost\" | \"webglcontextrestored\" | \"load\" | \"styledata\" | \"sourcedata\" | \"dataloading\" | \"styledataloading\" | \"sourcedataloading\" | \"styleimagemissing\" | \"style.load\" | \"dataabort\" | \"sourcedataabort\"" + "\"error\" | \"remove\" | \"data\" | \"move\" | \"rotate\" | \"render\" | \"resize\" | \"zoom\" | \"idle\" | \"mousedown\" | \"mouseup\" | \"mouseover\" | \"mousemove\" | \"click\" | \"dblclick\" | \"mouseenter\" | \"mouseleave\" | \"mouseout\" | \"contextmenu\" | \"wheel\" | \"touchstart\" | \"touchend\" | \"touchmove\" | \"touchcancel\" | \"movestart\" | \"moveend\" | \"dragstart\" | \"drag\" | \"dragend\" | \"zoomstart\" | \"zoomend\" | \"rotatestart\" | \"rotateend\" | \"pitchstart\" | \"pitch\" | \"pitchend\" | \"boxzoomstart\" | \"boxzoomend\" | \"boxzoomcancel\" | \"webglcontextlost\" | \"webglcontextrestored\" | \"load\" | \"styledata\" | \"sourcedata\" | \"dataloading\" | \"styledataloading\" | \"sourcedataloading\" | \"styleimagemissing\" | \"style.load\" | \"dataabort\" | \"sourcedataabort\"" ], "path": "node_modules/maplibre-gl/dist/maplibre-gl.d.ts", "deprecated": false, diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index d794cdbdda252..c2f3211f2e052 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index f31ce38a1d924..9f525e24c17b5 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: 2023-03-29 +date: 2023-03-30 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_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 04ab162bca1f8..335bf2f246a9c 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: 2023-03-29 +date: 2023-03-30 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_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 84561863a64e3..d29e2e59ac9d4 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: 2023-03-29 +date: 2023-03-30 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 d25d8a1eb49e1..b2bb892db8359 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: 2023-03-29 +date: 2023-03-30 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_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 13702266fcc7a..e88fc6cee1991 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: 2023-03-29 +date: 2023-03-30 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 935b670157ca3..c3e8081fb825a 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: 2023-03-29 +date: 2023-03-30 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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index ba95f2b39419e..a8240b6f1696b 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: 2023-03-29 +date: 2023-03-30 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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 82df6caf45fa8..a4401bdebb12a 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: 2023-03-29 +date: 2023-03-30 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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 44b31f404fc8f..984e33514bff0 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index f1de9e3591560..7782ca12a7298 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: 2023-03-29 +date: 2023-03-30 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 469f101ca8b02..2f88eb5fc42e1 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index e2dc8fb72ee2c..f997251d31bde 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: 2023-03-29 +date: 2023-03-30 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 3da75c061d35b..36f9beba5af0d 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: 2023-03-29 +date: 2023-03-30 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 ae091b4ff4c24..3a019424752be 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: 2023-03-29 +date: 2023-03-30 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_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 8b071fcab3449..7be1efd68f446 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: 2023-03-29 +date: 2023-03-30 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_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 245616a99a311..52bb5bb49caba 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: 2023-03-29 +date: 2023-03-30 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 06c8cdcc53bb3..aaba1414736db 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 11131c2a6369b..1a39ebb113def 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 1ad26425abd07..bcac7eb3a4741 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: 2023-03-29 +date: 2023-03-30 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 6a13967d14e4b..e3602261c68b6 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: 2023-03-29 +date: 2023-03-30 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 ca5cb5e7a7c4e..6dae966aa8c9d 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: 2023-03-29 +date: 2023-03-30 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 290136468e228..5ef4f6c88723f 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 5e11fe3101b3f..a263bf696cb57 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.devdocs.json b/api_docs/kbn_rule_data_utils.devdocs.json index 0b4f41adabbdc..a19fc613d8dad 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -673,6 +673,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.ALERT_RULE_REVISION", + "type": "string", + "tags": [], + "label": "ALERT_RULE_REVISION", + "description": [], + "signature": [ + "\"kibana.alert.rule.revision\"" + ], + "path": "packages/kbn-rule-data-utils/src/default_alerts_as_data.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.ALERT_RULE_RULE_ID", @@ -1311,7 +1326,7 @@ "label": "DefaultAlertFieldName", "description": [], "signature": [ - "\"@timestamp\" | \"kibana\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert\" | \"kibana.alert.action_group\" | \"kibana.alert.case_ids\" | \"kibana.alert.duration.us\" | \"kibana.alert.end\" | \"kibana.alert.flapping\" | \"kibana.alert.flapping_history\" | \"kibana.alert.instance.id\" | \"kibana.alert.last_detected\" | \"kibana.alert.reason\" | \"kibana.alert.rule\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.producer\" | \"kibana.alert.rule.tags\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.start\" | \"kibana.alert.status\" | \"kibana.alert.time_range\" | \"kibana.alert.uuid\" | \"kibana.alert.workflow_status\" | \"kibana.space_ids\" | \"kibana.version\"" + "\"@timestamp\" | \"kibana\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert\" | \"kibana.alert.action_group\" | \"kibana.alert.case_ids\" | \"kibana.alert.duration.us\" | \"kibana.alert.end\" | \"kibana.alert.flapping\" | \"kibana.alert.flapping_history\" | \"kibana.alert.instance.id\" | \"kibana.alert.last_detected\" | \"kibana.alert.reason\" | \"kibana.alert.rule\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.producer\" | \"kibana.alert.rule.revision\" | \"kibana.alert.rule.tags\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.start\" | \"kibana.alert.status\" | \"kibana.alert.time_range\" | \"kibana.alert.uuid\" | \"kibana.alert.workflow_status\" | \"kibana.space_ids\" | \"kibana.version\"" ], "path": "packages/kbn-rule-data-utils/src/default_alerts_as_data.ts", "deprecated": false, diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 34e553ccfc2c6..092c9d471de68 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detections-response](https://github.com/orgs/elastic/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 101 | 0 | 98 | 0 | +| 102 | 0 | 99 | 0 | ## Common diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index f3a1fe14c4045..b70c71ebb6bbc 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: 2023-03-29 +date: 2023-03-30 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 b3c8d6015758c..92411526f73c3 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: 2023-03-29 +date: 2023-03-30 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 e46bb1032ff71..ec7a89f35d259 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 256bc799d5910..af795a75bb7d9 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: 2023-03-29 +date: 2023-03-30 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 f3aa385001f55..3a48cac591ad9 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: 2023-03-29 +date: 2023-03-30 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 e1a8f3af2ec53..fe7803dd65bad 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: 2023-03-29 +date: 2023-03-30 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 9280d0e31dbc8..75596c10d03cb 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: 2023-03-29 +date: 2023-03-30 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 da7eaae972e4a..32a6661bef550 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: 2023-03-29 +date: 2023-03-30 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 40546a3c4ad48..1cb5e5d7a282a 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: 2023-03-29 +date: 2023-03-30 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 f251ef819afa4..1701b5ac9a988 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: 2023-03-29 +date: 2023-03-30 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 5567749c79fcf..f5117cf103e0a 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: 2023-03-29 +date: 2023-03-30 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 a1ae19f2051f5..3b0f756d6c345 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: 2023-03-29 +date: 2023-03-30 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 3713f66609e57..751710d397c26 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: 2023-03-29 +date: 2023-03-30 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 4ad88ac61a83b..40419ff47fae0 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: 2023-03-29 +date: 2023-03-30 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 fe192bba562f9..6f89e7ee96f14 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: 2023-03-29 +date: 2023-03-30 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 bab8e534d5bcd..d0f589427e256 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: 2023-03-29 +date: 2023-03-30 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 7667e9f8d8da6..417e8a363aa4d 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: 2023-03-29 +date: 2023-03-30 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 c954d5ac9a829..516fe935847a2 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: 2023-03-29 +date: 2023-03-30 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 60d411b13f0a0..8214cf5282f58 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: 2023-03-29 +date: 2023-03-30 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 e3feb43f4c836..501fe7be94448 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: 2023-03-29 +date: 2023-03-30 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 cd285ca5f2659..449c966c13678 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 61d64baf318fd..43b997fb49c6e 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: 2023-03-29 +date: 2023-03-30 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 4867ffd6be450..e61813edaec38 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: 2023-03-29 +date: 2023-03-30 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_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 210703fca200a..38cc871af4a3e 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.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 5dea22e524172..dc5ae7060f3e9 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: 2023-03-29 +date: 2023-03-30 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_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 1eace5b451bdf..6980de431114f 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 2a5f96bbf881f..ba1f03a7f5857 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: 2023-03-29 +date: 2023-03-30 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.devdocs.json b/api_docs/kbn_shared_ux_card_no_data.devdocs.json index 99ac076aca8fd..00a6c59e3d871 100644 --- a/api_docs/kbn_shared_ux_card_no_data.devdocs.json +++ b/api_docs/kbn_shared_ux_card_no_data.devdocs.json @@ -190,7 +190,7 @@ "Theme", ">; defaultChecked?: boolean | undefined; suppressContentEditableWarning?: boolean | undefined; suppressHydrationWarning?: boolean | undefined; accessKey?: string | undefined; contentEditable?: Booleanish | \"inherit\" | undefined; contextMenu?: string | undefined; dir?: string | undefined; draggable?: Booleanish | undefined; hidden?: boolean | undefined; lang?: string | undefined; placeholder?: string | undefined; spellCheck?: Booleanish | undefined; tabIndex?: number | undefined; translate?: \"yes\" | \"no\" | undefined; radioGroup?: string | undefined; role?: React.AriaRole | undefined; about?: string | undefined; datatype?: string | undefined; inlist?: any; property?: string | undefined; resource?: string | undefined; typeof?: string | undefined; vocab?: string | undefined; autoCapitalize?: string | undefined; autoCorrect?: string | undefined; autoSave?: string | undefined; itemProp?: string | undefined; itemScope?: boolean | undefined; itemType?: string | undefined; itemID?: string | undefined; itemRef?: string | undefined; results?: number | undefined; unselectable?: \"on\" | \"off\" | undefined; inputMode?: \"search\" | \"none\" | \"text\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined; 'aria-activedescendant'?: string | undefined; 'aria-atomic'?: Booleanish | undefined; 'aria-autocomplete'?: \"none\" | \"list\" | \"inline\" | \"both\" | undefined; 'aria-busy'?: Booleanish | undefined; 'aria-checked'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-colcount'?: number | undefined; 'aria-colindex'?: number | undefined; 'aria-colspan'?: number | undefined; 'aria-controls'?: string | undefined; 'aria-current'?: boolean | \"page\" | \"date\" | \"time\" | \"true\" | \"false\" | \"step\" | \"location\" | undefined; 'aria-describedby'?: string | undefined; 'aria-details'?: string | undefined; 'aria-disabled'?: Booleanish | undefined; 'aria-dropeffect'?: \"execute\" | \"link\" | \"none\" | \"copy\" | \"move\" | \"popup\" | undefined; 'aria-errormessage'?: string | undefined; 'aria-expanded'?: Booleanish | undefined; 'aria-flowto'?: string | undefined; 'aria-grabbed'?: Booleanish | undefined; 'aria-haspopup'?: boolean | \"dialog\" | \"menu\" | \"true\" | \"false\" | \"grid\" | \"listbox\" | \"tree\" | undefined; 'aria-hidden'?: Booleanish | undefined; 'aria-invalid'?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\" | undefined; 'aria-keyshortcuts'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-level'?: number | undefined; 'aria-live'?: \"off\" | \"assertive\" | \"polite\" | undefined; 'aria-modal'?: Booleanish | undefined; 'aria-multiline'?: Booleanish | undefined; 'aria-multiselectable'?: Booleanish | undefined; 'aria-orientation'?: \"horizontal\" | \"vertical\" | undefined; 'aria-owns'?: string | undefined; 'aria-placeholder'?: string | undefined; 'aria-posinset'?: number | undefined; 'aria-pressed'?: boolean | \"true\" | \"false\" | \"mixed\" | undefined; 'aria-readonly'?: Booleanish | undefined; 'aria-relevant'?: \"text\" | \"all\" | \"additions\" | \"additions removals\" | \"additions text\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\" | undefined; 'aria-required'?: Booleanish | undefined; 'aria-roledescription'?: string | undefined; 'aria-rowcount'?: number | undefined; 'aria-rowindex'?: number | undefined; 'aria-rowspan'?: number | undefined; 'aria-selected'?: Booleanish | undefined; 'aria-setsize'?: number | undefined; 'aria-sort'?: \"none\" | \"ascending\" | \"descending\" | \"other\" | undefined; 'aria-valuemax'?: number | undefined; 'aria-valuemin'?: number | undefined; 'aria-valuenow'?: number | undefined; 'aria-valuetext'?: string | undefined; dangerouslySetInnerHTML?: { __html: string; } | undefined; onCopy?: React.ClipboardEventHandler | undefined; onCopyCapture?: React.ClipboardEventHandler | undefined; onCut?: React.ClipboardEventHandler | undefined; onCutCapture?: React.ClipboardEventHandler | undefined; onPaste?: React.ClipboardEventHandler | undefined; onPasteCapture?: React.ClipboardEventHandler | undefined; onCompositionEnd?: React.CompositionEventHandler | undefined; onCompositionEndCapture?: React.CompositionEventHandler | undefined; onCompositionStart?: React.CompositionEventHandler | undefined; onCompositionStartCapture?: React.CompositionEventHandler | undefined; onCompositionUpdate?: React.CompositionEventHandler | undefined; onCompositionUpdateCapture?: React.CompositionEventHandler | undefined; onFocus?: React.FocusEventHandler | undefined; onFocusCapture?: React.FocusEventHandler | undefined; onBlur?: React.FocusEventHandler | undefined; onBlurCapture?: React.FocusEventHandler | undefined; onChange?: React.FormEventHandler | undefined; onChangeCapture?: React.FormEventHandler | undefined; onBeforeInput?: React.FormEventHandler | undefined; onBeforeInputCapture?: React.FormEventHandler | undefined; onInput?: React.FormEventHandler | undefined; onInputCapture?: React.FormEventHandler | undefined; onReset?: React.FormEventHandler | undefined; onResetCapture?: React.FormEventHandler | undefined; onSubmit?: React.FormEventHandler | undefined; onSubmitCapture?: React.FormEventHandler | undefined; onInvalid?: React.FormEventHandler | undefined; onInvalidCapture?: React.FormEventHandler | undefined; onLoad?: React.ReactEventHandler | undefined; onLoadCapture?: React.ReactEventHandler | undefined; onError?: React.ReactEventHandler | undefined; onErrorCapture?: React.ReactEventHandler | undefined; onKeyDown?: React.KeyboardEventHandler | undefined; onKeyDownCapture?: React.KeyboardEventHandler | undefined; onKeyPress?: React.KeyboardEventHandler | undefined; onKeyPressCapture?: React.KeyboardEventHandler | undefined; onKeyUp?: React.KeyboardEventHandler | undefined; onKeyUpCapture?: React.KeyboardEventHandler | undefined; onAbort?: React.ReactEventHandler | undefined; onAbortCapture?: React.ReactEventHandler | undefined; onCanPlay?: React.ReactEventHandler | undefined; onCanPlayCapture?: React.ReactEventHandler | undefined; onCanPlayThrough?: React.ReactEventHandler | undefined; onCanPlayThroughCapture?: React.ReactEventHandler | undefined; onDurationChange?: React.ReactEventHandler | undefined; onDurationChangeCapture?: React.ReactEventHandler | undefined; onEmptied?: React.ReactEventHandler | undefined; onEmptiedCapture?: React.ReactEventHandler | undefined; onEncrypted?: React.ReactEventHandler | undefined; onEncryptedCapture?: React.ReactEventHandler | undefined; onEnded?: React.ReactEventHandler | undefined; onEndedCapture?: React.ReactEventHandler | undefined; onLoadedData?: React.ReactEventHandler | undefined; onLoadedDataCapture?: React.ReactEventHandler | undefined; onLoadedMetadata?: React.ReactEventHandler | undefined; onLoadedMetadataCapture?: React.ReactEventHandler | undefined; onLoadStart?: React.ReactEventHandler | undefined; onLoadStartCapture?: React.ReactEventHandler | undefined; onPause?: React.ReactEventHandler | undefined; onPauseCapture?: React.ReactEventHandler | undefined; onPlay?: React.ReactEventHandler | undefined; onPlayCapture?: React.ReactEventHandler | undefined; onPlaying?: React.ReactEventHandler | undefined; onPlayingCapture?: React.ReactEventHandler | undefined; onProgress?: React.ReactEventHandler | undefined; onProgressCapture?: React.ReactEventHandler | undefined; onRateChange?: React.ReactEventHandler | undefined; onRateChangeCapture?: React.ReactEventHandler | undefined; onSeeked?: React.ReactEventHandler | undefined; onSeekedCapture?: React.ReactEventHandler | undefined; onSeeking?: React.ReactEventHandler | undefined; onSeekingCapture?: React.ReactEventHandler | undefined; onStalled?: React.ReactEventHandler | undefined; onStalledCapture?: React.ReactEventHandler | undefined; onSuspend?: React.ReactEventHandler | undefined; onSuspendCapture?: React.ReactEventHandler | undefined; onTimeUpdate?: React.ReactEventHandler | undefined; onTimeUpdateCapture?: React.ReactEventHandler | undefined; onVolumeChange?: React.ReactEventHandler | undefined; onVolumeChangeCapture?: React.ReactEventHandler | undefined; onWaiting?: React.ReactEventHandler | undefined; onWaitingCapture?: React.ReactEventHandler | undefined; onAuxClick?: React.MouseEventHandler | undefined; onAuxClickCapture?: React.MouseEventHandler | undefined; onClick?: React.MouseEventHandler | undefined; onClickCapture?: React.MouseEventHandler | undefined; onContextMenu?: React.MouseEventHandler | undefined; onContextMenuCapture?: React.MouseEventHandler | undefined; onDoubleClick?: React.MouseEventHandler | undefined; onDoubleClickCapture?: React.MouseEventHandler | undefined; onDrag?: React.DragEventHandler | undefined; onDragCapture?: React.DragEventHandler | undefined; onDragEnd?: React.DragEventHandler | undefined; onDragEndCapture?: React.DragEventHandler | undefined; onDragEnter?: React.DragEventHandler | undefined; onDragEnterCapture?: React.DragEventHandler | undefined; onDragExit?: React.DragEventHandler | undefined; onDragExitCapture?: React.DragEventHandler | undefined; onDragLeave?: React.DragEventHandler | undefined; onDragLeaveCapture?: React.DragEventHandler | undefined; onDragOver?: React.DragEventHandler | undefined; onDragOverCapture?: React.DragEventHandler | undefined; onDragStart?: React.DragEventHandler | undefined; onDragStartCapture?: React.DragEventHandler | undefined; onDrop?: React.DragEventHandler | undefined; onDropCapture?: React.DragEventHandler | undefined; onMouseDown?: React.MouseEventHandler | undefined; onMouseDownCapture?: React.MouseEventHandler | undefined; onMouseEnter?: React.MouseEventHandler | undefined; onMouseLeave?: React.MouseEventHandler | undefined; onMouseMove?: React.MouseEventHandler | undefined; onMouseMoveCapture?: React.MouseEventHandler | undefined; onMouseOut?: React.MouseEventHandler | undefined; onMouseOutCapture?: React.MouseEventHandler | undefined; onMouseOver?: React.MouseEventHandler | undefined; onMouseOverCapture?: React.MouseEventHandler | undefined; onMouseUp?: React.MouseEventHandler | undefined; onMouseUpCapture?: React.MouseEventHandler | undefined; onSelect?: React.ReactEventHandler | undefined; onSelectCapture?: React.ReactEventHandler | undefined; onTouchCancel?: React.TouchEventHandler | undefined; onTouchCancelCapture?: React.TouchEventHandler | undefined; onTouchEnd?: React.TouchEventHandler | undefined; onTouchEndCapture?: React.TouchEventHandler | undefined; onTouchMove?: React.TouchEventHandler | undefined; onTouchMoveCapture?: React.TouchEventHandler | undefined; onTouchStart?: React.TouchEventHandler | undefined; onTouchStartCapture?: React.TouchEventHandler | undefined; onPointerDown?: React.PointerEventHandler | undefined; onPointerDownCapture?: React.PointerEventHandler | undefined; onPointerMove?: React.PointerEventHandler | undefined; onPointerMoveCapture?: React.PointerEventHandler | undefined; onPointerUp?: React.PointerEventHandler | undefined; onPointerUpCapture?: React.PointerEventHandler | undefined; onPointerCancel?: React.PointerEventHandler | undefined; onPointerCancelCapture?: React.PointerEventHandler | undefined; onPointerEnter?: React.PointerEventHandler | undefined; onPointerEnterCapture?: React.PointerEventHandler | undefined; onPointerLeave?: React.PointerEventHandler | undefined; onPointerLeaveCapture?: React.PointerEventHandler | undefined; onPointerOver?: React.PointerEventHandler | undefined; onPointerOverCapture?: React.PointerEventHandler | undefined; onPointerOut?: React.PointerEventHandler | undefined; onPointerOutCapture?: React.PointerEventHandler | undefined; onGotPointerCapture?: React.PointerEventHandler | undefined; onGotPointerCaptureCapture?: React.PointerEventHandler | undefined; onLostPointerCapture?: React.PointerEventHandler | undefined; onLostPointerCaptureCapture?: React.PointerEventHandler | undefined; onScroll?: React.UIEventHandler | undefined; onScrollCapture?: React.UIEventHandler | undefined; onWheel?: React.WheelEventHandler | undefined; onWheelCapture?: React.WheelEventHandler | undefined; onAnimationStart?: React.AnimationEventHandler | undefined; onAnimationStartCapture?: React.AnimationEventHandler | undefined; onAnimationEnd?: React.AnimationEventHandler | undefined; onAnimationEndCapture?: React.AnimationEventHandler | undefined; onAnimationIteration?: React.AnimationEventHandler | undefined; onAnimationIterationCapture?: React.AnimationEventHandler | undefined; onTransitionEnd?: React.TransitionEventHandler | undefined; onTransitionEndCapture?: React.TransitionEventHandler | undefined; paddingSize?: \"m\" | \"none\" | \"s\" | \"xs\" | \"l\" | \"xl\" | undefined; href?: string | undefined; rel?: string | undefined; target?: string | undefined; icon?: React.ReactElement<", "EuiIconProps", - ", string | React.JSXElementConstructor> | null | undefined; hasBorder?: boolean | undefined; textAlign?: \"right\" | \"left\" | \"center\" | undefined; titleElement?: \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"span\" | undefined; titleSize?: \"s\" | \"xs\" | undefined; betaBadgeProps?: (", + ", string | React.JSXElementConstructor> | null | undefined; display?: \"warning\" | \"success\" | \"subdued\" | \"primary\" | \"accent\" | \"danger\" | \"transparent\" | \"plain\" | undefined; hasBorder?: boolean | undefined; textAlign?: \"right\" | \"left\" | \"center\" | undefined; titleElement?: \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"span\" | undefined; titleSize?: \"s\" | \"xs\" | undefined; betaBadgeProps?: (", "CommonProps", " & ", "DisambiguateSet", @@ -340,7 +340,7 @@ "DisambiguateSet", " & ", "DisambiguateSet", - "<{ tooltipContent: React.ReactNode; title?: string | undefined; }, { title: string; tooltipContent?: React.ReactNode; }> & { title: string; tooltipContent?: React.ReactNode; } & { label: React.ReactNode; }) | undefined; display?: \"warning\" | \"success\" | \"subdued\" | \"primary\" | \"accent\" | \"danger\" | \"transparent\" | \"plain\" | undefined; selectable?: (", + "<{ tooltipContent: React.ReactNode; title?: string | undefined; }, { title: string; tooltipContent?: React.ReactNode; }> & { title: string; tooltipContent?: React.ReactNode; } & { label: React.ReactNode; }) | undefined; selectable?: (", "DisambiguateSet", "<", "EuiButtonPropsForAnchor", diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index f2081bfc0a0ce..97b16c5bdf3c1 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: 2023-03-29 +date: 2023-03-30 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 9084d22171356..d56b3a5bfd0b7 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: 2023-03-29 +date: 2023-03-30 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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 87de163d265cd..dd614a6e0297f 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: 2023-03-29 +date: 2023-03-30 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 41294d131ac60..7fc10a3045057 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: 2023-03-29 +date: 2023-03-30 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 a289db15a540c..4738b9776e37e 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: 2023-03-29 +date: 2023-03-30 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 bd3902e505d10..024549906cacc 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: 2023-03-29 +date: 2023-03-30 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 ad1c7950c06ed..6c7250b3bf97f 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: 2023-03-29 +date: 2023-03-30 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 497374112f0c7..4189fa1946b30 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: 2023-03-29 +date: 2023-03-30 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 4011e0cc2e115..36d4b5eb42938 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: 2023-03-29 +date: 2023-03-30 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 78ff890b692f4..464414d59c829 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: 2023-03-29 +date: 2023-03-30 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 2d01033e4ef73..8e28be20312b9 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: 2023-03-29 +date: 2023-03-30 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 80e59127f2894..d90edd80a1e24 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: 2023-03-29 +date: 2023-03-30 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 84bee6900bbac..24be6cc3c438f 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: 2023-03-29 +date: 2023-03-30 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 6c24069b722b9..19e9eb2e80856 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: 2023-03-29 +date: 2023-03-30 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 38c5e0876b32e..454ea309da14a 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: 2023-03-29 +date: 2023-03-30 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 95ee1fb69070c..ca61c03cd40da 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: 2023-03-29 +date: 2023-03-30 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 134bfd589c24b..8c5ed1e86dbde 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: 2023-03-29 +date: 2023-03-30 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 fd42960844506..38d7844c05002 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: 2023-03-29 +date: 2023-03-30 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 f45223d7504f9..9e76a2a930d0f 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: 2023-03-29 +date: 2023-03-30 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 34ec9534d2c8c..7fa24ba86655a 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: 2023-03-29 +date: 2023-03-30 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 a0a5ebbfcb458..c9a98fb9d14fa 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: 2023-03-29 +date: 2023-03-30 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 00894e5d71fd8..03b2cd29fef74 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: 2023-03-29 +date: 2023-03-30 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 b69290e276755..c74993eec1858 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: 2023-03-29 +date: 2023-03-30 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 b7b87f9067c47..3f1df93631bec 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: 2023-03-29 +date: 2023-03-30 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 9f60094dda9c2..4cec355aea504 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: 2023-03-29 +date: 2023-03-30 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 7444571ca596a..256936869404b 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: 2023-03-29 +date: 2023-03-30 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 c60e7efb4b58a..701c6aa7deef1 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: 2023-03-29 +date: 2023-03-30 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 b4356c1d1c917..fd80577fd9049 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: 2023-03-29 +date: 2023-03-30 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 58c8f5e20f273..6b5e5d533f0b9 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: 2023-03-29 +date: 2023-03-30 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 dff1aa20ce2bf..ed75917d9d84f 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: 2023-03-29 +date: 2023-03-30 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 b41e683dc11c1..b3bccdc4409a6 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: 2023-03-29 +date: 2023-03-30 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 26c2580dae9ff..4ae6359d255c8 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: 2023-03-29 +date: 2023-03-30 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 15e052b3e4ac3..cba3fe0bb7e35 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: 2023-03-29 +date: 2023-03-30 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 fd0009c55e17d..d1a366e934c88 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: 2023-03-29 +date: 2023-03-30 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 b7e06bcb04718..b059e6f3a7d08 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index dd54543fda4d7..a8158ea4cdfc6 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: 2023-03-29 +date: 2023-03-30 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 ce0f6b668096e..d164588941b4c 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: 2023-03-29 +date: 2023-03-30 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 08925df9a31e0..35699fc1dd480 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: 2023-03-29 +date: 2023-03-30 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 08378af809e32..5162985a4b6f3 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: 2023-03-29 +date: 2023-03-30 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 d088bbe41a514..8f322bb668faf 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 2037115151307..d614428cee073 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: 2023-03-29 +date: 2023-03-30 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 88097add60c70..6c35df283389b 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index d8a529ccb83bb..f3cb199b55c2b 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 1e55e82b9035f..abdf475f8bb75 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: 2023-03-29 +date: 2023-03-30 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 b9b77d039fd44..466aaf98dbbd0 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: 2023-03-29 +date: 2023-03-30 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 98a5d19978aee..e24ebdda7c022 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: 2023-03-29 +date: 2023-03-30 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 d76c88a66a3bc..df98b1b203085 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: 2023-03-29 +date: 2023-03-30 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 4269d622287ce..56921a85db68e 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 79d6244bbfa7a..5c3103297495b 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: 2023-03-29 +date: 2023-03-30 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 6aa38db13b59a..9ad99f47eae17 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: 2023-03-29 +date: 2023-03-30 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 08dc31e112527..df3c8863b3f20 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: 2023-03-29 +date: 2023-03-30 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 3f3d831fd1f2f..5cb87c14031ef 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 1970a9c512401..1e75f5f318d83 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index c518fecffd354..b402f7169edf7 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 3569fa25e46b4..3404fd331146a 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -1268,6 +1268,30 @@ "plugin": "savedObjectsManagement", "path": "src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx" }, + { + "plugin": "observability", + "path": "x-pack/plugins/observability/public/application/index.tsx" + }, + { + "plugin": "observability", + "path": "x-pack/plugins/observability/public/application/index.tsx" + }, + { + "plugin": "observability", + "path": "x-pack/plugins/observability/public/application/index.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" + }, + { + "plugin": "exploratoryView", + "path": "x-pack/plugins/exploratory_view/public/application/index.tsx" + }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/public/components/home_integration/tutorial_directory_header_link.tsx" @@ -1292,18 +1316,6 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/public/components/custom_assets_accordion.tsx" }, - { - "plugin": "observability", - "path": "x-pack/plugins/observability/public/application/index.tsx" - }, - { - "plugin": "observability", - "path": "x-pack/plugins/observability/public/application/index.tsx" - }, - { - "plugin": "observability", - "path": "x-pack/plugins/observability/public/application/index.tsx" - }, { "plugin": "ml", "path": "x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx" diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index efdeb6353cc86..ec4a7b5931724 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: 2023-03-29 +date: 2023-03-30 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 3abf62c78fd52..4ac9ddc6d73bf 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: 2023-03-29 +date: 2023-03-30 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 a11aa761e69a7..9599add0cf6b7 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index fbb669188b643..89dd3cdce66b7 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -4312,7 +4312,7 @@ "label": "changeType", "description": [], "signature": [ - "\"layers\" | \"initial\" | \"unchanged\" | \"reduced\" | \"extended\" | \"reorder\"" + "\"layers\" | \"initial\" | \"extended\" | \"unchanged\" | \"reduced\" | \"reorder\"" ], "path": "x-pack/plugins/lens/public/types.ts", "deprecated": false, @@ -4570,7 +4570,7 @@ "\nThe change type indicates what was changed in this table compared to the currently active table of this layer." ], "signature": [ - "\"layers\" | \"initial\" | \"unchanged\" | \"reduced\" | \"extended\" | \"reorder\"" + "\"layers\" | \"initial\" | \"extended\" | \"unchanged\" | \"reduced\" | \"reorder\"" ], "path": "x-pack/plugins/lens/public/types.ts", "deprecated": false, @@ -9228,8 +9228,6 @@ "label": "GenericIndexPatternColumn", "description": [], "signature": [ - "BaseIndexPatternColumn", - " | ", { "pluginId": "lens", "scope": "public", @@ -9238,6 +9236,8 @@ "text": "FieldBasedIndexPatternColumn" }, " | ", + "BaseIndexPatternColumn", + " | ", "ReferenceBasedIndexPatternColumn" ], "path": "x-pack/plugins/lens/public/datasources/form_based/operations/definitions/column_types.ts", diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index c6b1c87cf57d2..cc4091871dd28 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: 2023-03-29 +date: 2023-03-30 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 f441c021b42bd..b890ad3f8e5de 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: 2023-03-29 +date: 2023-03-30 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 bbcdc49eb23ae..7158f4964fd6c 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: 2023-03-29 +date: 2023-03-30 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 8b15970f796f4..4c197fdbe1d4b 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 0e3b25b6f240a..acd96bcd824b4 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 7c6c97faecf7d..68281c7904f4b 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json index 070dff264975c..e9c24b6aa53b5 100644 --- a/api_docs/maps.devdocs.json +++ b/api_docs/maps.devdocs.json @@ -2500,8 +2500,8 @@ "label": "getUrlTemplate", "description": [], "signature": [ - "(dataFilters: ", - "DataFilters", + "(requestMeta: ", + "SourceRequestMeta", ") => Promise" ], "path": "x-pack/plugins/maps/public/classes/sources/tms_source/index.ts", @@ -2511,12 +2511,12 @@ { "parentPluginId": "maps", "id": "def-public.ITMSSource.getUrlTemplate.$1", - "type": "Object", + "type": "CompoundType", "tags": [], - "label": "dataFilters", + "label": "requestMeta", "description": [], "signature": [ - "DataFilters" + "SourceRequestMeta" ], "path": "x-pack/plugins/maps/public/classes/sources/tms_source/index.ts", "deprecated": false, @@ -2825,7 +2825,7 @@ "label": "getGeoJsonWithMeta", "description": [], "signature": [ - "(layerName: string, searchFilters: ", + "(layerName: string, requestMeta: ", { "pluginId": "maps", "scope": "common", @@ -2875,7 +2875,7 @@ "id": "def-public.IVectorSource.getGeoJsonWithMeta.$2", "type": "CompoundType", "tags": [], - "label": "searchFilters", + "label": "requestMeta", "description": [], "signature": [ { @@ -3073,12 +3073,30 @@ "label": "getSyncMeta", "description": [], "signature": [ - "() => object | null" + "(dataFilters: ", + "DataFilters", + ") => object | null" ], "path": "x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [ + { + "parentPluginId": "maps", + "id": "def-public.IVectorSource.getSyncMeta.$1", + "type": "Object", + "tags": [], + "label": "dataFilters", + "description": [], + "signature": [ + "DataFilters" + ], + "path": "x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], "returnComment": [] }, { @@ -4835,7 +4853,7 @@ "description": [], "signature": [ "DataFilters", - " & { applyGlobalQuery: boolean; applyGlobalTime: boolean; applyForceRefresh: boolean; fieldNames: string[]; geogridPrecision?: number | undefined; timesliceMaskField?: string | undefined; sourceQuery?: ", + " & { applyGlobalQuery: boolean; applyGlobalTime: boolean; applyForceRefresh: boolean; sourceQuery?: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -4843,7 +4861,7 @@ "section": "def-common.Query", "text": "Query" }, - " | undefined; sourceMeta: object | null; isForceRefresh: boolean; isFeatureEditorOpenForLayer: boolean; }" + " | undefined; isForceRefresh: boolean; } & { fieldNames: string[]; timesliceMaskField?: string | undefined; sourceMeta: object | null; isFeatureEditorOpenForLayer: boolean; }" ], "path": "x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.ts", "deprecated": false, diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 5b95e6f9f8169..bac510d139bbb 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 268 | 0 | 267 | 27 | +| 269 | 0 | 268 | 28 | ## Client diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 2b696c1c67f50..20550b6918d2f 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index 6d4c171c7664b..a235055918f57 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1424,7 +1424,7 @@ }, " extends Pick<", "UseDataGridReturnType", - ", \"status\" | \"rowCount\" | \"errorMessage\" | \"baseline\" | \"chartsVisible\" | \"chartsButtonVisible\" | \"ccsWarning\" | \"columnsWithCharts\" | \"invalidSortingColumnns\" | \"noDataMessage\" | \"onChangeItemsPerPage\" | \"onChangePage\" | \"onSort\" | \"pagination\" | \"setPagination\" | \"setVisibleColumns\" | \"rowCountRelation\" | \"sortingColumns\" | \"tableItems\" | \"toggleChartVisibility\" | \"visibleColumns\" | \"predictionFieldName\" | \"resultsField\">" + ", \"status\" | \"baseline\" | \"rowCount\" | \"errorMessage\" | \"chartsVisible\" | \"chartsButtonVisible\" | \"ccsWarning\" | \"columnsWithCharts\" | \"invalidSortingColumnns\" | \"noDataMessage\" | \"onChangeItemsPerPage\" | \"onChangePage\" | \"onSort\" | \"pagination\" | \"setPagination\" | \"setVisibleColumns\" | \"rowCountRelation\" | \"sortingColumns\" | \"tableItems\" | \"toggleChartVisibility\" | \"visibleColumns\" | \"predictionFieldName\" | \"resultsField\">" ], "path": "x-pack/plugins/ml/public/application/components/data_grid/types.ts", "deprecated": false, diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index d10cb7319bf70..e05fb3bea0413 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index acfd933725d1c..5d8ce1b498dee 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: 2023-03-29 +date: 2023-03-30 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 44a507f721b8b..78ca117dc8b26 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: 2023-03-29 +date: 2023-03-30 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 d106ea0592c2a..3c0f0a4954302 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: 2023-03-29 +date: 2023-03-30 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 4b885eabd786d..c1c0cdc760a5d 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 09a2e49d69d76..c9baffa4c0d06 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: 2023-03-29 +date: 2023-03-30 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 0a132b87b7fe4..e5d2e26a3f68a 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -1080,7 +1080,7 @@ }, " | undefined; list: () => string[]; }; selectedAlertId?: string | undefined; } & ", "CommonProps", - " & { as?: \"div\" | undefined; } & _EuiFlyoutProps & Omit, HTMLDivElement>, keyof _EuiFlyoutProps> & Omit, HTMLDivElement>, \"css\" | \"key\" | keyof React.HTMLAttributes> & { ref?: React.RefObject | ((instance: HTMLDivElement | null) => void) | null | undefined; }, \"type\" | \"prefix\" | \"id\" | \"defaultValue\" | \"children\" | \"ref\" | \"is\" | \"title\" | \"security\" | \"slot\" | \"style\" | \"className\" | \"aria-label\" | \"data-test-subj\" | \"css\" | \"key\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"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\" | \"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-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\" | \"onChange\" | \"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\" | \"paddingSize\" | \"size\" | \"onClose\" | \"as\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\">, \"type\" | \"prefix\" | \"id\" | \"defaultValue\" | \"alert\" | \"children\" | \"is\" | \"title\" | \"alerts\" | \"security\" | \"slot\" | \"style\" | \"className\" | \"aria-label\" | \"data-test-subj\" | \"css\" | \"key\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"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\" | \"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-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\" | \"onChange\" | \"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\" | \"paddingSize\" | \"size\" | \"onClose\" | \"as\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"isInApp\" | \"observabilityRuleTypeRegistry\" | \"selectedAlertId\"> & { ref?: React.RefObject | ((instance: HTMLDivElement | null) => void) | null | undefined; }> & { readonly _result: ({ alert, alerts, isInApp, observabilityRuleTypeRegistry, onClose, selectedAlertId, }: AlertsFlyoutProps) => JSX.Element | null; }" + " & { as?: \"div\" | undefined; } & _EuiFlyoutProps & Omit, HTMLDivElement>, keyof _EuiFlyoutProps> & Omit, HTMLDivElement>, \"css\" | \"key\" | keyof React.HTMLAttributes> & { ref?: React.RefObject | ((instance: HTMLDivElement | null) => void) | null | undefined; }, \"type\" | \"prefix\" | \"id\" | \"defaultValue\" | \"children\" | \"ref\" | \"is\" | \"title\" | \"security\" | \"slot\" | \"style\" | \"className\" | \"aria-label\" | \"data-test-subj\" | \"css\" | \"key\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"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\" | \"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-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\" | \"onChange\" | \"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\" | \"paddingSize\" | \"size\" | \"onClose\" | \"maxWidth\" | \"as\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\">, \"type\" | \"prefix\" | \"id\" | \"defaultValue\" | \"alert\" | \"children\" | \"is\" | \"title\" | \"alerts\" | \"security\" | \"slot\" | \"style\" | \"className\" | \"aria-label\" | \"data-test-subj\" | \"css\" | \"key\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"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\" | \"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-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\" | \"onChange\" | \"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\" | \"paddingSize\" | \"size\" | \"onClose\" | \"maxWidth\" | \"as\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"isInApp\" | \"observabilityRuleTypeRegistry\" | \"selectedAlertId\"> & { ref?: React.RefObject | ((instance: HTMLDivElement | null) => void) | null | undefined; }> & { readonly _result: ({ alert, alerts, isInApp, observabilityRuleTypeRegistry, onClose, selectedAlertId, }: AlertsFlyoutProps) => JSX.Element | null; }" ], "path": "x-pack/plugins/observability/public/index.ts", "deprecated": false, @@ -4850,7 +4850,7 @@ "label": "format", "description": [], "signature": [ - "(options: { fields: OutputOf> & Record; formatters: { asDuration: (value: ", + "(options: { fields: OutputOf> & Record; formatters: { asDuration: (value: ", "Maybe", ", { defaultValue, extended }?: FormatterOptions) => string; asPercent: (numerator: ", "Maybe", @@ -4869,7 +4869,7 @@ "label": "options", "description": [], "signature": [ - "{ fields: OutputOf> & Record; formatters: { asDuration: (value: ", + "{ fields: OutputOf> & Record; formatters: { asDuration: (value: ", "Maybe", ", { defaultValue, extended }?: FormatterOptions) => string; asPercent: (numerator: ", "Maybe", @@ -5581,7 +5581,7 @@ "label": "fields", "description": [], "signature": [ - "OutputOf> & OutputOf> & TAdditionalMetaFields" + "OutputOf> & OutputOf> & TAdditionalMetaFields" ], "path": "x-pack/plugins/observability/public/typings/alerts.ts", "deprecated": false, @@ -6449,6 +6449,36 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observability", + "id": "def-public.observabilityAppId", + "type": "string", + "tags": [], + "label": "observabilityAppId", + "description": [], + "signature": [ + "\"observability-overview\"" + ], + "path": "x-pack/plugins/observability/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observability", + "id": "def-public.observabilityFeatureId", + "type": "string", + "tags": [], + "label": "observabilityFeatureId", + "description": [], + "signature": [ + "\"observability\"" + ], + "path": "x-pack/plugins/observability/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observability", "id": "def-public.ObservabilityFetchDataPlugins", @@ -6472,7 +6502,7 @@ "label": "ObservabilityRuleTypeFormatter", "description": [], "signature": [ - "(options: { fields: OutputOf> & Record; formatters: { asDuration: (value: ", + "(options: { fields: OutputOf> & Record; formatters: { asDuration: (value: ", "Maybe", ", { defaultValue, extended }?: FormatterOptions) => string; asPercent: (numerator: ", "Maybe", @@ -6491,7 +6521,7 @@ "label": "options", "description": [], "signature": [ - "{ fields: OutputOf> & Record; formatters: { asDuration: (value: ", + "{ fields: OutputOf> & Record; formatters: { asDuration: (value: ", "Maybe", ", { defaultValue, extended }?: FormatterOptions) => string; asPercent: (numerator: ", "Maybe", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 2c8dfc0e3ac9b..6896d4cec0814 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/actionable-observability](https://github.com/orgs/elastic/team | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 650 | 44 | 644 | 34 | +| 652 | 44 | 646 | 34 | ## Client diff --git a/api_docs/osquery.devdocs.json b/api_docs/osquery.devdocs.json index 8dec14c663274..98ebc834aa39c 100644 --- a/api_docs/osquery.devdocs.json +++ b/api_docs/osquery.devdocs.json @@ -268,7 +268,7 @@ "label": "osqueryCreateAction", "description": [], "signature": [ - "(payload: { agent_ids?: string[] | undefined; agent_all?: boolean | undefined; agent_platforms?: string[] | undefined; agent_policy_ids?: string[] | undefined; query?: string | undefined; queries?: { id: string; query: string; ecs_mapping: { [x: string]: { field?: string | undefined; value?: string | string[] | undefined; }; } | undefined; version: string | undefined; platform: string | undefined; removed: boolean | undefined; snapshot: boolean | undefined; }[] | undefined; saved_query_id?: string | undefined; ecs_mapping?: { [x: string]: { field?: string | undefined; value?: string | string[] | undefined; }; } | undefined; pack_id?: string | undefined; alert_ids?: string[] | undefined; case_ids?: string[] | undefined; event_ids?: string[] | undefined; metadata?: object | undefined; }, alertData?: OutputOf> | undefined) => void" + "(payload: { agent_ids?: string[] | undefined; agent_all?: boolean | undefined; agent_platforms?: string[] | undefined; agent_policy_ids?: string[] | undefined; query?: string | undefined; queries?: { id: string; query: string; ecs_mapping: { [x: string]: { field?: string | undefined; value?: string | string[] | undefined; }; } | undefined; version: string | undefined; platform: string | undefined; removed: boolean | undefined; snapshot: boolean | undefined; }[] | undefined; saved_query_id?: string | undefined; ecs_mapping?: { [x: string]: { field?: string | undefined; value?: string | string[] | undefined; }; } | undefined; pack_id?: string | undefined; alert_ids?: string[] | undefined; case_ids?: string[] | undefined; event_ids?: string[] | undefined; metadata?: object | undefined; }, alertData?: OutputOf> | undefined) => void" ], "path": "x-pack/plugins/osquery/server/types.ts", "deprecated": false, @@ -297,7 +297,7 @@ "label": "alertData", "description": [], "signature": [ - "OutputOf> | undefined" + "OutputOf> | undefined" ], "path": "x-pack/plugins/osquery/server/types.ts", "deprecated": false, diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 57b7f0c28c56d..764ba28c101fa 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 3609d7e8aae11..5dd59f10aa7f6 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: 2023-03-29 +date: 2023-03-30 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 | |--------------|----------|------------------------| -| 583 | 479 | 38 | +| 584 | 480 | 38 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 68433 | 519 | 59067 | 1289 | +| 68780 | 523 | 59410 | 1309 | ## Plugin Directory @@ -36,7 +36,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 89 | 1 | 74 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 96 | 0 | 79 | 30 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 96 | 0 | 79 | 31 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 270 | 16 | 255 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 41 | 0 | 11 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Chat available on Elastic Cloud deployments for quicker assistance. | 1 | 0 | 0 | 0 | @@ -72,6 +72,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 114 | 3 | 110 | 5 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 172 | 30 | 172 | 3 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 116 | 0 | 116 | 11 | +| | [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) | - | 342 | 4 | 339 | 17 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'error' renderer to expressions | 17 | 0 | 15 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Gauge plugin adds a `gauge` renderer and function to the expression plugin. The renderer will display the `gauge` chart. | 58 | 0 | 58 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Heatmap plugin adds a `heatmap` renderer and function to the expression plugin. The renderer will display the `heatmap` chart. | 111 | 14 | 107 | 2 | @@ -120,7 +121,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-solution-platform](https://github.com/orgs/elastic/teams/security-solution-platform) | - | 210 | 0 | 94 | 51 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 41 | 0 | 41 | 6 | -| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 268 | 0 | 267 | 27 | +| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 269 | 0 | 268 | 28 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 67 | 0 | 67 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 259 | 9 | 83 | 40 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | - | 15 | 3 | 13 | 1 | @@ -128,7 +129,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 34 | 0 | 34 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | -| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 650 | 44 | 644 | 34 | +| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 652 | 44 | 646 | 34 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 6 | | painlessLab | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | | [@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). | 202 | 7 | 146 | 12 | @@ -136,7 +137,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 36 | 0 | 16 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 21 | 0 | 21 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 258 | 0 | 229 | 13 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 258 | 0 | 229 | 14 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 24 | 0 | 19 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 231 | 2 | 180 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 44 | 0 | 44 | 0 | @@ -322,7 +323,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 13 | 0 | 13 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 29 | 0 | 25 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 11 | 1 | 11 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 54 | 0 | 8 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 55 | 0 | 8 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 6 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 11 | 0 | 11 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 0 | 0 | @@ -454,7 +455,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 6 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | -| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 101 | 0 | 98 | 0 | +| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 102 | 0 | 99 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 30 | 0 | 30 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 2 | 0 | 0 | 0 | | | [@elastic/security-solution-platform](https://github.com/orgs/elastic/teams/security-solution-platform) | - | 56 | 1 | 41 | 1 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index d358e8bb60bb6..f10a192133189 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.devdocs.json b/api_docs/profiling.devdocs.json index 75713ac26cd9b..10f7adf5bc3bc 100644 --- a/api_docs/profiling.devdocs.json +++ b/api_docs/profiling.devdocs.json @@ -22,7 +22,7 @@ "label": "ProfilingConfig", "description": [], "signature": [ - "{ readonly elasticsearch?: Readonly<{} & { username: string; hosts: string; password: string; }> | undefined; readonly enabled: boolean; }" + "{ readonly elasticsearch?: Readonly<{} & { username: string; password: string; hosts: string; }> | undefined; readonly enabled: boolean; }" ], "path": "x-pack/plugins/profiling/server/index.ts", "deprecated": false, diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index f3d8883c1a738..239c5576300d0 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index d900dbb11268d..e6cef13be3380 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: 2023-03-29 +date: 2023-03-30 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 b5016edf220ab..066fa08cd7d9c 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: 2023-03-29 +date: 2023-03-30 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 9f24b1dace7c5..e936078668d5d 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index 51430b3f825c1..ba2540603e9d5 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -107,7 +107,7 @@ "label": "get", "description": [], "signature": [ - "({ id, index }: GetAlertParams) => Promise> | undefined>" + "({ id, index }: GetAlertParams) => Promise> | undefined>" ], "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", "deprecated": false, @@ -325,7 +325,7 @@ "SortOptions", "[] | undefined; track_total_hits?: boolean | undefined; _source?: string[] | undefined; }) => Promise<", "SearchResponse", - ">, Record>, Record>>" ], @@ -2579,7 +2579,7 @@ "signature": [ "> & OutputOf>>>(request: TSearchRequest) => Promise<", + ", TAlertDoc = Partial> & OutputOf>>>(request: TSearchRequest) => Promise<", { "pluginId": "@kbn/es-types", "scope": "common", @@ -3216,7 +3216,7 @@ "label": "getAlertByAlertUuid", "description": [], "signature": [ - "(alertUuid: string) => Promise> & OutputOf>> | null> | null" + "(alertUuid: string) => Promise> & OutputOf>> | null> | null" ], "path": "x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.ts", "deprecated": false, @@ -3274,6 +3274,8 @@ "signature": [ "(T & ", "CommonAlertFields870", + " & ", + "RevisionField880", " & { _id: string; _index: string; })[]" ], "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", @@ -4609,7 +4611,7 @@ "label": "parseTechnicalFields", "description": [], "signature": [ - "(input: unknown, partial?: boolean) => OutputOf>" + "(input: unknown, partial?: boolean) => OutputOf>" ], "path": "x-pack/plugins/rule_registry/common/parse_technical_fields.ts", "deprecated": false, @@ -4985,7 +4987,7 @@ "label": "ParsedTechnicalFields", "description": [], "signature": [ - "{ readonly \"@timestamp\": string; readonly \"kibana.alert.rule.rule_type_id\": string; readonly \"kibana.alert.rule.consumer\": string; readonly \"kibana.alert.instance.id\": string; readonly \"kibana.alert.rule.category\": string; readonly \"kibana.alert.rule.name\": string; readonly \"kibana.alert.rule.producer\": string; readonly \"kibana.alert.rule.uuid\": string; readonly \"kibana.alert.status\": string; readonly \"kibana.alert.uuid\": string; readonly \"kibana.space_ids\": string[]; readonly \"event.action\"?: string | undefined; readonly tags?: string[] | undefined; readonly \"kibana.alert.rule.execution.uuid\"?: string | undefined; readonly \"kibana.alert.action_group\"?: string | undefined; readonly \"kibana.alert.case_ids\"?: string[] | undefined; readonly \"kibana.alert.duration.us\"?: number | undefined; readonly \"kibana.alert.end\"?: string | undefined; readonly \"kibana.alert.flapping\"?: boolean | undefined; readonly \"kibana.alert.flapping_history\"?: boolean[] | undefined; readonly \"kibana.alert.last_detected\"?: string | undefined; readonly \"kibana.alert.reason\"?: string | undefined; readonly \"kibana.alert.rule.parameters\"?: { [key: string]: unknown; } | undefined; readonly \"kibana.alert.rule.tags\"?: string[] | undefined; readonly \"kibana.alert.start\"?: string | undefined; readonly \"kibana.alert.time_range\"?: unknown; readonly \"kibana.alert.workflow_status\"?: string | undefined; readonly \"kibana.version\"?: string | undefined; readonly \"kibana.alert.risk_score\"?: number | undefined; readonly \"kibana.alert.rule.author\"?: string | undefined; readonly \"kibana.alert.rule.created_at\"?: string | undefined; readonly \"kibana.alert.rule.created_by\"?: string | undefined; readonly \"kibana.alert.rule.description\"?: string | undefined; readonly \"kibana.alert.rule.enabled\"?: string | undefined; readonly \"kibana.alert.rule.from\"?: string | undefined; readonly \"kibana.alert.rule.interval\"?: string | undefined; readonly \"kibana.alert.rule.license\"?: string | undefined; readonly \"kibana.alert.rule.note\"?: string | undefined; readonly \"kibana.alert.rule.references\"?: string[] | undefined; readonly \"kibana.alert.rule.rule_id\"?: string | undefined; readonly \"kibana.alert.rule.rule_name_override\"?: string | undefined; readonly \"kibana.alert.rule.to\"?: string | undefined; readonly \"kibana.alert.rule.type\"?: string | undefined; readonly \"kibana.alert.rule.updated_at\"?: string | undefined; readonly \"kibana.alert.rule.updated_by\"?: string | undefined; readonly \"kibana.alert.rule.version\"?: string | undefined; readonly \"kibana.alert.severity\"?: string | undefined; readonly \"kibana.alert.suppression.docs_count\"?: number | undefined; readonly \"kibana.alert.suppression.end\"?: string | undefined; readonly \"kibana.alert.suppression.terms.field\"?: string[] | undefined; readonly \"kibana.alert.suppression.start\"?: string | undefined; readonly \"kibana.alert.suppression.terms.value\"?: string[] | undefined; readonly \"kibana.alert.system_status\"?: string | undefined; readonly \"kibana.alert.workflow_reason\"?: string | undefined; readonly \"kibana.alert.workflow_user\"?: string | undefined; readonly \"ecs.version\"?: string | undefined; readonly \"event.kind\"?: string | undefined; }" + "{ readonly \"@timestamp\": string; readonly \"kibana.alert.rule.rule_type_id\": string; readonly \"kibana.alert.rule.consumer\": string; readonly \"kibana.alert.instance.id\": string; readonly \"kibana.alert.rule.category\": string; readonly \"kibana.alert.rule.name\": string; readonly \"kibana.alert.rule.producer\": string; readonly \"kibana.alert.rule.revision\": number; readonly \"kibana.alert.rule.uuid\": string; readonly \"kibana.alert.status\": string; readonly \"kibana.alert.uuid\": string; readonly \"kibana.space_ids\": string[]; readonly \"event.action\"?: string | undefined; readonly tags?: string[] | undefined; readonly \"kibana.alert.rule.execution.uuid\"?: string | undefined; readonly \"kibana.alert.action_group\"?: string | undefined; readonly \"kibana.alert.case_ids\"?: string[] | undefined; readonly \"kibana.alert.duration.us\"?: number | undefined; readonly \"kibana.alert.end\"?: string | undefined; readonly \"kibana.alert.flapping\"?: boolean | undefined; readonly \"kibana.alert.flapping_history\"?: boolean[] | undefined; readonly \"kibana.alert.last_detected\"?: string | undefined; readonly \"kibana.alert.reason\"?: string | undefined; readonly \"kibana.alert.rule.parameters\"?: { [key: string]: unknown; } | undefined; readonly \"kibana.alert.rule.tags\"?: string[] | undefined; readonly \"kibana.alert.start\"?: string | undefined; readonly \"kibana.alert.time_range\"?: unknown; readonly \"kibana.alert.workflow_status\"?: string | undefined; readonly \"kibana.version\"?: string | undefined; readonly \"kibana.alert.risk_score\"?: number | undefined; readonly \"kibana.alert.rule.author\"?: string | undefined; readonly \"kibana.alert.rule.created_at\"?: string | undefined; readonly \"kibana.alert.rule.created_by\"?: string | undefined; readonly \"kibana.alert.rule.description\"?: string | undefined; readonly \"kibana.alert.rule.enabled\"?: string | undefined; readonly \"kibana.alert.rule.from\"?: string | undefined; readonly \"kibana.alert.rule.interval\"?: string | undefined; readonly \"kibana.alert.rule.license\"?: string | undefined; readonly \"kibana.alert.rule.note\"?: string | undefined; readonly \"kibana.alert.rule.references\"?: string[] | undefined; readonly \"kibana.alert.rule.rule_id\"?: string | undefined; readonly \"kibana.alert.rule.rule_name_override\"?: string | undefined; readonly \"kibana.alert.rule.to\"?: string | undefined; readonly \"kibana.alert.rule.type\"?: string | undefined; readonly \"kibana.alert.rule.updated_at\"?: string | undefined; readonly \"kibana.alert.rule.updated_by\"?: string | undefined; readonly \"kibana.alert.rule.version\"?: string | undefined; readonly \"kibana.alert.severity\"?: string | undefined; readonly \"kibana.alert.suppression.docs_count\"?: number | undefined; readonly \"kibana.alert.suppression.end\"?: string | undefined; readonly \"kibana.alert.suppression.terms.field\"?: string[] | undefined; readonly \"kibana.alert.suppression.start\"?: string | undefined; readonly \"kibana.alert.suppression.terms.value\"?: string[] | undefined; readonly \"kibana.alert.system_status\"?: string | undefined; readonly \"kibana.alert.workflow_reason\"?: string | undefined; readonly \"kibana.alert.workflow_user\"?: string | undefined; readonly \"ecs.version\"?: string | undefined; readonly \"event.kind\"?: string | undefined; }" ], "path": "x-pack/plugins/rule_registry/common/parse_technical_fields.ts", "deprecated": false, diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index ca141c9ab3510..8da68d315255e 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.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 | |-------------------|-----------|------------------------|-----------------| -| 258 | 0 | 229 | 13 | +| 258 | 0 | 229 | 14 | ## Server diff --git a/api_docs/runtime_fields.devdocs.json b/api_docs/runtime_fields.devdocs.json index 18dcf0da938c6..bb5a3fac95347 100644 --- a/api_docs/runtime_fields.devdocs.json +++ b/api_docs/runtime_fields.devdocs.json @@ -143,7 +143,7 @@ "label": "submit", "description": [], "signature": [ - "(e?: React.MouseEvent | React.FormEvent | undefined) => Promise<{ data: ", + "(e?: React.FormEvent | React.MouseEvent | undefined) => Promise<{ data: ", { "pluginId": "runtimeFields", "scope": "public", @@ -166,7 +166,7 @@ "label": "e", "description": [], "signature": [ - "React.MouseEvent | React.FormEvent | undefined" + "React.FormEvent | React.MouseEvent | undefined" ], "path": "src/plugins/es_ui_shared/static/forms/hook_form_lib/types.ts", "deprecated": false, diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 98e7b9a2a3d79..ed4a68911b082 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: 2023-03-29 +date: 2023-03-30 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 6a3f9762cb312..321a2a83ff1c6 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: 2023-03-29 +date: 2023-03-30 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 3f659dc2cc6c7..e5a4f207fa72b 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.devdocs.json b/api_docs/saved_objects_management.devdocs.json index ebff28150cd2c..54aca570402f9 100644 --- a/api_docs/saved_objects_management.devdocs.json +++ b/api_docs/saved_objects_management.devdocs.json @@ -316,7 +316,11 @@ "section": "def-public.SavedObjectsManagementRecord", "text": "SavedObjectsManagementRecord" }, - "; headers?: string | undefined; height?: string | number | undefined; readOnly?: boolean | undefined; render?: ((value: any, record: ", + "; headers?: string | undefined; height?: string | number | undefined; readOnly?: boolean | undefined; dataType?: ", + "EuiTableDataType", + " | undefined; align?: ", + "HorizontalAlignment", + " | undefined; colSpan?: number | undefined; rowSpan?: number | undefined; valign?: \"top\" | \"bottom\" | \"middle\" | \"baseline\" | undefined; render?: ((value: any, record: ", { "pluginId": "savedObjectsManagement", "scope": "public", @@ -324,11 +328,7 @@ "section": "def-public.SavedObjectsManagementRecord", "text": "SavedObjectsManagementRecord" }, - ") => React.ReactNode) | undefined; align?: ", - "HorizontalAlignment", - " | undefined; colSpan?: number | undefined; rowSpan?: number | undefined; valign?: \"top\" | \"bottom\" | \"middle\" | \"baseline\" | undefined; dataType?: ", - "EuiTableDataType", - " | undefined; isExpander?: boolean | undefined; textOnly?: boolean | undefined; truncateText?: boolean | undefined; mobileOptions?: (Omit<", + ") => React.ReactNode) | undefined; isExpander?: boolean | undefined; textOnly?: boolean | undefined; truncateText?: boolean | undefined; mobileOptions?: (Omit<", "EuiTableRowCellMobileOptionsShape", ", \"render\"> & { render?: ((item: ", { @@ -739,7 +739,7 @@ "label": "namespaceType", "description": [], "signature": [ - "\"single\" | \"multiple\" | \"agnostic\" | \"multiple-isolated\"" + "\"multiple\" | \"single\" | \"agnostic\" | \"multiple-isolated\"" ], "path": "src/plugins/saved_objects_management/common/types/v1.ts", "deprecated": false, @@ -2253,7 +2253,7 @@ "label": "namespaceType", "description": [], "signature": [ - "\"single\" | \"multiple\" | \"agnostic\" | \"multiple-isolated\"" + "\"multiple\" | \"single\" | \"agnostic\" | \"multiple-isolated\"" ], "path": "src/plugins/saved_objects_management/common/types/v1.ts", "deprecated": false, diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index f6a6b40d1b4e6..8d421eab2cdc0 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: 2023-03-29 +date: 2023-03-30 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 e43ad74637bcd..d37905bb8de8c 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.devdocs.json b/api_docs/saved_objects_tagging_oss.devdocs.json index 1808b8d68351c..813128441fbb2 100644 --- a/api_docs/saved_objects_tagging_oss.devdocs.json +++ b/api_docs/saved_objects_tagging_oss.devdocs.json @@ -1369,7 +1369,7 @@ "section": "def-common.Tag", "text": "Tag" }, - " | { type: \"__create_option__\"; }>, \"options\" | \"prepend\" | \"append\" | \"selectedOptions\" | \"fullWidth\" | \"compressed\" | \"async\" | \"isClearable\" | \"singleSelection\" | \"sortMatchesBy\"> & Partial, \"options\" | \"prepend\" | \"append\" | \"selectedOptions\" | \"async\" | \"fullWidth\" | \"compressed\" | \"isClearable\" | \"singleSelection\" | \"sortMatchesBy\"> & Partial; isLoading: boolean; }; columns: ", "EuiDataGridColumn", diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index cc1fea06b5375..37c375800159e 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: 2023-03-29 +date: 2023-03-30 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 321d397ed0eb2..601b8c2427197 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: 2023-03-29 +date: 2023-03-30 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 3c733a2d38f5d..a526076faa54f 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index e7ba07b9ef8a1..2743904efbf84 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 493fae58e8c66..055df54ce7e10 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: 2023-03-29 +date: 2023-03-30 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 94ddab164021d..5e124567ab2b7 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: 2023-03-29 +date: 2023-03-30 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 8ac0747c6252b..1289efa973eb6 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index a60dfa0419f3b..e862b78b3f14a 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: 2023-03-29 +date: 2023-03-30 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 7ad7cb06af8ab..26875b2be082f 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: 2023-03-29 +date: 2023-03-30 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 bef600b3ca32f..e5b74b968203d 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: 2023-03-29 +date: 2023-03-30 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 fe4072f66b0aa..1a9bc627b0a1b 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: 2023-03-29 +date: 2023-03-30 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 a79c24105a603..29a014fbd785f 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: 2023-03-29 +date: 2023-03-30 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 624682d213a75..486b6018278c9 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: 2023-03-29 +date: 2023-03-30 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 f346e082604dd..1978426bf707c 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: 2023-03-29 +date: 2023-03-30 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 fcfb517fd1168..b86d2c461d707 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: 2023-03-29 +date: 2023-03-30 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 8a34adde60f2b..4166bc0f46277 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: 2023-03-29 +date: 2023-03-30 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 71a624b6f0d5f..8bd6e86ac06a1 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: 2023-03-29 +date: 2023-03-30 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 6030e10230d4e..5ab7346ff91d5 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: 2023-03-29 +date: 2023-03-30 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 5ef156ae148d7..1f20e3dfe7dc8 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: 2023-03-29 +date: 2023-03-30 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 0ceae25e06630..e19cb1c1d0c9d 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: 2023-03-29 +date: 2023-03-30 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 47e895eca1098..9ae7e505ce73a 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: 2023-03-29 +date: 2023-03-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/apm/agent-configuration.asciidoc b/docs/apm/agent-configuration.asciidoc index ac9ce84e78c3e..4132e331d734a 100644 --- a/docs/apm/agent-configuration.asciidoc +++ b/docs/apm/agent-configuration.asciidoc @@ -6,11 +6,11 @@ Configure APM agents with central config ++++ -APM Agent configuration allows you to fine-tune your agent configuration from within the APM app. +APM Agent configuration allows you to fine-tune your APM agent configuration from within the APM app. Changes are automatically propagated to your APM agents, so there's no need to redeploy. To get started, choose the services and environments you wish to configure. -The APM app will let you know when your agents have applied your configurations. +The APM app will let you know when your APM agents have applied your configurations. [role="screenshot"] image::apm/images/apm-agent-configuration.png[APM Agent configuration in Kibana] @@ -18,28 +18,38 @@ image::apm/images/apm-agent-configuration.png[APM Agent configuration in Kibana] [float] ==== Precedence -Configurations set from the APM app take precedence over configurations set locally in each Agent. +Configurations set from the APM app take precedence over configurations set locally in each APM agent. However, if APM Server is slow to respond, is offline, reports an error, etc., APM agents will use local defaults until they're able to update the configuration. -For this reason, it is still essential to set custom default configurations locally in each of your agents. +For this reason, it is still essential to set custom default configurations locally in each of your APM agents. [float] ==== Supported configurations -Each Agent has a list of supported configurations. +Each APM agent has a list of supported configurations. After selecting a Service name and environment in the APM app, a list of all supported configuration options, including descriptions and default values, will be displayed. -Supported configurations are also tagged with the image:./images/dynamic-config.svg[] badge in each Agent's configuration reference: +Supported configurations are also tagged with the image:./images/dynamic-config.svg[] badge in each APM agent's configuration reference: [horizontal] -Go Agent:: {apm-go-ref}/configuration.html[Configuration reference] +Go agent:: {apm-go-ref}/configuration.html[Configuration reference] iOS agent:: _Not yet supported_ -Java Agent:: {apm-java-ref}/configuration.html[Configuration reference] -.NET Agent:: {apm-dotnet-ref}/configuration.html[Configuration reference] -Node.js Agent:: {apm-node-ref}/configuration.html[Configuration reference] -PHP Agent:: {apm-php-ref}/configuration.html[Configuration reference] -Python Agent:: {apm-py-ref}/configuration.html[Configuration reference] -Ruby Agent:: {apm-ruby-ref}/configuration.html[Configuration reference] -Real User Monitoring (RUM) Agent:: {apm-rum-ref}/configuration.html[Configuration reference] +Java agent:: {apm-java-ref}/configuration.html[Configuration reference] +.NET agent:: {apm-dotnet-ref}/configuration.html[Configuration reference] +Node.js agent:: {apm-node-ref}/configuration.html[Configuration reference] +PHP agent:: {apm-php-ref}/configuration.html[Configuration reference] +Python agent:: {apm-py-ref}/configuration.html[Configuration reference] +Ruby agent:: {apm-ruby-ref}/configuration.html[Configuration reference] +Real User Monitoring (RUM) agent:: {apm-rum-ref}/configuration.html[Configuration reference] + +[float] +==== APM Server configuration + +For most users, APM agent configuration should work out-of-the-box. +If you run into trouble, it may be because you're not using the {es} output, +or because your {es} credentials don't have sufficient privileges. + +See {apm-guide-ref}/configure-agent-config.html[configure APM agent configuration] +to learn how to configure APM Server to avoid these problems. diff --git a/docs/apm/api.asciidoc b/docs/apm/api.asciidoc index 1e0788cb56768..fb672b2884af2 100644 --- a/docs/apm/api.asciidoc +++ b/docs/apm/api.asciidoc @@ -87,15 +87,15 @@ which you can use to automate certain aspects of configuring and deploying Kiban [[agent-config-api]] === Agent Configuration API -The Agent configuration API allows you to fine-tune your APM agent configuration, +The APM agent configuration API allows you to fine-tune your APM agent configuration, without needing to redeploy your application. -The following Agent configuration APIs are available: +The following APM agent configuration APIs are available: -* <> to create or update an Agent configuration -* <> to delete an Agent configuration. -* <> to list all Agent configurations. -* <> to search for an Agent configuration. +* <> to create or update an APM agent configuration +* <> to delete an APM agent configuration. +* <> to list all APM agent configurations. +* <> to search for an APM agent configuration. [float] [[use-agent-config-api]] @@ -307,7 +307,7 @@ GET /api/apm/settings/agent-configuration ====== `etag`:: -(required) etag is sent by the agent to indicate the etag of the last successfully applied configuration. If the etag matches an existing configuration its `applied_by_agent` property will be set to `true`. Every time a configuration is edited `applied_by_agent` is reset to `false`. +(required) etag is sent by the APM agent to indicate the etag of the last successfully applied configuration. If the etag matches an existing configuration its `applied_by_agent` property will be set to `true`. Every time a configuration is edited `applied_by_agent` is reset to `false`. [[apm-search-config-body]] ===== Response body @@ -719,11 +719,11 @@ curl -X DELETE "http://localhost:5601/api/apm/sourcemaps/apm:foo-1.0.0-644fd5a9" [[agent-key-api]] === APM agent Key API -The Agent Key API allows you to configure agent keys to authorize requests from APM agents to the APM Server. +The APM agent Key API allows you to configure APM agent keys to authorize requests from APM agents to the APM Server. -The following Agent key APIs are available: +The following APM agent key APIs are available: -* <> to create an agent key +* <> to create an APM agent key [float] [[use-agent-key-api]] @@ -778,13 +778,13 @@ POST /_security/role/apm_agent_key_user ===== Request body `name`:: -(required, string) Name of the agent key. +(required, string) Name of the APM agent key. `privileges`:: (required, array) APM agent key privileges. It can take one or more of the following values: - - `event:write`. Required for ingesting agent events. - - `config_agent:read`. Required for agents to read agent configuration remotely. + - `event:write`. Required for ingesting APM agent events. + - `config_agent:read`. Required for APM agents to read agent configuration remotely. [[apm-agent-key-create-example]] ===== Example diff --git a/docs/apm/apm-app-users.asciidoc b/docs/apm/apm-app-users.asciidoc index 01ecdafce4457..0df169b5e8b10 100644 --- a/docs/apm/apm-app-users.asciidoc +++ b/docs/apm/apm-app-users.asciidoc @@ -175,7 +175,7 @@ See <>. [[apm-app-central-config-manager]] ==== Central configuration manager -Central configuration users need to be able to view, create, update, and delete Agent configurations. +Central configuration users need to be able to view, create, update, and delete APM agent configurations. . Create a new role, named something like `central-config-manager`, and assign the following privileges: + diff --git a/docs/apm/errors.asciidoc b/docs/apm/errors.asciidoc index c47604df03c99..5cc9aebc2e220 100644 --- a/docs/apm/errors.asciidoc +++ b/docs/apm/errors.asciidoc @@ -20,14 +20,16 @@ Selecting an error group ID or error message brings you to the *Error group*. [role="screenshot"] image::apm/images/apm-error-group.png[APM Error group] -Here, you'll see the error message, culprit, and the number of occurrences over time. +The error group details page visualizes the number of error occurrences over time and compared to a recent time range. +This allows you to quickly determine if the error rate is changing or remaining constant. +You'll also see the top 5 affected transactions--enabling you to quickly narrow down which transactions are most impacted +by the selected error. -Further down, you'll see the Error occurrence table. -This table shows the details of a sampled error within this group. +Further down, you'll see an Error sample. The error shown is always the most recent to occur. +The sample includes the exception message, culprit, stack trace where the error occurred, +and additional contextual information to help debug the issue--all of which can be copied with the click of a button. -Each error occurrence features a breakdown of the exception, including the stack trace from when the error occurred, -and additional contextual information to help debug the issue. In some cases, you might also see a Transaction sample ID. This feature allows you to make a connection between the errors and transactions, by linking you to the specific transaction where the error occurred. diff --git a/docs/apm/filters.asciidoc b/docs/apm/filters.asciidoc index c0ea81c87378b..8ff39e3c1dcf0 100644 --- a/docs/apm/filters.asciidoc +++ b/docs/apm/filters.asciidoc @@ -32,8 +32,8 @@ It allows you to view only relevant data and is especially useful for separating By default, all environments are displayed. If there are no environment options, you'll see "not defined". Service environments are defined when configuring your APM agents. -It's vital to be consistent when naming environments in your agents. -To learn how to configure service environments, see the specific agent documentation: +It's vital to be consistent when naming environments in your APM agents. +To learn how to configure service environments, see the specific APM agent documentation: * *Go:* {apm-go-ref}/configuration.html#config-environment[`ELASTIC_APM_ENVIRONMENT`] * *iOS agent:* _Not yet supported_ diff --git a/docs/apm/getting-started.asciidoc b/docs/apm/getting-started.asciidoc index 2b4651a9fce97..22830a845e8ed 100644 --- a/docs/apm/getting-started.asciidoc +++ b/docs/apm/getting-started.asciidoc @@ -35,6 +35,7 @@ start with: Notice something awry? Select a service or trace and dive deeper with: * <> +* <> * <> * <> * <> @@ -53,6 +54,8 @@ include::service-maps.asciidoc[] include::service-overview.asciidoc[] +include::mobile-service.asciidoc[] + include::transactions.asciidoc[] include::spans.asciidoc[] diff --git a/docs/apm/images/apm-error-group.png b/docs/apm/images/apm-error-group.png index 1326e97f757d6..22bceb9d8111b 100644 Binary files a/docs/apm/images/apm-error-group.png and b/docs/apm/images/apm-error-group.png differ diff --git a/docs/apm/images/apm-errors-overview.png b/docs/apm/images/apm-errors-overview.png index 425464a1ffd21..c390b7ddc009d 100644 Binary files a/docs/apm/images/apm-errors-overview.png and b/docs/apm/images/apm-errors-overview.png differ diff --git a/docs/apm/images/apm-service-group.png b/docs/apm/images/apm-service-group.png index 275b5a8662123..44a0191411e3e 100644 Binary files a/docs/apm/images/apm-service-group.png and b/docs/apm/images/apm-service-group.png differ diff --git a/docs/apm/images/apm-services-overview.png b/docs/apm/images/apm-services-overview.png index 271c0347aa53e..97c46cb756b28 100644 Binary files a/docs/apm/images/apm-services-overview.png and b/docs/apm/images/apm-services-overview.png differ diff --git a/docs/apm/images/mobile-location.png b/docs/apm/images/mobile-location.png new file mode 100644 index 0000000000000..35b0d91a2d2bf Binary files /dev/null and b/docs/apm/images/mobile-location.png differ diff --git a/docs/apm/images/mobile-most-used.png b/docs/apm/images/mobile-most-used.png new file mode 100644 index 0000000000000..24b29f95d4742 Binary files /dev/null and b/docs/apm/images/mobile-most-used.png differ diff --git a/docs/apm/images/mobile-tp.png b/docs/apm/images/mobile-tp.png new file mode 100644 index 0000000000000..81ce267fb858e Binary files /dev/null and b/docs/apm/images/mobile-tp.png differ diff --git a/docs/apm/images/service-maps-java.png b/docs/apm/images/service-maps-java.png index 25600b690a5bd..aa8e5dc5056cd 100644 Binary files a/docs/apm/images/service-maps-java.png and b/docs/apm/images/service-maps-java.png differ diff --git a/docs/apm/images/service-maps.png b/docs/apm/images/service-maps.png index 511d8401b22f3..3d8d48bd957ae 100644 Binary files a/docs/apm/images/service-maps.png and b/docs/apm/images/service-maps.png differ diff --git a/docs/apm/index.asciidoc b/docs/apm/index.asciidoc index 385d9921ae2b0..2674ecf2a13b8 100644 --- a/docs/apm/index.asciidoc +++ b/docs/apm/index.asciidoc @@ -7,7 +7,7 @@ The APM app in {kib} allows you to monitor your software services and applications in real-time; visualize detailed performance information on your services, identify and analyze errors, -and monitor host-level and agent-specific metrics like JVM and Go runtime metrics. +and monitor host-level and APM agent-specific metrics like JVM and Go runtime metrics. [float] [[apm-bottlenecks]] diff --git a/docs/apm/metrics.asciidoc b/docs/apm/metrics.asciidoc index 8adcf315d33d3..c8f2a9c552720 100644 --- a/docs/apm/metrics.asciidoc +++ b/docs/apm/metrics.asciidoc @@ -2,7 +2,7 @@ [[metrics]] === Metrics -The *Metrics* overview provides agent-specific metrics, +The *Metrics* overview provides APM agent-specific metrics, which lets you perform more in-depth root cause analysis investigations within the APM app. If you're experiencing a problem with your service, you can use this page to attempt to find the underlying cause. @@ -11,7 +11,7 @@ For example, you might be able to correlate a high number of errors with a long [role="screenshot"] image::apm/images/apm-metrics.png[Example view of the Metrics overview in APM app in Kibana] -If you're using the Java Agent, you can view metrics for each JVM. +If you're using the Java APM agent, you can view metrics for each JVM. [role="screenshot"] image::apm/images/jvm-metrics-overview.png[Example view of the Metrics overview for the Java Agent] diff --git a/docs/apm/mobile-service.asciidoc b/docs/apm/mobile-service.asciidoc new file mode 100644 index 0000000000000..aca4e4e659818 --- /dev/null +++ b/docs/apm/mobile-service.asciidoc @@ -0,0 +1,59 @@ +[role="xpack"] +[[mobile-service-overview]] +=== Mobile service overview + +Selecting a mobile service brings you to the *Mobile service overview*. +The *Mobile service overview* contains a wide variety of charts and tables that provide +high-level visibility into how a mobile service is performing for your users--enabling you +to make data-driven decisions about how to improve your user experience. + +For example, see: + +* Crash Rate (Crashes per minute) -- coming soon +* Slowest App load time -- coming soon +* Number of sessions +* Number of HTTP requests +* Map showing the total number of HTTP requests based on country and region +* Most used devices, network connection type, OS version, and app version +* Latency, throughput, and errors over time +* Service dependencies + +All of these metrics & insights can help SREs and developers better understand the health +of their mobile application environment and the impact of backend errors and bottlenecks on end-user experience. + +[discrete] +[[mobile-service-stats]] +=== Quick stats + +Understand the impact of slow application load times and variations in application crash rate on user traffic (coming soon). +Visualize session and HTTP trends, and see where your users are located--enabling you to optimize your infrastructure deployment and routing topology. + +[role="screenshot"] +image::apm/images/mobile-location.png[mobile service overview centered on location map] + +[discrete] +[[mobile-service-most-used]] +=== Most used + +Optimize your end-user experience and your application QA strategy based on your most used device models and operating system versions. + +[role="screenshot"] +image::apm/images/mobile-most-used.png[mobile service overview showing most used devices, network, OS, and app version] + + +[discrete] +[[mobile-throughput-transactions]] +=== Throughput and transactions + +include::./service-overview.asciidoc[tag=throughput-transactions] + +[discrete] +[[mobile-error-and-dependencies]] +=== Failed transaction rate and dependencies + +include::./service-overview.asciidoc[tag=ftr] + +include::./service-overview.asciidoc[tag=dependencies] + +[role="screenshot"] +image::apm/images/mobile-tp.png[mobile service overview showing latency, throughput, and errors] \ No newline at end of file diff --git a/docs/apm/service-maps.asciidoc b/docs/apm/service-maps.asciidoc index 90f1213ee0049..5a5927a997f64 100644 --- a/docs/apm/service-maps.asciidoc +++ b/docs/apm/service-maps.asciidoc @@ -55,19 +55,20 @@ By default, all instrumented services and connections are shown. Whether you're onboarding a new engineer, or just trying to grasp the big picture, drag things around, zoom in and out, and begin to visualize how your services are connected. +Customize what the service map displays using either the query bar or the environment selector. +The query bar enables you to use <> to customize the service map based on your needs. +The environment selector allows you to narrow displayed results to a specific environment. +This can be useful if you have two or more services, in separate environments, but with the same name. +Use the environment drop-down to only see the data you're interested in, like `dev` or `production`. + If there's a specific service that interests you, select that service to highlight its connections. Clicking **Focus map** will refocus the map on that specific service and lock the connection highlighting. From here, select **Service Details**, or click on the **Transaction** tab to jump to the Transaction overview for the selected service. You can also use the tabs at the top of the page to easily jump to the **Errors** or **Metrics** overview. -Filter out your maps by picking the environment from the environment drop-down filter. -This can be useful if you have two or more services, in separate environments, but with the same name. -Use the environment drop-down to only see the data you're interested in, like `dev` or `production`. -Additional filters are not currently available for service maps. - [role="screenshot"] -image::apm/images/service-maps-java.png[Example view of service maps with Java highlighted in the APM app in Kibana] +image::apm/images/service-maps-java.png[Example view of service maps in the APM app in Kibana] [float] [[service-map-anomaly-detection]] @@ -95,16 +96,16 @@ To learn how to create a machine learning job, see <> brings you to the *Service overview*. +Selecting a non-mobile <> brings you to the *Service overview*. The *Service overview* contains a wide variety of charts and tables that provide high-level visibility into how a service is performing across your infrastructure: -* Service details like service version, runtime version, framework, and agent name and version +* Service details like service version, runtime version, framework, and APM agent name and version * Container and orchestration information * Cloud provider, machine type, service name, region, and availability zone * Serverless function names and event trigger type @@ -61,6 +61,7 @@ image::apm/images/latency.png[Service latency] [[service-throughput-transactions]] === Throughput and transactions +// tag::throughput-transactions[] The *Throughput* chart visualizes the average number of transactions per minute for the selected service. The *Transactions* table displays a list of _transaction groups_ for the @@ -73,11 +74,13 @@ list of similar transactions on the <> page [role="screenshot"] image::apm/images/traffic-transactions.png[Traffic and transactions] +// end::throughput-transactions[] [discrete] [[service-error-rates]] === Failed transaction rate and errors +// tag::ftr[] The failed transaction rate represents the percentage of failed transactions from the perspective of the selected service. It's useful for visualizing unexpected increases, decreases, or irregular patterns in a service's transactions. @@ -91,6 +94,7 @@ These spans will set `event.outcome=failure` and increase the failed transaction If there is no HTTP status, both transactions and spans are considered successful unless an error is reported. ==== +// end::ftr[] The *Errors* table provides a high-level view of each error message when it first and last occurred, along with the total number of occurrences. This makes it very easy to quickly see which errors affect @@ -105,10 +109,11 @@ image::apm/images/error-rate.png[failed transaction rate and errors] The *Time spent by span type* chart visualizes each span type's average duration and helps you determine which spans could be slowing down transactions. The "app" label displayed under the -chart indicates that something was happening within the application. This could signal that the +chart indicates that something was happening within the application. This could signal that the APM agent does not have auto-instrumentation for whatever was happening during that time or that the time was spent in the application code and not in database or external requests. +// tag::dependencies[] The *Dependencies* table displays a list of downstream services or external connections relevant to the service at the selected time range. The table displays latency, throughput, failed transaction rate, and the impact of each dependency. By default, dependencies are sorted by _Impact_ to show the most used and the slowest dependency. @@ -119,14 +124,20 @@ requires an agent version ≥ v5.6.3. [role="screenshot"] image::apm/images/spans-dependencies.png[Span type duration and dependencies] +// end::dependencies[] [discrete] [[service-cold-start]] === Cold start rate -The cold start rate chart is specific to serverless services. -It displays the percentage of requests that trigger a cold start of a serverless function. -See <> for more information. +The cold start rate chart is specific to serverless services, and displays the +percentage of requests that trigger a cold start of a serverless function. +A cold start occurs when a serverless function has not been used for a certain period of time. +Analyzing the cold start rate can be useful for deciding how much memory to allocate to a function, +or when to remove a large dependency. + +The cold start rate chart is currently supported for <> +functions and Azure functions. [role="screenshot"] image::apm/images/lambda-cold-start.png[lambda cold start graph] @@ -157,7 +168,7 @@ image::apm/images/metadata-icons.png[Service metadata] * Service version * Runtime name and version * Framework name -* Agent name and version +* APM agent name and version *Container information* diff --git a/docs/apm/set-up.asciidoc b/docs/apm/set-up.asciidoc index 481ac52d8ffdc..c049fdd49ba6c 100644 --- a/docs/apm/set-up.asciidoc +++ b/docs/apm/set-up.asciidoc @@ -8,11 +8,7 @@ APM is available via the navigation sidebar in {Kib}. If you have not already installed and configured Elastic APM, -follow the three steps on the *Add data* page to get started: - -. Start APM Server -. Add APM agents -. Load Kibana objects +follow the steps on the *Add data* page to get started. [role="screenshot"] image::apm/images/apm-setup.png[Installation instructions on the APM page in Kibana] diff --git a/docs/apm/spans.asciidoc b/docs/apm/spans.asciidoc index afe87efc0df1e..5b23e69b18c6b 100644 --- a/docs/apm/spans.asciidoc +++ b/docs/apm/spans.asciidoc @@ -23,6 +23,22 @@ Each span has a type and is defined by a different color in the timeline/waterfa [role="screenshot"] image::apm/images/apm-span-detail.png[Example view of a span detail in the APM app in Kibana] +[float] +[[trace-sample-investigate]] +==== Investigate + +The trace sample timeline features an **Investigate** button which provides a quick way to jump +to other areas of the Elastic Observability UI while maintaining the context of the currently selected trace sample. +For example, quickly view: + +* logs and metrics for the selected pod +* logs and metrics for the selected host +* trace logs for the selected `trace.id` +* uptime status of the selected domain +* the <> filtered by the selected trace +* the selected transaction in <> +* your <> + [float] [[distributed-tracing]] ==== Distributed tracing diff --git a/docs/apm/storage-explorer.asciidoc b/docs/apm/storage-explorer.asciidoc index 545e9e35f0e0f..c82c43ead2b5f 100644 --- a/docs/apm/storage-explorer.asciidoc +++ b/docs/apm/storage-explorer.asciidoc @@ -74,7 +74,7 @@ tune the APM agent or agents that are collecting the data. You can disable the collection of specific metrics with the **disable metrics** configuration. Or, you can set the **metrics interval** to zero seconds to deactivate metrics entirely. Most APM agents support both options. -See the relevant {apm-agents-ref}[agent configuration options] for more details. +See the relevant {apm-agents-ref}[APM agent configuration options] for more details. [float] ===== Reduce the number of errors diff --git a/docs/apm/transactions.asciidoc b/docs/apm/transactions.asciidoc index 8a0cc75bf0c62..307213e44fa6e 100644 --- a/docs/apm/transactions.asciidoc +++ b/docs/apm/transactions.asciidoc @@ -44,7 +44,7 @@ For example, is your app spending time in external calls, database processing, o + The time a transaction took to complete is also recorded and displayed on the chart under the "app" label. "app" indicates that something was happening within the application, but we're not sure exactly what. -This could be a sign that the agent does not have auto-instrumentation for whatever was happening during that time. +This could be a sign that the APM agent does not have auto-instrumentation for whatever was happening during that time. + It's important to note that if you have asynchronous spans, the sum of all span times may exceed the duration of the transaction. @@ -71,7 +71,7 @@ If there's a particular endpoint you're worried about, you can click on it to vi [IMPORTANT] ==== If you only see one route in the Transactions table, or if you have transactions named "unknown route", -it could be a symptom that the agent either wasn't installed correctly or doesn't support your framework. +it could be a symptom that the APM agent either wasn't installed correctly or doesn't support your framework. For further details, including troubleshooting and custom implementation instructions, refer to the documentation for each {apm-agents-ref}[APM Agent] you've implemented. @@ -81,7 +81,7 @@ refer to the documentation for each {apm-agents-ref}[APM Agent] you've implement [[rum-transaction-overview]] === RUM Transaction overview -The transaction overview page is customized for the JavaScript RUM Agent. +The transaction overview page is customized for the JavaScript RUM agent. Specifically, the page highlights *page load times* for your service: [role="screenshot"] @@ -144,13 +144,13 @@ NOTE: More information on timeline waterfalls is available in <>. Learn more about a trace sample in the *Metadata* tab: -* Labels - Custom labels added by agents +* Labels - Custom labels added by APM agents * HTTP request/response information * Host information * Container information -* Service - The service/application runtime, agent, name, etc.. +* Service - The service/application runtime, APM agent, name, etc.. * Process - The process id that served up the request. -* Agent information +* APM agent information * URL * User - Requires additional configuration, but allows you to see which user experienced the current transaction. * FaaS information, like cold start, AWS request ID, trigger type, and trigger request ID diff --git a/docs/apm/troubleshooting.asciidoc b/docs/apm/troubleshooting.asciidoc index 74b95040a238c..c4b0994fdc533 100644 --- a/docs/apm/troubleshooting.asciidoc +++ b/docs/apm/troubleshooting.asciidoc @@ -58,20 +58,20 @@ To force a rollover, use the {ref}/indices-rollover-index.html[rollover API] to [[troubleshooting-too-many-transactions]] === Too many unique transaction names -Transaction names are defined in each APM Agent; when an Agent supports a framework, +Transaction names are defined in each APM agent; when an APM agent supports a framework, it includes logic for naming the transactions that the framework creates. -In some cases though, like when using an Agent's API to create custom transactions, +In some cases though, like when using an APM agent's API to create custom transactions, it is up to the user to define a pattern for transaction naming. When transactions are named incorrectly, each unique URL can be associated with a unique transaction group—causing an explosion in the number of transaction groups per service, and leading to inaccuracies in the APM app. To fix a large number of unique transaction names, -you need to change how you are using the Agent API to name your transactions. +you need to change how you are using the APM agent API to name your transactions. To do this, ensure you are **not** naming based on parameters that can change. For example, user ids, product ids, order numbers, query parameters, etc., should be stripped away, and commonality should be found between your unique URLs. -Let's look at an example from the RUM Agent documentation. Here are a few URLs you might find on Elastic.co: +Let's look at an example from the RUM agent documentation. Here are a few URLs you might find on Elastic.co: [source,yml] ---- @@ -109,14 +109,14 @@ You will see this warning if your results have more than `1000` unique transacti **More information** -While this can happen with any APM Agent, it typically occurs with the RUM Agent. -For more information on how to correctly set `transaction.name` in the RUM Agent, +While this can happen with any APM agent, it typically occurs with the RUM agent. +For more information on how to correctly set `transaction.name` in the RUM agent, see {apm-rum-ref}/custom-transaction-name.html[custom initial page load transaction names]. -The RUM Agent can also set the `transaction.name` when observing for transaction events. +The RUM agent can also set the `transaction.name` when observing for transaction events. See {apm-rum-ref}/agent-api.html#observe[`apm.observe()`] for more information. -If your problem is occurring in a different Agent, the tips above still apply. +If your problem is occurring in a different APM agent, the tips above still apply. See the relevant {apm-agents-ref}[Agent API documentation] to adjust how you're naming your transactions. [float] @@ -128,17 +128,17 @@ when the transactions in your services are named correctly. If you're seeing "GET unknown route" or "unknown route" in the APM app, it could be a sign that something isn't working as it should. -Elastic APM Agents come with built-in support for popular frameworks out-of-the-box. -This means, among other things, that the Agent will try to automatically name HTTP requests. -As an example, the Node.js Agent uses the route that handled the request, while the Java Agent uses the Servlet name. +Elastic APM agents come with built-in support for popular frameworks out-of-the-box. +This means, among other things, that the APM agent will try to automatically name HTTP requests. +As an example, the Node.js agent uses the route that handled the request, while the Java agent uses the Servlet name. -"Unknown route" indicates that the Agent can't determine what to name the request, -perhaps because the technology you're using isn't supported, the Agent has been installed incorrectly, -or because something is happening to the request that the Agent doesn't understand. +"Unknown route" indicates that the APM agent can't determine what to name the request, +perhaps because the technology you're using isn't supported, the agent has been installed incorrectly, +or because something is happening to the request that the agent doesn't understand. -To resolve this, you'll need to head over to the relevant {apm-agents-ref}[Agent documentation]. -Specifically, view the Agent's supported technologies page. -You can also use the Agent's public API to manually set a name for the transaction. +To resolve this, you'll need to head over to the relevant {apm-agents-ref}[APM agent documentation]. +Specifically, view the agent's supported technologies page. +You can also use the agent's public API to manually set a name for the transaction. [float] [[troubleshooting-fields-unsearchable]] @@ -148,7 +148,7 @@ In Elasticsearch, index templates are used to define settings and mappings that The recommended index templates for APM are installed by {fleet} when the Elastic APM integration is installed. These templates, by default, enable and disable indexing on certain fields. -As an example, some agents store cookie values in `http.request.cookies`. +As an example, some APM agents store cookie values in `http.request.cookies`. Since `http.request` has disabled dynamic indexing, and `http.request.cookies` is not declared in a custom mapping, the values in `http.request.cookies` are not indexed and thus not searchable. @@ -187,5 +187,5 @@ This setting is necessary, for example, for cross-origin requests. If you have a basic web application that provides data via an API on `localhost:4000`, and serves HTML from `localhost:4001`, you'd need to set `distributedTracingOrigins: ['https://localhost:4000']` to ensure the origin is monitored as a part of distributed tracing. -In other words, `distributedTracingOrigins` is consulted prior to the agent adding the +In other words, `distributedTracingOrigins` is consulted prior to the APM agent adding the distributed tracing `traceparent` header to each request. diff --git a/package.json b/package.json index 8c75cc4dbb01f..1742a37fc3bfe 100644 --- a/package.json +++ b/package.json @@ -879,7 +879,6 @@ "react-router-config": "^5.1.1", "react-router-dom": "^5.2.0", "react-shortcuts": "^2.1.0", - "react-sizeme": "^3.0.2", "react-syntax-highlighter": "^15.3.1", "react-tiny-virtual-list": "^2.2.0", "react-use": "^15.3.8", diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts b/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts index 54fb3ed083105..6fe5feceb5cbe 100644 --- a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts +++ b/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.test.ts @@ -78,6 +78,11 @@ const mockedResponse: StatusResponse = { }, event_loop_delay: 1, event_loop_delay_histogram: mocked.createHistogram(), + event_loop_utilization: { + active: 1, + idle: 1, + utilization: 1, + }, uptime_in_millis: 1, }, processes: [ @@ -93,6 +98,11 @@ const mockedResponse: StatusResponse = { }, event_loop_delay: 1, event_loop_delay_histogram: mocked.createHistogram(), + event_loop_utilization: { + active: 1, + idle: 1, + utilization: 1, + }, uptime_in_millis: 1, }, ], @@ -232,15 +242,15 @@ describe('response processing', () => { const data = await loadStatus({ http, notifications }); const names = data.metrics.map((m) => m.name); expect(names).toEqual([ - 'Heap total', - 'Heap used', + 'Heap used out of 976.56 KB', 'Requests per second', + 'Utilization (active: 1.00 / idle: 1.00)', 'Load', 'Delay', 'Response time avg', ]); const values = data.metrics.map((m) => m.value); - expect(values).toEqual([1000000, 100, 400, [4.1, 2.1, 0.1], 1, 4000]); + expect(values).toEqual([100, 400, 1, [4.1, 2.1, 0.1], 1, 4000]); }); test('adds meta details to Load, Delay and Response time', async () => { diff --git a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.ts b/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.ts index c3ebd9923e2a8..6672786c72a10 100644 --- a/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.ts +++ b/packages/core/apps/core-apps-browser-internal/src/status/lib/load_status.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import numeral from '@elastic/numeral'; import { i18n } from '@kbn/i18n'; import type { HttpSetup } from '@kbn/core-http-browser'; import type { NotificationsSetup } from '@kbn/core-notifications-browser'; @@ -57,16 +58,10 @@ function formatMetrics({ metrics }: StatusResponse): Metric[] { } return [ - { - name: i18n.translate('core.statusPage.metricsTiles.columns.heapTotalHeader', { - defaultMessage: 'Heap total', - }), - value: metrics.process.memory.heap.size_limit, - type: 'byte', - }, { name: i18n.translate('core.statusPage.metricsTiles.columns.heapUsedHeader', { - defaultMessage: 'Heap used', + defaultMessage: 'Heap used out of {heapTotal}', + values: { heapTotal: numeral(metrics.process.memory.heap.size_limit).format('0.00 b') }, }), value: metrics.process.memory.heap.used_in_bytes, type: 'byte', @@ -78,6 +73,17 @@ function formatMetrics({ metrics }: StatusResponse): Metric[] { value: (metrics.requests.total * 1000) / metrics.collection_interval_in_millis, type: 'float', }, + { + name: i18n.translate('core.statusPage.metricsTiles.columns.utilizationHeader', { + defaultMessage: 'Utilization (active: {active} / idle: {idle})', + values: { + active: numeral(metrics.process.event_loop_utilization.active).format('0.00'), + idle: numeral(metrics.process.event_loop_utilization.idle).format('0.00'), + }, + }), + value: metrics.process.event_loop_utilization.utilization, + type: 'float', + }, { name: i18n.translate('core.statusPage.metricsTiles.columns.loadHeader', { defaultMessage: 'Load', diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/src/event_loop_utilization_monitor.test.mocks.ts b/packages/core/metrics/core-metrics-collectors-server-internal/src/event_loop_utilization_monitor.test.mocks.ts new file mode 100644 index 0000000000000..b5dfd75b3196e --- /dev/null +++ b/packages/core/metrics/core-metrics-collectors-server-internal/src/event_loop_utilization_monitor.test.mocks.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 eventLoopUtilizationMock = jest.fn().mockImplementation(() => ({ + active: 1, + idle: 1, + utilization: 1, +})); + +jest.doMock('perf_hooks', () => ({ + performance: { + eventLoopUtilization: eventLoopUtilizationMock, + }, +})); diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/src/event_loop_utilization_monitor.test.ts b/packages/core/metrics/core-metrics-collectors-server-internal/src/event_loop_utilization_monitor.test.ts new file mode 100644 index 0000000000000..2e9615673f141 --- /dev/null +++ b/packages/core/metrics/core-metrics-collectors-server-internal/src/event_loop_utilization_monitor.test.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { eventLoopUtilizationMock } from './event_loop_utilization_monitor.test.mocks'; +import { EventLoopUtilizationMonitor } from './event_loop_utilization_monitor'; + +describe('EventLoopUtilizationMonitor', () => { + afterEach(() => jest.clearAllMocks()); + + describe('#constructor', () => { + test('#constructor collects utilization', () => { + new EventLoopUtilizationMonitor(); + expect(eventLoopUtilizationMock).toHaveBeenCalledTimes(1); + }); + }); + + describe('#reset', () => { + test('collects utilization', () => { + const monitor = new EventLoopUtilizationMonitor(); + monitor.reset(); + expect(eventLoopUtilizationMock).toHaveBeenCalledTimes(2); + }); + }); + + describe('#collect', () => { + test('collects utilization', () => { + const monitor = new EventLoopUtilizationMonitor(); + monitor.collect(); + expect(eventLoopUtilizationMock).toHaveBeenCalledTimes(2); + }); + + test('returns values from call to performance.eventLoopUtilization', () => { + const monitor = new EventLoopUtilizationMonitor(); + expect(monitor.collect()).toMatchInlineSnapshot(` + Object { + "active": 1, + "idle": 1, + "utilization": 1, + } + `); + }); + + test('passes last ELU value from constructor to calculate diff', () => { + const mockInitialData = { + active: 0, + idle: 0, + utilization: 0, + }; + eventLoopUtilizationMock.mockImplementationOnce(() => mockInitialData); + + const monitor = new EventLoopUtilizationMonitor(); + monitor.collect(); + + expect(eventLoopUtilizationMock).toHaveBeenCalledTimes(2); + expect(eventLoopUtilizationMock.mock.calls[1][0]).toEqual(mockInitialData); + }); + + test('passes last ELU value from reset to calculate diff', () => { + const monitor = new EventLoopUtilizationMonitor(); + const mockInitialData = { + active: 0, + idle: 0, + utilization: 0, + }; + eventLoopUtilizationMock.mockImplementationOnce(() => mockInitialData); + + monitor.reset(); + monitor.collect(); + + expect(eventLoopUtilizationMock).toHaveBeenCalledTimes(3); + expect(eventLoopUtilizationMock.mock.calls[2][0]).toEqual(mockInitialData); + }); + }); +}); diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/src/event_loop_utilization_monitor.ts b/packages/core/metrics/core-metrics-collectors-server-internal/src/event_loop_utilization_monitor.ts new file mode 100644 index 0000000000000..c61be64c1b80a --- /dev/null +++ b/packages/core/metrics/core-metrics-collectors-server-internal/src/event_loop_utilization_monitor.ts @@ -0,0 +1,43 @@ +/* + * 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 { EventLoopUtilization } from 'perf_hooks'; +import { performance } from 'perf_hooks'; + +export class EventLoopUtilizationMonitor { + private elu: EventLoopUtilization; + + /** + * Creating a new instance of EventLoopUtilizationMonitor will capture the + * current ELU to use as a point of comparison against the first call to + * `collect`. + */ + constructor() { + this.elu = performance.eventLoopUtilization(); + } + + /** + * Get ELU between now and last time the ELU was reset. + */ + public collect(): EventLoopUtilization { + const { active, idle, utilization } = performance.eventLoopUtilization(this.elu); + + return { + active, + idle, + utilization, + }; + } + + /** + * Resets the ELU to now. Will be used to calculate the diff on the next call to `collect`. + */ + public reset() { + this.elu = performance.eventLoopUtilization(); + } +} diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/src/mocks_internal.ts b/packages/core/metrics/core-metrics-collectors-server-internal/src/mocks_internal.ts index 87c0bd872ee1c..812b2c89ff8d4 100644 --- a/packages/core/metrics/core-metrics-collectors-server-internal/src/mocks_internal.ts +++ b/packages/core/metrics/core-metrics-collectors-server-internal/src/mocks_internal.ts @@ -40,6 +40,11 @@ function createMockOpsProcessMetrics(): OpsProcessMetrics { }, event_loop_delay: 1, event_loop_delay_histogram: histogram, + event_loop_utilization: { + active: 1, + idle: 1, + utilization: 1, + }, pid: 1, uptime_in_millis: 1, }; diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/src/process.test.mocks.ts b/packages/core/metrics/core-metrics-collectors-server-internal/src/process.test.mocks.ts new file mode 100644 index 0000000000000..8fe8cc10da7bc --- /dev/null +++ b/packages/core/metrics/core-metrics-collectors-server-internal/src/process.test.mocks.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { collectorMock } from './mocks_internal'; + +export const mockEventLoopDelayMonitor = collectorMock.create(); +jest.doMock('./event_loop_delays_monitor', () => ({ + EventLoopDelaysMonitor: jest.fn().mockImplementation(() => mockEventLoopDelayMonitor), +})); + +export const mockEventLoopUtilizationMonitor = collectorMock.create(); +jest.doMock('./event_loop_utilization_monitor', () => ({ + EventLoopUtilizationMonitor: jest.fn().mockImplementation(() => mockEventLoopUtilizationMonitor), +})); diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/src/process.test.ts b/packages/core/metrics/core-metrics-collectors-server-internal/src/process.test.ts index ff861d5c8bef1..dbb667aeeb043 100644 --- a/packages/core/metrics/core-metrics-collectors-server-internal/src/process.test.ts +++ b/packages/core/metrics/core-metrics-collectors-server-internal/src/process.test.ts @@ -7,9 +7,9 @@ */ import v8, { HeapInfo } from 'v8'; +import { mockEventLoopDelayMonitor, mockEventLoopUtilizationMonitor } from './process.test.mocks'; import { ProcessMetricsCollector } from './process'; -/* eslint-disable dot-notation */ describe('ProcessMetricsCollector', () => { let collector: ProcessMetricsCollector; @@ -18,62 +18,83 @@ describe('ProcessMetricsCollector', () => { }); afterEach(() => { - jest.restoreAllMocks(); + jest.clearAllMocks(); }); - it('collects pid from the process', () => { - const metrics = collector.collect(); + describe('#collect', () => { + it('collects pid from the process', () => { + const metrics = collector.collect(); - expect(metrics).toHaveLength(1); - expect(metrics[0].pid).toEqual(process.pid); - }); + expect(metrics).toHaveLength(1); + expect(metrics[0].pid).toEqual(process.pid); + }); - it('collects event loop delay', () => { - const mockEventLoopDelayMonitor = { collect: jest.fn().mockReturnValue({ mean: 13 }) }; - // @ts-expect-error-next-line readonly private method. - collector['eventLoopDelayMonitor'] = mockEventLoopDelayMonitor; - const metrics = collector.collect(); - expect(metrics).toHaveLength(1); - expect(metrics[0].event_loop_delay).toBe(13); - expect(mockEventLoopDelayMonitor.collect).toBeCalledTimes(1); - }); + it('collects event loop delay', () => { + mockEventLoopDelayMonitor.collect.mockReturnValueOnce({ mean: 13 }); + const metrics = collector.collect(); + expect(metrics).toHaveLength(1); + expect(metrics[0].event_loop_delay).toBe(13); + expect(mockEventLoopDelayMonitor.collect).toBeCalledTimes(1); + }); + + it('collects event loop utilization', () => { + const mockData = { active: 1, idle: 1, utilization: 1 }; + mockEventLoopUtilizationMonitor.collect.mockReturnValueOnce(mockData); + const metrics = collector.collect(); + expect(metrics).toHaveLength(1); + expect(metrics[0].event_loop_utilization).toEqual(mockData); + expect(mockEventLoopUtilizationMonitor.collect).toBeCalledTimes(1); + }); + + it('collects uptime info from the process', () => { + const uptime = 58986; + jest.spyOn(process, 'uptime').mockImplementation(() => uptime); - it('collects uptime info from the process', () => { - const uptime = 58986; - jest.spyOn(process, 'uptime').mockImplementation(() => uptime); + const metrics = collector.collect(); - const metrics = collector.collect(); + expect(metrics).toHaveLength(1); + expect(metrics[0].uptime_in_millis).toEqual(uptime * 1000); + }); - expect(metrics).toHaveLength(1); - expect(metrics[0].uptime_in_millis).toEqual(uptime * 1000); + it('collects memory info from the process', () => { + const heapTotal = 58986; + const heapUsed = 4688; + const heapSizeLimit = 5788; + const rss = 5865; + jest.spyOn(process, 'memoryUsage').mockImplementation(() => ({ + rss, + heapTotal, + heapUsed, + external: 0, + arrayBuffers: 0, + })); + + jest.spyOn(v8, 'getHeapStatistics').mockImplementation( + () => + ({ + heap_size_limit: heapSizeLimit, + } as HeapInfo) + ); + + const metrics = collector.collect(); + + expect(metrics).toHaveLength(1); + expect(metrics[0].memory.heap.total_in_bytes).toEqual(heapTotal); + expect(metrics[0].memory.heap.used_in_bytes).toEqual(heapUsed); + expect(metrics[0].memory.heap.size_limit).toEqual(heapSizeLimit); + expect(metrics[0].memory.resident_set_size_in_bytes).toEqual(rss); + }); }); - it('collects memory info from the process', () => { - const heapTotal = 58986; - const heapUsed = 4688; - const heapSizeLimit = 5788; - const rss = 5865; - jest.spyOn(process, 'memoryUsage').mockImplementation(() => ({ - rss, - heapTotal, - heapUsed, - external: 0, - arrayBuffers: 0, - })); - - jest.spyOn(v8, 'getHeapStatistics').mockImplementation( - () => - ({ - heap_size_limit: heapSizeLimit, - } as HeapInfo) - ); - - const metrics = collector.collect(); - - expect(metrics).toHaveLength(1); - expect(metrics[0].memory.heap.total_in_bytes).toEqual(heapTotal); - expect(metrics[0].memory.heap.used_in_bytes).toEqual(heapUsed); - expect(metrics[0].memory.heap.size_limit).toEqual(heapSizeLimit); - expect(metrics[0].memory.resident_set_size_in_bytes).toEqual(rss); + describe('#reset', () => { + it('resets event loop delay', () => { + collector.reset(); + expect(mockEventLoopDelayMonitor.reset).toBeCalledTimes(1); + }); + + it('resets event loop utilization', () => { + collector.reset(); + expect(mockEventLoopUtilizationMonitor.reset).toBeCalledTimes(1); + }); }); }); diff --git a/packages/core/metrics/core-metrics-collectors-server-internal/src/process.ts b/packages/core/metrics/core-metrics-collectors-server-internal/src/process.ts index 342a0be547e2c..399da1ad9c29e 100644 --- a/packages/core/metrics/core-metrics-collectors-server-internal/src/process.ts +++ b/packages/core/metrics/core-metrics-collectors-server-internal/src/process.ts @@ -9,6 +9,7 @@ import v8 from 'v8'; import type { OpsProcessMetrics, MetricsCollector } from '@kbn/core-metrics-server'; import { EventLoopDelaysMonitor } from './event_loop_delays_monitor'; +import { EventLoopUtilizationMonitor } from './event_loop_utilization_monitor'; export class ProcessMetricsCollector implements MetricsCollector { static getMainThreadMetrics(processes: OpsProcessMetrics[]): undefined | OpsProcessMetrics { @@ -21,9 +22,11 @@ export class ProcessMetricsCollector implements MetricsCollector { it('provides correctly formatted message', () => { const result = getEcsOpsMetricsLog(createMockOpsMetrics(testMetrics)); expect(result.message).toMatchInlineSnapshot( - `"memory: 100.0B uptime: 0:00:01 load: [10.00,20.00,30.00] mean delay: 50.000 delay histogram: { 50: 50.000; 95: 95.000; 99: 99.000 }"` + `"memory: 100.0B uptime: 0:00:01 load: [10.00,20.00,30.00] mean delay: 50.000 delay histogram: { 50: 50.000; 95: 95.000; 99: 99.000 } utilization: 0.63653"` ); }); @@ -116,6 +121,11 @@ describe('getEcsOpsMetricsLog', () => { "95": 95, "99": 99, }, + "eventLoopUtilization": Object { + "active": 629.1224170000005, + "idle": 359.23554199999995, + "utilization": 0.6365329598160299, + }, "memory": Object { "heap": Object { "usedInBytes": 100, diff --git a/packages/core/metrics/core-metrics-server-internal/src/logging/get_ops_metrics_log.ts b/packages/core/metrics/core-metrics-server-internal/src/logging/get_ops_metrics_log.ts index 6a54f4346b343..78e4482b7a351 100644 --- a/packages/core/metrics/core-metrics-server-internal/src/logging/get_ops_metrics_log.ts +++ b/packages/core/metrics/core-metrics-server-internal/src/logging/get_ops_metrics_log.ts @@ -55,6 +55,11 @@ export function getEcsOpsMetricsLog(metrics: OpsMetrics) { ).format('0.000')} }` : ''; + const eventLoopUtilizationVal = process?.event_loop_utilization; + const eventLoopUtilizationMsg = eventLoopUtilizationVal + ? ` utilization: ${numeral(process?.event_loop_utilization.utilization).format('0.00000')}` + : ''; + const loadEntries = { '1m': os?.load ? os?.load['1m'] : undefined, '5m': os?.load ? os?.load['5m'] : undefined, @@ -85,6 +90,7 @@ export function getEcsOpsMetricsLog(metrics: OpsMetrics) { }, eventLoopDelay: eventLoopDelayVal, eventLoopDelayHistogram: eventLoopDelayHistVals, + eventLoopUtilization: eventLoopUtilizationVal, }, host: { os: { @@ -101,6 +107,7 @@ export function getEcsOpsMetricsLog(metrics: OpsMetrics) { loadValsMsg, eventLoopDelayValMsg, eventLoopDelayHistMsg, + eventLoopUtilizationMsg, ].join(''), meta, }; diff --git a/packages/core/metrics/core-metrics-server-internal/src/metrics_service.test.ts b/packages/core/metrics/core-metrics-server-internal/src/metrics_service.test.ts index e129991a3576d..45b3ae49a1f5e 100644 --- a/packages/core/metrics/core-metrics-server-internal/src/metrics_service.test.ts +++ b/packages/core/metrics/core-metrics-server-internal/src/metrics_service.test.ts @@ -214,6 +214,7 @@ describe('MetricsService', () => { "process": Object { "eventLoopDelay": undefined, "eventLoopDelayHistogram": undefined, + "eventLoopUtilization": undefined, "memory": Object { "heap": Object { "usedInBytes": undefined, diff --git a/packages/core/metrics/core-metrics-server/src/metrics.ts b/packages/core/metrics/core-metrics-server/src/metrics.ts index 63a80dde1c371..6f903cd66a246 100644 --- a/packages/core/metrics/core-metrics-server/src/metrics.ts +++ b/packages/core/metrics/core-metrics-server/src/metrics.ts @@ -6,6 +6,8 @@ * Side Public License, v 1. */ +import type { EventLoopUtilization } from 'perf_hooks'; + /** * an IntervalHistogram object that samples and reports the event loop delay over time. * The delays will be reported in milliseconds. @@ -85,6 +87,8 @@ export interface OpsProcessMetrics { event_loop_delay: number; /** node event loop delay histogram since last collection */ event_loop_delay_histogram: IntervalHistogram; + /** node event loop utilization since last collection */ + event_loop_utilization: EventLoopUtilization; /** uptime of the kibana process */ uptime_in_millis: number; } diff --git a/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts b/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts index 8e5a606a91017..72fe68fa9cf59 100644 --- a/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts +++ b/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts @@ -22,6 +22,7 @@ import { ALERT_RULE_NAME, ALERT_RULE_PARAMETERS, ALERT_RULE_PRODUCER, + ALERT_RULE_REVISION, ALERT_RULE_TAGS, ALERT_RULE_TYPE_ID, ALERT_RULE_UUID, @@ -112,6 +113,11 @@ export const alertFieldMap = { array: false, required: true, }, + [ALERT_RULE_REVISION]: { + type: 'long', + array: false, + required: true, + }, [ALERT_RULE_TAGS]: { type: 'keyword', array: true, diff --git a/packages/kbn-expandable-flyout/src/types.ts b/packages/kbn-expandable-flyout/src/types.ts index f526832810900..2413fbb56ca7d 100644 --- a/packages/kbn-expandable-flyout/src/types.ts +++ b/packages/kbn-expandable-flyout/src/types.ts @@ -39,5 +39,5 @@ export interface Panel { /** * Width used when rendering the panel */ - width: number; // TODO remove this, the width shouldn't be a property of a panel, but handled at the flyout level + width: number; // TODO remove this, see https://github.com/elastic/security-team/issues/6247 } diff --git a/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts b/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts index 34b04116b9522..e996acbd9fb6c 100644 --- a/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts +++ b/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts @@ -82,6 +82,9 @@ const ALERT_RULE_PARAMETERS = `${ALERT_RULE_NAMESPACE}.parameters` as const; // kibana.alert.rule.producer - rule type producer for rule that generated this alert const ALERT_RULE_PRODUCER = `${ALERT_RULE_NAMESPACE}.producer` as const; +// kibana.alert.rule.revision - current revision of the rule that generated this alert +const ALERT_RULE_REVISION = `${ALERT_RULE_NAMESPACE}.revision` as const; + // kibana.alert.rule.tags - rule tags for rule that generated this alert const ALERT_RULE_TAGS = `${ALERT_RULE_NAMESPACE}.tags` as const; @@ -113,6 +116,7 @@ const fields = { ALERT_RULE_NAME, ALERT_RULE_PARAMETERS, ALERT_RULE_PRODUCER, + ALERT_RULE_REVISION, ALERT_RULE_TAGS, ALERT_RULE_TYPE_ID, ALERT_RULE_UUID, @@ -148,6 +152,7 @@ export { ALERT_RULE_NAME, ALERT_RULE_PARAMETERS, ALERT_RULE_PRODUCER, + ALERT_RULE_REVISION, ALERT_RULE_TAGS, ALERT_RULE_TYPE_ID, ALERT_RULE_UUID, diff --git a/packages/kbn-ts-projects/ts_projects.ts b/packages/kbn-ts-projects/ts_projects.ts index e7e2efb30c0ab..9eea1e2227ba5 100644 --- a/packages/kbn-ts-projects/ts_projects.ts +++ b/packages/kbn-ts-projects/ts_projects.ts @@ -21,7 +21,6 @@ export const TS_PROJECTS = TsProject.loadAll({ 'x-pack/plugins/synthetics/e2e/tsconfig.json', 'x-pack/plugins/ux/e2e/tsconfig.json', - 'x-pack/plugins/observability/e2e/tsconfig.json', 'x-pack/plugins/exploratory_view/e2e/tsconfig.json', 'x-pack/plugins/threat_intelligence/cypress/tsconfig.json', ], diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts index 34ad74172b57e..896cd26df093c 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/check_registered_types.test.ts @@ -148,7 +148,7 @@ describe('checking migration metadata changes on all registered SO types', () => "upgrade-assistant-reindex-operation": "09ac8ed9c9acf7e8ece8eafe47d7019ea1472144", "uptime-dynamic-settings": "9a63ce80904a04be114749e426882dc3ff011137", "uptime-synthetics-api-key": "599319bedbfa287e8761e1ba49d536417a33fa13", - "url": "292ec2e6816bf2d7c16a96e800c7ff564b002b52", + "url": "816fa15bfe460ce39108ed8095e60fdbfcc40f11", "usage-counters": "f478b2668be350f5bdc08d9e1cf6fbce0e079f61", "visualization": "55530e57ffe86bfd7c2a2b50461398c1f7a99e95", "workplace_search_telemetry": "10e278fe9ae1396bfc36ae574bc387d7e696d43f", diff --git a/src/plugins/dashboard/public/dashboard_app/_dashboard_app.scss b/src/plugins/dashboard/public/dashboard_app/_dashboard_app.scss index bfdf933c24a73..b1333d1c90623 100644 --- a/src/plugins/dashboard/public/dashboard_app/_dashboard_app.scss +++ b/src/plugins/dashboard/public/dashboard_app/_dashboard_app.scss @@ -1,13 +1,6 @@ @import 'src/core/public/mixins'; .dshAppWrapper { - @include kibanaFullBodyHeight(); - - display: flex; - flex-direction: column; -} - -.dashboardViewportWrapper { display: flex; flex: 1; flex-direction: column; diff --git a/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx b/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx index 93a92060e2e98..b78ae7a4806f4 100644 --- a/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx +++ b/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx @@ -14,7 +14,6 @@ import { ViewMode } from '@kbn/embeddable-plugin/public'; import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; import { createKbnUrlStateStorage, withNotifyOnErrors } from '@kbn/kibana-utils-plugin/public'; -import { css } from '@emotion/react'; import { DashboardAppNoDataPage, isDashboardAppInNoDataState, @@ -54,11 +53,6 @@ export function DashboardApp({ history, }: DashboardAppProps) { const [showNoDataPage, setShowNoDataPage] = useState(false); - /** - * This state keeps track of the height of the top navigation bar so that padding at the - * top of the viewport can be adjusted dynamically. - */ - const [topNavHeight, setTopNavHeight] = useState(0); useMount(() => { (async () => setShowNoDataPage(await isDashboardAppInNoDataState()))(); @@ -191,7 +185,7 @@ export function DashboardApp({ }, [dashboardContainer, kbnUrlStateStorage]); return ( -
+
{showNoDataPage && ( setShowNoDataPage(false)} /> )} @@ -199,27 +193,17 @@ export function DashboardApp({ <> {DashboardReduxWrapper && ( - + )} {getLegacyConflictWarning?.()} -
- setDashboardContainer(container)} - /> -
+ + setDashboardContainer(container)} + /> )}
diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/_dashboard_top_nav.scss b/src/plugins/dashboard/public/dashboard_app/top_nav/_dashboard_top_nav.scss index ac0cdfe814a2c..0120140f637c6 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/_dashboard_top_nav.scss +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/_dashboard_top_nav.scss @@ -1,6 +1,11 @@ .dashboardTopNav { - position: fixed; + width: 100%; + position: sticky; z-index: $euiZLevel2; background: $euiPageBackgroundColor; - width: 100%; -} + + top: $kbnHeaderOffset; + &.dashboardTopNav-fullscreenMode { + top: 0; + } +} \ No newline at end of file diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_top_nav.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_top_nav.tsx index 2a65efa575742..daa8ea63616cb 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_top_nav.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_top_nav.tsx @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import classNames from 'classnames'; import UseUnmount from 'react-use/lib/useUnmount'; import React, { useEffect, useMemo, useRef, useState } from 'react'; @@ -17,7 +18,7 @@ import { import { ViewMode } from '@kbn/embeddable-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; -import { EuiHorizontalRule, useResizeObserver } from '@elastic/eui'; +import { EuiHorizontalRule } from '@elastic/eui'; import { getDashboardTitle, leaveConfirmStrings, @@ -37,16 +38,11 @@ import './_dashboard_top_nav.scss'; export interface DashboardTopNavProps { embedSettings?: DashboardEmbedSettings; redirectTo: DashboardRedirect; - onHeightChange: (height: number) => void; } const LabsFlyout = withSuspense(LazyLabsFlyout, null); -export function DashboardTopNav({ - embedSettings, - redirectTo, - onHeightChange, -}: DashboardTopNavProps) { +export function DashboardTopNav({ embedSettings, redirectTo }: DashboardTopNavProps) { const [isChromeVisible, setIsChromeVisible] = useState(false); const [isLabsShown, setIsLabsShown] = useState(false); @@ -122,16 +118,6 @@ export function DashboardTopNav({ if (!embedSettings) setChromeVisibility(viewMode !== ViewMode.PRINT); }, [embedSettings, setChromeVisibility, viewMode]); - /** - * Keep track of the height of the top nav bar as it changes so that the padding at the top of the - * dashboard viewport can be adjusted dynamically as it changes - */ - const resizeRef = useRef(null); - const dimensions = useResizeObserver(resizeRef.current); - useEffect(() => { - onHeightChange(dimensions.height); - }, [dimensions, onHeightChange]); - /** * populate recently accessed, and set is chrome visible. */ @@ -230,7 +216,11 @@ export function DashboardTopNav({ }); return ( -
+

{ - // sizeme detects the width to be 0 in our test environment. noPlaceholder will mean that the grid contents will - // get rendered even when width is 0, which will improve our tests. - sizeMe.noPlaceholders = true; -}); - -afterAll(() => { - sizeMe.noPlaceholders = false; -}); - test('renders DashboardGrid', async () => { const dashboardContainer = await getDashboardContainer(); const { Wrapper: DashboardReduxWrapper } = dashboardContainer.getReduxEmbeddableTools(); @@ -79,7 +68,7 @@ test('renders DashboardGrid', async () => { const component = mountWithIntl( - + ); @@ -94,7 +83,7 @@ test('renders DashboardGrid with no visualizations', async () => { const component = mountWithIntl( - + ); @@ -111,7 +100,7 @@ test('DashboardGrid removes panel when removed from container', async () => { const component = mountWithIntl( - + ); @@ -132,7 +121,7 @@ test('DashboardGrid renders expanded panel', async () => { const component = mountWithIntl( - + ); diff --git a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx index 86ef728eebd34..e888fb1dce4f2 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid.tsx @@ -6,178 +6,92 @@ * Side Public License, v 1. */ -import _ from 'lodash'; -import sizeMe from 'react-sizeme'; -import classNames from 'classnames'; import 'react-resizable/css/styles.css'; import 'react-grid-layout/css/styles.css'; -import React, { useCallback, useMemo, useRef } from 'react'; -import ReactGridLayout, { Layout, ReactGridLayoutProps } from 'react-grid-layout'; -import { ViewMode, EmbeddablePhaseEvent } from '@kbn/embeddable-plugin/public'; +import { pick } from 'lodash'; +import classNames from 'classnames'; +import { useEffectOnce } from 'react-use/lib'; +import React, { useState, useMemo, useCallback } from 'react'; +import { Layout, Responsive as ResponsiveReactGridLayout } from 'react-grid-layout'; + +import { ViewMode } from '@kbn/embeddable-plugin/public'; import { DashboardPanelState } from '../../../../common'; import { DashboardGridItem } from './dashboard_grid_item'; +import { DASHBOARD_GRID_HEIGHT, DASHBOARD_MARGIN_SIZE } from '../../../dashboard_constants'; +import { useDashboardGridSettings } from './use_dashboard_grid_settings'; import { useDashboardContainerContext } from '../../dashboard_container_context'; -import { DashboardLoadedEventStatus, DashboardRenderPerformanceStats } from '../../types'; -import { DASHBOARD_GRID_COLUMN_COUNT, DASHBOARD_GRID_HEIGHT } from '../../../dashboard_constants'; +import { useDashboardPerformanceTracker } from './use_dashboard_performance_tracker'; import { getPanelLayoutsAreEqual } from '../../embeddable/integrations/diff_state/dashboard_diffing_utils'; -let lastValidGridSize = 0; - -/** - * This is a fix for a bug that stopped the browser window from automatically scrolling down when panels were made - * taller than the current grid. - * see https://github.com/elastic/kibana/issues/14710. - */ -function ensureWindowScrollsToBottom(event: { clientY: number; pageY: number }) { - // The buffer is to handle the case where the browser is maximized and it's impossible for the mouse to move below - // the screen, out of the window. see https://github.com/elastic/kibana/issues/14737 - const WINDOW_BUFFER = 10; - if (event.clientY > window.innerHeight - WINDOW_BUFFER) { - window.scrollTo(0, event.pageY + WINDOW_BUFFER - window.innerHeight); - } -} - -function ResponsiveGrid({ - size, - isViewMode, - layout, - onLayoutChange, - children, - maximizedPanelId, - useMargins, -}: { - size: { width: number }; - isViewMode: boolean; - layout: Layout[]; - onLayoutChange: ReactGridLayoutProps['onLayoutChange']; - children: JSX.Element[]; - maximizedPanelId?: string; - useMargins: boolean; -}) { - // This is to prevent a bug where view mode changes when the panel is expanded. View mode changes will trigger - // the grid to re-render, but when a panel is expanded, the size will be 0. Minimizing the panel won't cause the - // grid to re-render so it'll show a grid with a width of 0. - lastValidGridSize = size.width > 0 ? size.width : lastValidGridSize; - const classes = classNames({ - 'dshLayout--viewing': isViewMode, - 'dshLayout--editing': !isViewMode, - 'dshLayout-isMaximizedPanel': maximizedPanelId !== undefined, - 'dshLayout-withoutMargins': !useMargins, - }); - - const MARGINS = useMargins ? 8 : 0; - - return ( - ensureWindowScrollsToBottom(event)} - > - {children} - - ); -} - -// Using sizeMe sets up the grid to be re-rendered automatically not only when the window size changes, but also -// when the container size changes, so it works for Full Screen mode switches. -const config = { monitorWidth: true }; -const ResponsiveSizedGrid = sizeMe(config)(ResponsiveGrid); - -interface PanelLayout extends Layout { - i: string; -} - -type DashboardRenderPerformanceTracker = DashboardRenderPerformanceStats & { - panelIds: Record>; - status: DashboardLoadedEventStatus; - doneCount: number; -}; - -const getDefaultPerformanceTracker: () => DashboardRenderPerformanceTracker = () => ({ - panelsRenderStartTime: performance.now(), - panelsRenderDoneTime: 0, - lastTimeToData: 0, - - panelIds: {}, - doneCount: 0, - status: 'done', -}); - -export const DashboardGrid = () => { +export const DashboardGrid = ({ viewportWidth }: { viewportWidth: number }) => { const { + useEmbeddableSelector: select, actions: { setPanels }, useEmbeddableDispatch, - useEmbeddableSelector: select, - embeddableInstance: dashboardContainer, } = useDashboardContainerContext(); const dispatch = useEmbeddableDispatch(); - const panels = select((state) => state.explicitInput.panels); const viewMode = select((state) => state.explicitInput.viewMode); const useMargins = select((state) => state.explicitInput.useMargins); const expandedPanelId = select((state) => state.componentState.expandedPanelId); - const layout = useMemo(() => Object.values(panels).map((panel) => panel.gridData), [panels]); - const panelsInOrder = useMemo( - () => Object.keys(panels).map((key: string) => panels[key]), - [panels] - ); - - // reset performance tracker on each render. - const performanceRefs = useRef(getDefaultPerformanceTracker()); - performanceRefs.current = getDefaultPerformanceTracker(); + // turn off panel transform animations for the first 500ms so that the dashboard doesn't animate on its first render. + const [animatePanelTransforms, setAnimatePanelTransforms] = useState(false); + useEffectOnce(() => { + setTimeout(() => setAnimatePanelTransforms(true), 500); + }); - const onPanelStatusChange = useCallback( - (info: EmbeddablePhaseEvent) => { - if (performanceRefs.current.panelIds[info.id] === undefined || info.status === 'loading') { - performanceRefs.current.panelIds[info.id] = {}; - } else if (info.status === 'error') { - performanceRefs.current.status = 'error'; - } else if (info.status === 'loaded') { - performanceRefs.current.lastTimeToData = performance.now(); - } + const { onPanelStatusChange } = useDashboardPerformanceTracker({ + panelCount: Object.keys(panels).length, + }); - performanceRefs.current.panelIds[info.id][info.status] = performance.now(); + const panelsInOrder: string[] = useMemo(() => { + return Object.keys(panels).sort((embeddableIdA, embeddableIdB) => { + const panelA = panels[embeddableIdA]; + const panelB = panels[embeddableIdB]; - if (info.status === 'error' || info.status === 'rendered') { - performanceRefs.current.doneCount++; - if (performanceRefs.current.doneCount === panelsInOrder.length) { - performanceRefs.current.panelsRenderDoneTime = performance.now(); - dashboardContainer.reportPerformanceMetrics(performanceRefs.current); - } + // need to manually sort the panels by position because we want the panels to be collapsed from the left to the + // right when switching to the single column layout, but RGL sorts by ID which can cause unexpected behaviour between + // by-reference and by-value panels + we want the HTML order to align with this in the multi-panel view + if (panelA.gridData.y === panelB.gridData.y) { + return panelA.gridData.x - panelB.gridData.x; + } else { + return panelA.gridData.y - panelB.gridData.y; } - }, - [dashboardContainer, panelsInOrder.length] - ); + }); + }, [panels]); + + const panelComponents = useMemo(() => { + return panelsInOrder.map((embeddableId, index) => { + const type = panels[embeddableId].type; + return ( + + ); + }); + }, [expandedPanelId, onPanelStatusChange, panels, panelsInOrder]); const onLayoutChange = useCallback( - (newLayout: PanelLayout[]) => { + (newLayout: Array) => { const updatedPanels: { [key: string]: DashboardPanelState } = newLayout.reduce( (updatedPanelsAcc, panelLayout) => { updatedPanelsAcc[panelLayout.i] = { ...panels[panelLayout.i], - gridData: _.pick(panelLayout, ['x', 'y', 'w', 'h', 'i']), + gridData: pick(panelLayout, ['x', 'y', 'w', 'h', 'i']), }; return updatedPanelsAcc; }, {} as { [key: string]: DashboardPanelState } ); - - // onLayoutChange gets called by react grid layout a lot more than it should, so only dispatch the updated panels if the layout has actually changed if (!getPanelLayoutsAreEqual(panels, updatedPanels)) { dispatch(setPanels(updatedPanels)); } @@ -185,41 +99,37 @@ export const DashboardGrid = () => { [dispatch, panels, setPanels] ); - const dashboardPanels = useMemo(() => { - panelsInOrder.sort((panelA, panelB) => { - if (panelA.gridData.y === panelB.gridData.y) { - return panelA.gridData.x - panelB.gridData.x; - } else { - return panelA.gridData.y - panelB.gridData.y; - } - }); + const classes = classNames({ + 'dshLayout-withoutMargins': !useMargins, + 'dshLayout--viewing': viewMode === ViewMode.VIEW, + 'dshLayout--editing': viewMode !== ViewMode.VIEW, + 'dshLayout--noAnimation': !animatePanelTransforms, + 'dshLayout-isMaximizedPanel': expandedPanelId !== undefined, + }); - return panelsInOrder.map(({ explicitInput, type }, index) => ( - - )); - }, [expandedPanelId, panelsInOrder, onPanelStatusChange]); + const { layouts, breakpoints, columns } = useDashboardGridSettings(panelsInOrder); // in print mode, dashboard layout is not controlled by React Grid Layout if (viewMode === ViewMode.PRINT) { - return <>{dashboardPanels}; + return <>{panelComponents}; } return ( - - {dashboardPanels} - + {panelComponents} + ); }; diff --git a/src/plugins/dashboard/public/dashboard_container/component/grid/use_dashboard_grid_settings.tsx b/src/plugins/dashboard/public/dashboard_container/component/grid/use_dashboard_grid_settings.tsx new file mode 100644 index 0000000000000..1fb684b236b8a --- /dev/null +++ b/src/plugins/dashboard/public/dashboard_container/component/grid/use_dashboard_grid_settings.tsx @@ -0,0 +1,44 @@ +/* + * 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 { useMemo } from 'react'; + +import { useEuiTheme } from '@elastic/eui'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; + +import { DASHBOARD_GRID_COLUMN_COUNT } from '../../../dashboard_constants'; +import { useDashboardContainerContext } from '../../dashboard_container_context'; + +export const useDashboardGridSettings = (panelsInOrder: string[]) => { + const { useEmbeddableSelector: select } = useDashboardContainerContext(); + const { euiTheme } = useEuiTheme(); + + const panels = select((state) => state.explicitInput.panels); + const viewMode = select((state) => state.explicitInput.viewMode); + + const layouts = useMemo(() => { + return { + lg: panelsInOrder.map((embeddableId) => panels[embeddableId].gridData), + }; + }, [panels, panelsInOrder]); + + const breakpoints = useMemo( + () => ({ lg: euiTheme.breakpoint.m, ...(viewMode === ViewMode.VIEW ? { sm: 0 } : {}) }), + [viewMode, euiTheme.breakpoint.m] + ); + + const columns = useMemo( + () => ({ + lg: DASHBOARD_GRID_COLUMN_COUNT, + ...(viewMode === ViewMode.VIEW ? { sm: 1 } : {}), + }), + [viewMode] + ); + + return { layouts, breakpoints, columns }; +}; diff --git a/src/plugins/dashboard/public/dashboard_container/component/grid/use_dashboard_performance_tracker.tsx b/src/plugins/dashboard/public/dashboard_container/component/grid/use_dashboard_performance_tracker.tsx new file mode 100644 index 0000000000000..af0312572d7c5 --- /dev/null +++ b/src/plugins/dashboard/public/dashboard_container/component/grid/use_dashboard_performance_tracker.tsx @@ -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 { useCallback, useRef } from 'react'; + +import { EmbeddablePhaseEvent } from '@kbn/embeddable-plugin/public'; + +import { useDashboardContainerContext } from '../../dashboard_container_context'; +import { DashboardLoadedEventStatus, DashboardRenderPerformanceStats } from '../../types'; + +type DashboardRenderPerformanceTracker = DashboardRenderPerformanceStats & { + panelIds: Record>; + status: DashboardLoadedEventStatus; + doneCount: number; +}; + +const getDefaultPerformanceTracker: () => DashboardRenderPerformanceTracker = () => ({ + panelsRenderStartTime: performance.now(), + panelsRenderDoneTime: 0, + lastTimeToData: 0, + + panelIds: {}, + doneCount: 0, + status: 'done', +}); + +export const useDashboardPerformanceTracker = ({ panelCount }: { panelCount: number }) => { + const { embeddableInstance: dashboardContainer } = useDashboardContainerContext(); + + // reset performance tracker on each render. + const performanceRefs = useRef(getDefaultPerformanceTracker()); + performanceRefs.current = getDefaultPerformanceTracker(); + + const onPanelStatusChange = useCallback( + (info: EmbeddablePhaseEvent) => { + if (performanceRefs.current.panelIds[info.id] === undefined || info.status === 'loading') { + performanceRefs.current.panelIds[info.id] = {}; + } else if (info.status === 'error') { + performanceRefs.current.status = 'error'; + } else if (info.status === 'loaded') { + performanceRefs.current.lastTimeToData = performance.now(); + } + + performanceRefs.current.panelIds[info.id][info.status] = performance.now(); + + if (info.status === 'error' || info.status === 'rendered') { + performanceRefs.current.doneCount++; + if (performanceRefs.current.doneCount === panelCount) { + performanceRefs.current.panelsRenderDoneTime = performance.now(); + dashboardContainer.reportPerformanceMetrics(performanceRefs.current); + } + } + }, + [dashboardContainer, panelCount] + ); + + return { onPanelStatusChange }; +}; diff --git a/src/plugins/dashboard/public/dashboard_container/component/viewport/_dashboard_viewport.scss b/src/plugins/dashboard/public/dashboard_container/component/viewport/_dashboard_viewport.scss index 135a039e40357..81fdbadf7632d 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/viewport/_dashboard_viewport.scss +++ b/src/plugins/dashboard/public/dashboard_container/component/viewport/_dashboard_viewport.scss @@ -1,9 +1,15 @@ +.dshDashboardViewportWrapper { + flex: auto; + display: flex; + flex-direction: column; +} + .dshDashboardViewport { width: 100%; } -.dshDashboardViewport-withMargins { - width: 100%; +.dshDashboardViewport--panelExpanded { + flex: 1; } .dshDashboardViewport-controls { diff --git a/src/plugins/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx b/src/plugins/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx index f64ae2ae94484..c5919462765d6 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/viewport/dashboard_viewport.tsx @@ -6,18 +6,32 @@ * Side Public License, v 1. */ -import React, { useEffect, useRef } from 'react'; +import { debounce } from 'lodash'; +import classNames from 'classnames'; +import useResizeObserver from 'use-resize-observer/polyfilled'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; +import { EuiPortal } from '@elastic/eui'; import { ViewMode } from '@kbn/embeddable-plugin/public'; import { ExitFullScreenButton } from '@kbn/shared-ux-button-exit-full-screen'; -import { css } from '@emotion/react'; -import { EuiPortal } from '@elastic/eui'; import { DashboardGrid } from '../grid'; import { pluginServices } from '../../../services/plugin_services'; import { DashboardEmptyScreen } from '../empty_screen/dashboard_empty_screen'; import { useDashboardContainerContext } from '../../dashboard_container_context'; +export const useDebouncedWidthObserver = (wait = 250) => { + const [width, setWidth] = useState(0); + const onWidthCange = useMemo(() => debounce(setWidth, wait), [wait]); + const { ref } = useResizeObserver({ + onResize: (dimensions) => { + if (width === 0) setWidth(dimensions.width); + if (dimensions.width !== width) onWidthCange(dimensions.width); + }, + }); + return { ref, width }; +}; + export const DashboardViewportComponent = () => { const { settings: { isProjectEnabledInLabs }, @@ -42,16 +56,19 @@ export const DashboardViewportComponent = () => { const viewMode = select((state) => state.explicitInput.viewMode); const dashboardTitle = select((state) => state.explicitInput.title); - const useMargins = select((state) => state.explicitInput.useMargins); const description = select((state) => state.explicitInput.description); const expandedPanelId = select((state) => state.componentState.expandedPanelId); - const expandedPanelStyles = css` - flex: 1; - `; const controlsEnabled = isProjectEnabledInLabs('labs:dashboard:dashboardControls'); + const { ref: resizeRef, width: viewportWidth } = useDebouncedWidthObserver(); + + const classes = classNames({ + dshDashboardViewport: true, + 'dshDashboardViewport--panelExpanded': Boolean(expandedPanelId), + }); + return ( - <> +
{controlsEnabled && controlGroup && viewMode !== ViewMode.PRINT ? (
0 ? 'dshDashboardViewport-controls' : ''} @@ -59,21 +76,21 @@ export const DashboardViewportComponent = () => { /> ) : null}
{panelCount === 0 && (
)} - +
- +
); }; diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/integrations/controls/dashboard_control_group_integration.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/integrations/controls/dashboard_control_group_integration.ts index 7367f089bbaa8..c961a93e770f6 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/integrations/controls/dashboard_control_group_integration.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/integrations/controls/dashboard_control_group_integration.ts @@ -181,7 +181,7 @@ function startSyncingDashboardControlGroup(this: DashboardContainer) { ), skip(1) // skip first filter output because it will have been applied in initialize ) - .subscribe(() => this.updateInput({ lastReloadRequestTime: Date.now() })) + .subscribe(() => this.forceRefresh()) ); subscriptions.add( @@ -193,7 +193,9 @@ function startSyncingDashboardControlGroup(this: DashboardContainer) { ) ) .subscribe(({ timeslice }) => { - this.updateInput({ timeslice }); + if (!_.isEqual(timeslice, this.getInputAsValueType().timeslice)) { + this.updateInput({ timeslice }); + } }) ); diff --git a/src/plugins/kibana_usage_collection/server/collectors/ops_stats/__snapshots__/ops_stats_collector.test.ts.snap b/src/plugins/kibana_usage_collection/server/collectors/ops_stats/__snapshots__/ops_stats_collector.test.ts.snap index 9005e4ba24bf7..5f4aabf57995e 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/ops_stats/__snapshots__/ops_stats_collector.test.ts.snap +++ b/src/plugins/kibana_usage_collection/server/collectors/ops_stats/__snapshots__/ops_stats_collector.test.ts.snap @@ -26,6 +26,11 @@ Object { "process": Object { "event_loop_delay": 1, "event_loop_delay_histogram": Any, + "event_loop_utilization": Object { + "active": 1, + "idle": 1, + "utilization": 1, + }, "memory": Object { "heap": Object { "size_limit": 1, @@ -40,6 +45,11 @@ Object { Object { "event_loop_delay": 1, "event_loop_delay_histogram": Any, + "event_loop_utilization": Object { + "active": 1, + "idle": 1, + "utilization": 1, + }, "memory": Object { "heap": Object { "size_limit": 1, diff --git a/src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.ts b/src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.ts index b00b97991bc95..c3d5c0f5560bc 100644 --- a/src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.ts +++ b/src/plugins/share/server/url_service/saved_objects/register_url_service_saved_object_type.ts @@ -47,32 +47,12 @@ export const registerUrlServiceSavedObjectType = ( }, }, }, - accessCount: { - type: 'long', - }, accessDate: { type: 'date', }, createDate: { type: 'date', }, - // Legacy field - contains already pre-formatted final URL. - // This is here to support old saved objects that have this field. - // TODO: Remove this field and execute a migration to the new format. - url: { - type: 'text', - fields: { - keyword: { - type: 'keyword', - ignore_above: 2048, - }, - }, - }, - // Information needed to load and execute a locator. - locatorJSON: { - type: 'text', - index: false, - }, }, }, migrations: () => { diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/configurations/metric/index.test.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/configurations/metric/index.test.ts index 0fabef6eebdbe..9185f77cb73b2 100644 --- a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/configurations/metric/index.test.ts +++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/configurations/metric/index.test.ts @@ -296,6 +296,7 @@ describe('getConfigurationForGauge', () => { palette: undefined, maxAccessor: maxColumnId, color: '#FFFFFF', + showBar: true, }); expect(mockGetPalette).toBeCalledTimes(1); }); @@ -338,6 +339,7 @@ describe('getConfigurationForGauge', () => { metricAccessor: columnId1, palette, maxAccessor: maxColumnId, + showBar: true, }); expect(mockGetPalette).toBeCalledTimes(1); }); diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/configurations/metric/index.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/configurations/metric/index.ts index e6814b0797a1a..1892330bda9a9 100644 --- a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/configurations/metric/index.ts +++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/configurations/metric/index.ts @@ -52,7 +52,7 @@ export const getConfigurationForGauge = ( model: Panel, layer: Layer, bucket: Column | undefined, - gaugeMaxColumn: Column + gaugeMaxColumn?: Column ): MetricVisConfiguration | null => { const primarySeries = model.series[0]; const primaryMetricWithCollapseFn = getMetricWithCollapseFn(primarySeries); @@ -73,7 +73,8 @@ export const getConfigurationForGauge = ( layerType: 'data', metricAccessor: primaryColumn?.columnId, breakdownByAccessor: bucket?.columnId, - maxAccessor: gaugeMaxColumn.columnId, + maxAccessor: gaugeMaxColumn?.columnId, + showBar: Boolean(gaugeMaxColumn), palette: gaugePalette, collapseFn: primaryMetricWithCollapseFn.collapseFn, ...(gaugePalette ? {} : { color: primaryColor }), diff --git a/x-pack/examples/third_party_maps_source_example/public/classes/custom_raster_source.tsx b/x-pack/examples/third_party_maps_source_example/public/classes/custom_raster_source.tsx index 3720235173751..7da9dd12b4265 100644 --- a/x-pack/examples/third_party_maps_source_example/public/classes/custom_raster_source.tsx +++ b/x-pack/examples/third_party_maps_source_example/public/classes/custom_raster_source.tsx @@ -12,8 +12,8 @@ import { FieldFormatter, MIN_ZOOM, MAX_ZOOM } from '@kbn/maps-plugin/common'; import type { AbstractSourceDescriptor, Attribution, - DataFilters, DataRequestMeta, + SourceRequestMeta, Timeslice, } from '@kbn/maps-plugin/common/descriptor_types'; import type { @@ -102,10 +102,6 @@ export class CustomRasterSource implements IRasterSource { return false; } - isGeoGridPrecisionAware(): boolean { - return false; - } - isQueryAware(): boolean { return false; } @@ -138,10 +134,6 @@ export class CustomRasterSource implements IRasterSource { return []; } - getGeoGridPrecision(zoom: number): number { - return 0; - } - isESSource(): boolean { return false; } @@ -179,11 +171,11 @@ export class CustomRasterSource implements IRasterSource { return true; } - async getUrlTemplate(dataFilters: DataFilters): Promise { + async getUrlTemplate(requestMeta: SourceRequestMeta): Promise { const defaultUrl = 'https://new.nowcoast.noaa.gov/arcgis/rest/services/nowcoast/radar_meteo_imagery_nexrad_time/MapServer/export?dpi=96&transparent=true&format=png32&time={time}&layers=show%3A3&bbox=-{bbox-epsg-3857}&bboxSR=3857&imageSR=3857&size=256%2C256&f=image'; - const { timeslice, timeFilters } = dataFilters; + const { timeslice, timeFilters } = requestMeta; let timestamp; if (timeslice) { diff --git a/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx b/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx index 20683fb935126..926005ba25d2f 100644 --- a/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx +++ b/x-pack/examples/triggers_actions_ui_example/public/plugin.tsx @@ -137,7 +137,6 @@ export class TriggersActionsUiExamplePlugin const config: AlertsTableConfigurationRegistry = { id: 'observabilityCases', - casesFeatureId: 'observabilityCases', columns, useInternalFlyout, getRenderCellValue: () => (props: any) => { diff --git a/x-pack/plugins/actions/server/actions_client.test.ts b/x-pack/plugins/actions/server/actions_client.test.ts index 3c2d91939e688..d093c6298b7b1 100644 --- a/x-pack/plugins/actions/server/actions_client.test.ts +++ b/x-pack/plugins/actions/server/actions_client.test.ts @@ -542,12 +542,6 @@ describe('create()', () => { proxyOnlyHosts: undefined, maxResponseContentLength: new ByteSizeValue(1000000), responseTimeout: moment.duration('60s'), - cleanupFailedExecutionsTask: { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }, ssl: { verificationMode: 'full', proxyVerificationMode: 'full', diff --git a/x-pack/plugins/actions/server/actions_config.test.ts b/x-pack/plugins/actions/server/actions_config.test.ts index fe0c913543e6a..2c987ae7d48bd 100644 --- a/x-pack/plugins/actions/server/actions_config.test.ts +++ b/x-pack/plugins/actions/server/actions_config.test.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { schema } from '@kbn/config-schema'; import { ByteSizeValue } from '@kbn/config-schema'; import { ActionsConfig } from './config'; import { @@ -30,12 +29,6 @@ const defaultActionsConfig: ActionsConfig = { rejectUnauthorized: true, // legacy maxResponseContentLength: new ByteSizeValue(1000000), responseTimeout: moment.duration(60000), - cleanupFailedExecutionsTask: { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }, ssl: { proxyVerificationMode: 'full', verificationMode: 'full', diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/cleanup_tasks.test.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/cleanup_tasks.test.ts deleted file mode 100644 index 8dfef03162f6d..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/cleanup_tasks.test.ts +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { SavedObjectsFindResult, ISavedObjectsSerializer } from '@kbn/core/server'; -import { loggingSystemMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; -import { spacesMock } from '@kbn/spaces-plugin/server/mocks'; -import { CleanupTasksOpts, cleanupTasks } from './cleanup_tasks'; -import { TaskInstance } from '@kbn/task-manager-plugin/server'; -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; - -describe('cleanupTasks', () => { - const logger = loggingSystemMock.create().get(); - const esClient = elasticsearchServiceMock.createElasticsearchClient(); - const spaces = spacesMock.createStart(); - const savedObjectsSerializer = { - generateRawId: jest - .fn() - .mockImplementation((namespace: string | undefined, type: string, id: string) => { - const namespacePrefix = namespace ? `${namespace}:` : ''; - return `${namespacePrefix}${type}:${id}`; - }), - } as unknown as ISavedObjectsSerializer; - - const cleanupTasksOpts: CleanupTasksOpts = { - logger, - esClient, - spaces, - savedObjectsSerializer, - kibanaIndex: '.kibana', - taskManagerIndex: '.kibana_task_manager', - tasks: [], - }; - - const taskSO: SavedObjectsFindResult = { - id: '123', - type: 'task', - references: [], - score: 0, - attributes: { - id: '123', - taskType: 'foo', - scheduledAt: new Date(), - state: {}, - runAt: new Date(), - startedAt: new Date(), - retryAt: new Date(), - ownerId: '234', - params: { spaceId: undefined, actionTaskParamsId: '123' }, - schedule: { interval: '5m' }, - }, - }; - - beforeEach(() => { - esClient.bulk.mockReset(); - }); - - it('should skip cleanup when there are no tasks to cleanup', async () => { - const result = await cleanupTasks(cleanupTasksOpts); - expect(result).toEqual({ - success: true, - successCount: 0, - failureCount: 0, - }); - expect(esClient.bulk).not.toHaveBeenCalled(); - }); - - it('should delete action_task_params and task objects', async () => { - esClient.bulk.mockResponse({ - items: [], - errors: false, - took: 1, - } as unknown as estypes.BulkResponse); - const result = await cleanupTasks({ - ...cleanupTasksOpts, - tasks: [taskSO], - }); - expect(esClient.bulk).toHaveBeenCalledWith( - { - body: [{ delete: { _index: cleanupTasksOpts.kibanaIndex, _id: 'action_task_params:123' } }], - }, - { meta: true } - ); - expect(esClient.bulk).toHaveBeenCalledWith( - { - body: [{ delete: { _index: cleanupTasksOpts.taskManagerIndex, _id: 'task:123' } }], - }, - { meta: true } - ); - expect(result).toEqual({ - success: true, - successCount: 1, - failureCount: 0, - }); - }); - - it('should not delete the task if the action_task_params failed to delete', async () => { - esClient.bulk.mockResponse({ - items: [ - { - delete: { - _index: cleanupTasksOpts.kibanaIndex, - _id: 'action_task_params:123', - status: 500, - result: 'Failure', - error: true, - }, - }, - ], - errors: true, - took: 1, - } as unknown as estypes.BulkResponse); - const result = await cleanupTasks({ - ...cleanupTasksOpts, - tasks: [taskSO], - }); - expect(esClient.bulk).toHaveBeenCalledWith( - { - body: [{ delete: { _index: cleanupTasksOpts.kibanaIndex, _id: 'action_task_params:123' } }], - }, - { meta: true } - ); - expect(esClient.bulk).not.toHaveBeenCalledWith( - { - body: [{ delete: { _index: cleanupTasksOpts.taskManagerIndex, _id: 'task:123' } }], - }, - { meta: true } - ); - expect(result).toEqual({ - success: false, - successCount: 0, - failureCount: 1, - }); - }); -}); diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/cleanup_tasks.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/cleanup_tasks.ts deleted file mode 100644 index b50f5a738722e..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/cleanup_tasks.ts +++ /dev/null @@ -1,109 +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 { - Logger, - ElasticsearchClient, - SavedObjectsFindResult, - ISavedObjectsSerializer, -} from '@kbn/core/server'; -import { TaskInstance } from '@kbn/task-manager-plugin/server'; -import { SpacesPluginStart } from '@kbn/spaces-plugin/server'; -import { - bulkDelete, - extractBulkResponseDeleteFailures, - getRawActionTaskParamsIdFromTask, -} from './lib'; - -export interface CleanupTasksOpts { - logger: Logger; - esClient: ElasticsearchClient; - tasks: Array>; - spaces?: SpacesPluginStart; - savedObjectsSerializer: ISavedObjectsSerializer; - kibanaIndex: string; - taskManagerIndex: string; -} - -export interface CleanupTasksResult { - success: boolean; - successCount: number; - failureCount: number; -} - -/** - * Cleanup tasks - * - * This function receives action execution tasks that are in a failed state, removes - * the linked "action_task_params" object first and then if successful, the task manager's task. - */ -export async function cleanupTasks({ - logger, - esClient, - tasks, - spaces, - savedObjectsSerializer, - kibanaIndex, - taskManagerIndex, -}: CleanupTasksOpts): Promise { - const deserializedTasks = tasks.map((task) => ({ - ...task, - attributes: { - ...task.attributes, - params: - typeof task.attributes.params === 'string' - ? JSON.parse(task.attributes.params) - : task.attributes.params || {}, - }, - })); - - // Remove accumulated action task params - const actionTaskParamIdsToDelete = deserializedTasks.map((task) => - getRawActionTaskParamsIdFromTask({ task, spaces, savedObjectsSerializer }) - ); - const actionTaskParamBulkDeleteResult = await bulkDelete( - esClient, - kibanaIndex, - actionTaskParamIdsToDelete - ); - const failedActionTaskParams = actionTaskParamBulkDeleteResult - ? extractBulkResponseDeleteFailures(actionTaskParamBulkDeleteResult) - : []; - if (failedActionTaskParams?.length) { - logger.debug( - `Failed to delete the following action_task_params [${JSON.stringify( - failedActionTaskParams - )}]` - ); - } - - // Remove accumulated tasks - const taskIdsToDelete = deserializedTasks - .map((task) => { - const rawId = getRawActionTaskParamsIdFromTask({ task, spaces, savedObjectsSerializer }); - // Avoid removing tasks that failed to remove linked objects - if (failedActionTaskParams?.find((item) => item._id === rawId)) { - return null; - } - const rawTaskId = savedObjectsSerializer.generateRawId(undefined, 'task', task.id); - return rawTaskId; - }) - .filter((id) => !!id) as string[]; - const taskBulkDeleteResult = await bulkDelete(esClient, taskManagerIndex, taskIdsToDelete); - const failedTasks = taskBulkDeleteResult - ? extractBulkResponseDeleteFailures(taskBulkDeleteResult) - : []; - if (failedTasks?.length) { - logger.debug(`Failed to delete the following tasks [${JSON.stringify(failedTasks)}]`); - } - - return { - success: failedActionTaskParams?.length === 0 && failedTasks.length === 0, - successCount: tasks.length - failedActionTaskParams.length - failedTasks.length, - failureCount: failedActionTaskParams.length + failedTasks.length, - }; -} diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/ensure_scheduled.test.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/ensure_scheduled.test.ts deleted file mode 100644 index f3baeb420cc31..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/ensure_scheduled.test.ts +++ /dev/null @@ -1,55 +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 { schema } from '@kbn/config-schema'; -import { ActionsConfig } from '../config'; -import { ensureScheduled } from './ensure_scheduled'; -import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; -import { loggingSystemMock } from '@kbn/core/server/mocks'; - -describe('ensureScheduled', () => { - const logger = loggingSystemMock.create().get(); - const taskManager = taskManagerMock.createStart(); - - const config: ActionsConfig['cleanupFailedExecutionsTask'] = { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }; - - beforeEach(() => jest.resetAllMocks()); - - it(`should call task manager's ensureScheduled function with proper params`, async () => { - await ensureScheduled(taskManager, logger, config); - expect(taskManager.ensureScheduled).toHaveBeenCalledTimes(1); - expect(taskManager.ensureScheduled.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - Object { - "id": "Actions-cleanup_failed_action_executions", - "params": Object {}, - "schedule": Object { - "interval": "5m", - }, - "state": Object { - "runs": 0, - "total_cleaned_up": 0, - }, - "taskType": "cleanup_failed_action_executions", - }, - ] - `); - }); - - it('should log an error and not throw when ensureScheduled function throws', async () => { - taskManager.ensureScheduled.mockRejectedValue(new Error('Fail')); - await ensureScheduled(taskManager, logger, config); - expect(logger.error).toHaveBeenCalledWith( - 'Error scheduling Actions-cleanup_failed_action_executions, received Fail' - ); - }); -}); diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/ensure_scheduled.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/ensure_scheduled.ts deleted file mode 100644 index d40f1ea15e1f9..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/ensure_scheduled.ts +++ /dev/null @@ -1,34 +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 { Logger } from '@kbn/core/server'; -import { TaskManagerStartContract, asInterval } from '@kbn/task-manager-plugin/server'; -import { TASK_ID, TASK_TYPE } from './constants'; -import { ActionsConfig } from '../config'; - -export async function ensureScheduled( - taskManager: TaskManagerStartContract, - logger: Logger, - { cleanupInterval }: ActionsConfig['cleanupFailedExecutionsTask'] -) { - try { - await taskManager.ensureScheduled({ - id: TASK_ID, - taskType: TASK_TYPE, - schedule: { - interval: asInterval(cleanupInterval.asMilliseconds()), - }, - state: { - runs: 0, - total_cleaned_up: 0, - }, - params: {}, - }); - } catch (e) { - logger.error(`Error scheduling ${TASK_ID}, received ${e.message}`); - } -} diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.test.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.test.ts deleted file mode 100644 index 867b07aab8efd..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.test.ts +++ /dev/null @@ -1,168 +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 { CoreStart } from '@kbn/core/server'; -import { schema } from '@kbn/config-schema'; -import { ActionsConfig } from '../config'; -import { ActionsPluginsStart } from '../plugin'; -import { spacesMock } from '@kbn/spaces-plugin/server/mocks'; -import { toElasticsearchQuery } from '@kbn/es-query'; -import { - loggingSystemMock, - savedObjectsRepositoryMock, - savedObjectsServiceMock, - elasticsearchServiceMock, -} from '@kbn/core/server/mocks'; -import { actionTypeRegistryMock } from '../action_type_registry.mock'; -import { FindAndCleanupTasksOpts, findAndCleanupTasks } from './find_and_cleanup_tasks'; - -jest.mock('./cleanup_tasks', () => ({ - cleanupTasks: jest.fn(), -})); - -describe('findAndCleanupTasks', () => { - const logger = loggingSystemMock.create().get(); - const actionTypeRegistry = actionTypeRegistryMock.create(); - const savedObjectsRepository = savedObjectsRepositoryMock.create(); - const esStart = elasticsearchServiceMock.createStart(); - const spaces = spacesMock.createStart(); - const soService = savedObjectsServiceMock.createStartContract(); - const coreStartServices = Promise.resolve([ - { - savedObjects: { - ...soService, - createInternalRepository: () => savedObjectsRepository, - }, - elasticsearch: esStart, - }, - { - spaces, - }, - {}, - ]) as unknown as Promise<[CoreStart, ActionsPluginsStart, unknown]>; - - const config: ActionsConfig['cleanupFailedExecutionsTask'] = { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }; - - const findAndCleanupTasksOpts: FindAndCleanupTasksOpts = { - logger, - actionTypeRegistry, - coreStartServices, - config, - kibanaIndex: '.kibana', - taskManagerIndex: '.kibana_task_manager', - }; - - beforeEach(() => { - actionTypeRegistry.list.mockReturnValue([ - { - id: 'my-action-type', - name: 'My action type', - enabled: true, - enabledInConfig: true, - enabledInLicense: true, - minimumLicenseRequired: 'basic', - supportedFeatureIds: ['alerting'], - }, - ]); - jest.requireMock('./cleanup_tasks').cleanupTasks.mockResolvedValue({ - success: true, - successCount: 0, - failureCount: 0, - }); - savedObjectsRepository.find.mockResolvedValue({ - total: 0, - page: 1, - per_page: 10, - saved_objects: [], - }); - }); - - it('should call the find function with proper parameters', async () => { - await findAndCleanupTasks(findAndCleanupTasksOpts); - expect(savedObjectsRepository.find).toHaveBeenCalledWith({ - type: 'task', - filter: expect.any(Object), - page: 1, - perPage: config.pageSize, - sortField: 'runAt', - sortOrder: 'asc', - }); - expect(toElasticsearchQuery(savedObjectsRepository.find.mock.calls[0][0].filter)) - .toMatchInlineSnapshot(` - Object { - "bool": Object { - "filter": Array [ - Object { - "bool": Object { - "minimum_should_match": 1, - "should": Array [ - Object { - "match": Object { - "task.attributes.status": "failed", - }, - }, - ], - }, - }, - Object { - "bool": Object { - "minimum_should_match": 1, - "should": Array [ - Object { - "match": Object { - "task.attributes.taskType": "actions:my-action-type", - }, - }, - ], - }, - }, - ], - }, - } - `); - }); - - it('should call the cleanupTasks function with proper parameters', async () => { - await findAndCleanupTasks(findAndCleanupTasksOpts); - expect(jest.requireMock('./cleanup_tasks').cleanupTasks).toHaveBeenCalledWith({ - logger: findAndCleanupTasksOpts.logger, - esClient: esStart.client.asInternalUser, - spaces, - kibanaIndex: findAndCleanupTasksOpts.kibanaIndex, - taskManagerIndex: findAndCleanupTasksOpts.taskManagerIndex, - savedObjectsSerializer: soService.createSerializer(), - tasks: [], - }); - }); - - it('should return the cleanup result', async () => { - const result = await findAndCleanupTasks(findAndCleanupTasksOpts); - expect(result).toEqual({ - success: true, - successCount: 0, - failureCount: 0, - remaining: 0, - }); - }); - - it('should log a message before cleaning up tasks', async () => { - await findAndCleanupTasks(findAndCleanupTasksOpts); - expect(logger.debug).toHaveBeenCalledWith('Removing 0 of 0 failed execution task(s)'); - }); - - it('should log a message after cleaning up tasks', async () => { - await findAndCleanupTasks(findAndCleanupTasksOpts); - expect(logger.debug).toHaveBeenCalledWith( - 'Finished cleanup of failed executions. [success=0, failures=0]' - ); - }); -}); diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.ts deleted file mode 100644 index fc180a47b3e2b..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/find_and_cleanup_tasks.ts +++ /dev/null @@ -1,80 +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 { nodeBuilder } from '@kbn/es-query'; -import { Logger, CoreStart } from '@kbn/core/server'; -import { TaskInstance } from '@kbn/task-manager-plugin/server'; -import { ActionsConfig } from '../config'; -import { ActionsPluginsStart } from '../plugin'; -import { ActionTypeRegistryContract } from '../types'; -import { cleanupTasks, CleanupTasksResult } from './cleanup_tasks'; - -export interface FindAndCleanupTasksOpts { - logger: Logger; - actionTypeRegistry: ActionTypeRegistryContract; - coreStartServices: Promise<[CoreStart, ActionsPluginsStart, unknown]>; - config: ActionsConfig['cleanupFailedExecutionsTask']; - kibanaIndex: string; - taskManagerIndex: string; -} - -export interface FindAndCleanupTasksResult extends CleanupTasksResult { - remaining: number; -} - -export async function findAndCleanupTasks({ - logger, - actionTypeRegistry, - coreStartServices, - config, - kibanaIndex, - taskManagerIndex, -}: FindAndCleanupTasksOpts): Promise { - logger.debug('Starting cleanup of failed executions'); - const [{ savedObjects, elasticsearch }, { spaces }] = await coreStartServices; - const esClient = elasticsearch.client.asInternalUser; - const savedObjectsClient = savedObjects.createInternalRepository(['task']); - const savedObjectsSerializer = savedObjects.createSerializer(); - - const result = await savedObjectsClient.find({ - type: 'task', - filter: nodeBuilder.and([ - nodeBuilder.is('task.attributes.status', 'failed'), - nodeBuilder.or( - actionTypeRegistry - .list() - .map((actionType) => - nodeBuilder.is('task.attributes.taskType', `actions:${actionType.id}`) - ) - ), - ]), - page: 1, - perPage: config.pageSize, - sortField: 'runAt', - sortOrder: 'asc', - }); - - logger.debug( - `Removing ${result.saved_objects.length} of ${result.total} failed execution task(s)` - ); - const cleanupResult = await cleanupTasks({ - logger, - esClient, - spaces, - kibanaIndex, - taskManagerIndex, - savedObjectsSerializer, - tasks: result.saved_objects, - }); - logger.debug( - `Finished cleanup of failed executions. [success=${cleanupResult.successCount}, failures=${cleanupResult.failureCount}]` - ); - return { - ...cleanupResult, - remaining: result.total - cleanupResult.successCount, - }; -} diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/lib/bulk_delete.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/lib/bulk_delete.ts deleted file mode 100644 index 398a5ae324038..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/lib/bulk_delete.ts +++ /dev/null @@ -1,29 +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 { ElasticsearchClient } from '@kbn/core/server'; -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { TransportResult } from '@elastic/elasticsearch'; - -export async function bulkDelete( - esClient: ElasticsearchClient, - index: string, - ids: string[] -): Promise | undefined> { - if (ids.length === 0) { - return; - } - - return await esClient.bulk( - { - body: ids.map((id) => ({ - delete: { _index: index, _id: id }, - })), - }, - { meta: true } - ); -} diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/lib/extract_bulk_response_delete_failures.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/lib/extract_bulk_response_delete_failures.ts deleted file mode 100644 index c3b4866f199d3..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/lib/extract_bulk_response_delete_failures.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { TransportResult } from '@elastic/elasticsearch'; - -type ResponseFailures = Array>; - -export function extractBulkResponseDeleteFailures( - response: TransportResult -): ResponseFailures { - const result: ResponseFailures = []; - for (const item of response.body.items) { - if (!item.delete || !item.delete.error) { - continue; - } - - result.push({ - _id: item.delete._id, - status: item.delete.status, - result: item.delete.result, - }); - } - - return result; -} diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/lib/get_raw_action_task_params_id_from_task.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/lib/get_raw_action_task_params_id_from_task.ts deleted file mode 100644 index 18228225e7a2c..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/lib/get_raw_action_task_params_id_from_task.ts +++ /dev/null @@ -1,27 +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 { SavedObjectsFindResult, ISavedObjectsSerializer } from '@kbn/core/server'; -import { TaskInstance } from '@kbn/task-manager-plugin/server'; -import { SpacesPluginStart } from '@kbn/spaces-plugin/server'; -import { spaceIdToNamespace } from '../../lib'; - -interface GetRawActionTaskParamsIdFromTaskOpts { - task: SavedObjectsFindResult; - spaces?: SpacesPluginStart; - savedObjectsSerializer: ISavedObjectsSerializer; -} - -export function getRawActionTaskParamsIdFromTask({ - task, - spaces, - savedObjectsSerializer, -}: GetRawActionTaskParamsIdFromTaskOpts) { - const { spaceId, actionTaskParamsId } = task.attributes.params; - const namespace = spaceIdToNamespace(spaces, spaceId); - return savedObjectsSerializer.generateRawId(namespace, 'action_task_params', actionTaskParamsId); -} diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/register_task_definition.test.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/register_task_definition.test.ts deleted file mode 100644 index 55023844befd9..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/register_task_definition.test.ts +++ /dev/null @@ -1,71 +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 { CoreStart } from '@kbn/core/server'; -import { schema } from '@kbn/config-schema'; -import { ActionsConfig } from '../config'; -import { ActionsPluginsStart } from '../plugin'; -import { registerTaskDefinition } from './register_task_definition'; -import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; -import { loggingSystemMock, coreMock } from '@kbn/core/server/mocks'; -import { actionTypeRegistryMock } from '../action_type_registry.mock'; -import { TaskRunnerOpts } from './task_runner'; - -jest.mock('./task_runner', () => ({ taskRunner: jest.fn() })); - -describe('registerTaskDefinition', () => { - const logger = loggingSystemMock.create().get(); - const taskManager = taskManagerMock.createSetup(); - const actionTypeRegistry = actionTypeRegistryMock.create(); - const coreStartServices = coreMock.createSetup().getStartServices() as Promise< - [CoreStart, ActionsPluginsStart, unknown] - >; - - const config: ActionsConfig['cleanupFailedExecutionsTask'] = { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }; - - const taskRunnerOpts: TaskRunnerOpts = { - logger, - coreStartServices, - actionTypeRegistry, - config, - kibanaIndex: '.kibana', - taskManagerIndex: '.kibana_task_manager', - }; - - beforeEach(() => { - jest.resetAllMocks(); - jest.requireMock('./task_runner').taskRunner.mockReturnValue(jest.fn()); - }); - - it('should call registerTaskDefinitions with proper parameters', () => { - registerTaskDefinition(taskManager, taskRunnerOpts); - expect(taskManager.registerTaskDefinitions).toHaveBeenCalledTimes(1); - expect(taskManager.registerTaskDefinitions.mock.calls).toMatchInlineSnapshot(` - Array [ - Array [ - Object { - "cleanup_failed_action_executions": Object { - "createTaskRunner": [MockFunction], - "title": "Cleanup failed action executions", - }, - }, - ], - ] - `); - }); - - it('should call taskRunner with proper parameters', () => { - registerTaskDefinition(taskManager, taskRunnerOpts); - const { taskRunner } = jest.requireMock('./task_runner'); - expect(taskRunner).toHaveBeenCalledWith(taskRunnerOpts); - }); -}); diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/register_task_definition.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/register_task_definition.ts deleted file mode 100644 index 7b447bc17c2b7..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/register_task_definition.ts +++ /dev/null @@ -1,22 +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 { TaskManagerSetupContract } from '@kbn/task-manager-plugin/server'; -import { TASK_TYPE } from './constants'; -import { taskRunner, TaskRunnerOpts } from './task_runner'; - -export function registerTaskDefinition( - taskManager: TaskManagerSetupContract, - taskRunnerOpts: TaskRunnerOpts -) { - taskManager.registerTaskDefinitions({ - [TASK_TYPE]: { - title: 'Cleanup failed action executions', - createTaskRunner: taskRunner(taskRunnerOpts), - }, - }); -} diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/task_runner.test.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/task_runner.test.ts deleted file mode 100644 index 117e53a2c2145..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/task_runner.test.ts +++ /dev/null @@ -1,108 +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 { CoreStart } from '@kbn/core/server'; -import { schema } from '@kbn/config-schema'; -import { ActionsConfig } from '../config'; -import { ActionsPluginsStart } from '../plugin'; -import { ConcreteTaskInstance, TaskStatus } from '@kbn/task-manager-plugin/server'; -import { loggingSystemMock, coreMock } from '@kbn/core/server/mocks'; -import { actionTypeRegistryMock } from '../action_type_registry.mock'; -import { taskRunner, TaskRunnerOpts } from './task_runner'; - -jest.mock('./find_and_cleanup_tasks', () => ({ - findAndCleanupTasks: jest.fn(), -})); - -describe('taskRunner', () => { - const logger = loggingSystemMock.create().get(); - const actionTypeRegistry = actionTypeRegistryMock.create(); - const coreStartServices = coreMock.createSetup().getStartServices() as Promise< - [CoreStart, ActionsPluginsStart, unknown] - >; - - const config: ActionsConfig['cleanupFailedExecutionsTask'] = { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }; - - const taskRunnerOpts: TaskRunnerOpts = { - logger, - coreStartServices, - actionTypeRegistry, - config, - kibanaIndex: '.kibana', - taskManagerIndex: '.kibana_task_manager', - }; - - const taskInstance: ConcreteTaskInstance = { - id: '123', - scheduledAt: new Date(), - attempts: 0, - status: TaskStatus.Running, - state: { runs: 0, total_cleaned_up: 0 }, - runAt: new Date(), - startedAt: new Date(), - retryAt: new Date(), - ownerId: '234', - taskType: 'foo', - params: {}, - }; - - beforeEach(() => { - jest.resetAllMocks(); - jest.requireMock('./find_and_cleanup_tasks').findAndCleanupTasks.mockResolvedValue({ - success: true, - successCount: 1, - failureCount: 1, - remaining: 0, - }); - }); - - describe('run', () => { - it('should call findAndCleanupTasks with proper parameters', async () => { - const runner = taskRunner(taskRunnerOpts)({ taskInstance }); - await runner.run(); - expect(jest.requireMock('./find_and_cleanup_tasks').findAndCleanupTasks).toHaveBeenCalledWith( - taskRunnerOpts - ); - }); - - it('should update state to reflect cleanup result', async () => { - const runner = taskRunner(taskRunnerOpts)({ taskInstance }); - const { state } = await runner.run(); - expect(state).toEqual({ - runs: 1, - total_cleaned_up: 1, - }); - }); - - it('should return idle schedule when no remaining tasks to cleanup', async () => { - const runner = taskRunner(taskRunnerOpts)({ taskInstance }); - const { schedule } = await runner.run(); - expect(schedule).toEqual({ - interval: '60m', - }); - }); - - it('should return cleanup schedule when there are some remaining tasks to cleanup', async () => { - jest.requireMock('./find_and_cleanup_tasks').findAndCleanupTasks.mockResolvedValue({ - success: true, - successCount: 1, - failureCount: 1, - remaining: 1, - }); - const runner = taskRunner(taskRunnerOpts)({ taskInstance }); - const { schedule } = await runner.run(); - expect(schedule).toEqual({ - interval: '5m', - }); - }); - }); -}); diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/task_runner.ts b/x-pack/plugins/actions/server/cleanup_failed_executions/task_runner.ts deleted file mode 100644 index 141247330d4b0..0000000000000 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/task_runner.ts +++ /dev/null @@ -1,45 +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 { Logger, CoreStart } from '@kbn/core/server'; -import { RunContext, asInterval } from '@kbn/task-manager-plugin/server'; -import { ActionsConfig } from '../config'; -import { ActionsPluginsStart } from '../plugin'; -import { ActionTypeRegistryContract } from '../types'; -import { findAndCleanupTasks } from './find_and_cleanup_tasks'; - -export interface TaskRunnerOpts { - logger: Logger; - actionTypeRegistry: ActionTypeRegistryContract; - coreStartServices: Promise<[CoreStart, ActionsPluginsStart, unknown]>; - config: ActionsConfig['cleanupFailedExecutionsTask']; - kibanaIndex: string; - taskManagerIndex: string; -} - -export function taskRunner(opts: TaskRunnerOpts) { - return ({ taskInstance }: RunContext) => { - const { state } = taskInstance; - return { - async run() { - const cleanupResult = await findAndCleanupTasks(opts); - return { - state: { - runs: state.runs + 1, - total_cleaned_up: state.total_cleaned_up + cleanupResult.successCount, - }, - schedule: { - interval: - cleanupResult.remaining > 0 - ? asInterval(opts.config.cleanupInterval.asMilliseconds()) - : asInterval(opts.config.idleInterval.asMilliseconds()), - }, - }; - }, - }; - }; -} diff --git a/x-pack/plugins/actions/server/config.test.ts b/x-pack/plugins/actions/server/config.test.ts index 475b88089581f..a1e6e96dcc69b 100644 --- a/x-pack/plugins/actions/server/config.test.ts +++ b/x-pack/plugins/actions/server/config.test.ts @@ -23,12 +23,6 @@ describe('config validation', () => { "allowedHosts": Array [ "*", ], - "cleanupFailedExecutionsTask": Object { - "cleanupInterval": "PT5M", - "enabled": true, - "idleInterval": "PT1H", - "pageSize": 100, - }, "enabledActionTypes": Array [ "*", ], @@ -63,12 +57,6 @@ describe('config validation', () => { "allowedHosts": Array [ "*", ], - "cleanupFailedExecutionsTask": Object { - "cleanupInterval": "PT5M", - "enabled": true, - "idleInterval": "PT1H", - "pageSize": 100, - }, "enabledActionTypes": Array [ "*", ], @@ -210,12 +198,6 @@ describe('config validation', () => { "allowedHosts": Array [ "*", ], - "cleanupFailedExecutionsTask": Object { - "cleanupInterval": "PT5M", - "enabled": true, - "idleInterval": "PT1H", - "pageSize": 100, - }, "enabledActionTypes": Array [ "*", ], diff --git a/x-pack/plugins/actions/server/config.ts b/x-pack/plugins/actions/server/config.ts index 05ac2ea85a47e..bbac076783179 100644 --- a/x-pack/plugins/actions/server/config.ts +++ b/x-pack/plugins/actions/server/config.ts @@ -113,12 +113,6 @@ export const configSchema = schema.object({ maxResponseContentLength: schema.byteSize({ defaultValue: '1mb' }), responseTimeout: schema.duration({ defaultValue: '60s' }), customHostSettings: schema.maybe(schema.arrayOf(customHostSettingsSchema)), - cleanupFailedExecutionsTask: schema.object({ - enabled: schema.boolean({ defaultValue: true }), - cleanupInterval: schema.duration({ defaultValue: '5m' }), - idleInterval: schema.duration({ defaultValue: '1h' }), - pageSize: schema.number({ defaultValue: 100 }), - }), microsoftGraphApiUrl: schema.maybe(schema.string()), email: schema.maybe( schema.object({ diff --git a/x-pack/plugins/actions/server/integration_tests/axios_utils_connection.test.ts b/x-pack/plugins/actions/server/integration_tests/axios_utils_connection.test.ts index 13d81223d31a2..ddd128422f25b 100644 --- a/x-pack/plugins/actions/server/integration_tests/axios_utils_connection.test.ts +++ b/x-pack/plugins/actions/server/integration_tests/axios_utils_connection.test.ts @@ -14,7 +14,6 @@ import http from 'http'; import https from 'https'; import axios from 'axios'; import { duration as momentDuration } from 'moment'; -import { schema } from '@kbn/config-schema'; import getPort from 'get-port'; import { request } from '../lib/axios_utils'; @@ -581,12 +580,6 @@ const BaseActionsConfig: ActionsConfig = { maxResponseContentLength: ByteSizeValue.parse('1mb'), responseTimeout: momentDuration(1000 * 30), customHostSettings: undefined, - cleanupFailedExecutionsTask: { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }, }; function getACUfromConfig(config: Partial = {}): ActionsConfigurationUtilities { diff --git a/x-pack/plugins/actions/server/integration_tests/axios_utils_proxy.test.ts b/x-pack/plugins/actions/server/integration_tests/axios_utils_proxy.test.ts index 224fd61c1edd2..2be4e04aaba5b 100644 --- a/x-pack/plugins/actions/server/integration_tests/axios_utils_proxy.test.ts +++ b/x-pack/plugins/actions/server/integration_tests/axios_utils_proxy.test.ts @@ -14,7 +14,6 @@ import http from 'http'; import https from 'https'; import axios from 'axios'; import { duration as momentDuration } from 'moment'; -import { schema } from '@kbn/config-schema'; import getPort from 'get-port'; import { request } from '../lib/axios_utils'; @@ -593,12 +592,6 @@ const BaseActionsConfig: ActionsConfig = { maxResponseContentLength: ByteSizeValue.parse('1mb'), responseTimeout: momentDuration(1000 * 30), customHostSettings: undefined, - cleanupFailedExecutionsTask: { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }, }; function getACUfromConfig(config: Partial = {}): ActionsConfigurationUtilities { diff --git a/x-pack/plugins/actions/server/lib/custom_host_settings.test.ts b/x-pack/plugins/actions/server/lib/custom_host_settings.test.ts index f4712f74d5e31..4bb0825a24ab0 100644 --- a/x-pack/plugins/actions/server/lib/custom_host_settings.test.ts +++ b/x-pack/plugins/actions/server/lib/custom_host_settings.test.ts @@ -7,7 +7,7 @@ import { readFileSync as fsReadFileSync } from 'fs'; import { resolve as pathResolve, join as pathJoin } from 'path'; -import { schema, ByteSizeValue } from '@kbn/config-schema'; +import { ByteSizeValue } from '@kbn/config-schema'; import moment from 'moment'; import { ActionsConfig } from '../config'; @@ -73,12 +73,6 @@ describe('custom_host_settings', () => { rejectUnauthorized: true, maxResponseContentLength: new ByteSizeValue(1000000), responseTimeout: moment.duration(60000), - cleanupFailedExecutionsTask: { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }, }; test('ensure it copies over the config parts that it does not touch', () => { diff --git a/x-pack/plugins/actions/server/plugin.test.ts b/x-pack/plugins/actions/server/plugin.test.ts index d26fc5e680f14..954a2b73d55cb 100644 --- a/x-pack/plugins/actions/server/plugin.test.ts +++ b/x-pack/plugins/actions/server/plugin.test.ts @@ -6,7 +6,7 @@ */ import moment from 'moment'; -import { schema, ByteSizeValue } from '@kbn/config-schema'; +import { ByteSizeValue } from '@kbn/config-schema'; import { PluginInitializerContext, RequestHandlerContext } from '@kbn/core/server'; import { coreMock, httpServerMock } from '@kbn/core/server/mocks'; import { usageCollectionPluginMock } from '@kbn/usage-collection-plugin/server/mocks'; @@ -46,12 +46,6 @@ describe('Actions Plugin', () => { rejectUnauthorized: true, maxResponseContentLength: new ByteSizeValue(1000000), responseTimeout: moment.duration(60000), - cleanupFailedExecutionsTask: { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }, }); plugin = new ActionsPlugin(context); coreSetup = coreMock.createSetup(); @@ -219,12 +213,6 @@ describe('Actions Plugin', () => { rejectUnauthorized: true, maxResponseContentLength: new ByteSizeValue(1000000), responseTimeout: moment.duration('60s'), - cleanupFailedExecutionsTask: { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }, ...overrides, }; } @@ -280,12 +268,6 @@ describe('Actions Plugin', () => { rejectUnauthorized: true, maxResponseContentLength: new ByteSizeValue(1000000), responseTimeout: moment.duration(60000), - cleanupFailedExecutionsTask: { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }, }); plugin = new ActionsPlugin(context); coreSetup = coreMock.createSetup(); @@ -354,12 +336,6 @@ describe('Actions Plugin', () => { rejectUnauthorized: true, maxResponseContentLength: new ByteSizeValue(1000000), responseTimeout: moment.duration('60s'), - cleanupFailedExecutionsTask: { - enabled: true, - cleanupInterval: schema.duration().validate('5m'), - idleInterval: schema.duration().validate('1h'), - pageSize: 100, - }, ...overrides, }; } diff --git a/x-pack/plugins/actions/server/plugin.ts b/x-pack/plugins/actions/server/plugin.ts index debd5917cf687..63bea300af7f7 100644 --- a/x-pack/plugins/actions/server/plugin.ts +++ b/x-pack/plugins/actions/server/plugin.ts @@ -39,10 +39,6 @@ import { IEventLogService, } from '@kbn/event-log-plugin/server'; import { MonitoringCollectionSetup } from '@kbn/monitoring-collection-plugin/server'; -import { - ensureCleanupFailedExecutionsTaskScheduled, - registerCleanupFailedExecutionsTaskDefinition, -} from './cleanup_failed_executions'; import { ActionsConfig, getValidatedConfig } from './config'; import { resolveCustomHosts } from './lib/custom_host_settings'; @@ -343,18 +339,6 @@ export class ActionsPlugin implements Plugin { return this.actionTypeRegistry!.isActionTypeEnabled(id, options); diff --git a/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts b/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts index ff3d9aeecd79f..4456bd363a016 100644 --- a/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts +++ b/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts @@ -254,6 +254,9 @@ describe('mappingFromFieldMap', () => { producer: { type: 'keyword', }, + revision: { + type: 'long', + }, rule_type_id: { type: 'keyword', }, diff --git a/x-pack/plugins/alerting/common/rule.ts b/x-pack/plugins/alerting/common/rule.ts index b886f6af83705..a504d093f8d44 100644 --- a/x-pack/plugins/alerting/common/rule.ts +++ b/x-pack/plugins/alerting/common/rule.ts @@ -186,6 +186,7 @@ export type SanitizedRuleConfig = Pick< | 'throttle' | 'notifyWhen' | 'muteAll' + | 'revision' | 'snoozeSchedule' > & { producer: string; diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner.ts b/x-pack/plugins/alerting/server/task_runner/task_runner.ts index 55a470dc8e4a3..45d22a8fbf2ac 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner.ts @@ -260,6 +260,7 @@ export class TaskRunner< enabled, actions, muteAll, + revision, snoozeSchedule, } = rule; const { @@ -379,6 +380,7 @@ export class TaskRunner< tags, consumer, producer: ruleType.producer, + revision, ruleTypeId: rule.alertTypeId, ruleTypeName: ruleType.name, enabled, diff --git a/x-pack/plugins/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx b/x-pack/plugins/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx index 688a3635b942f..6cb3e8232455c 100644 --- a/x-pack/plugins/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx +++ b/x-pack/plugins/apm/public/components/alerting/ui_components/alert_details_app_section/failed_transaction_chart.tsx @@ -24,6 +24,8 @@ import { APIReturnType } from '../../../../services/rest/create_call_apm_api'; import { errorRateI18n } from '../../../shared/charts/failed_transaction_rate_chart'; import { TimeseriesChart } from '../../../shared/charts/timeseries_chart'; import { yLabelFormat } from './helpers'; +import { usePreferredDataSourceAndBucketSize } from '../../../../hooks/use_preferred_data_source_and_bucket_size'; +import { ApmDocumentType } from '../../../../../common/document_type'; type ErrorRate = APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/charts/error_rate'>; @@ -59,9 +61,17 @@ function FailedTransactionChart({ const { currentPeriodColor: currentPeriodColorErrorRate } = get_timeseries_color.getTimeSeriesColor(ChartType.FAILED_TRANSACTION_RATE); + const preferred = usePreferredDataSourceAndBucketSize({ + start, + end, + kuery: '', + numBuckets: 100, + type: ApmDocumentType.ServiceTransactionMetric, + }); + const { data: dataErrorRate = INITIAL_STATE_ERROR_RATE, status } = useFetcher( (callApmApi) => { - if (transactionType && serviceName && start && end) { + if (transactionType && serviceName && start && end && preferred) { return callApmApi( 'GET /internal/apm/services/{serviceName}/transactions/charts/error_rate', { @@ -76,13 +86,16 @@ function FailedTransactionChart({ end, transactionType, transactionName: undefined, + documentType: preferred.source.documentType, + rollupInterval: preferred.source.rollupInterval, + bucketSizeInSeconds: preferred.bucketSizeInSeconds, }, }, } ); } }, - [environment, serviceName, start, end, transactionType] + [environment, serviceName, start, end, transactionType, preferred] ); const timeseriesErrorRate = [ { diff --git a/x-pack/plugins/apm/public/components/alerting/ui_components/alert_details_app_section/throughput_chart.tsx b/x-pack/plugins/apm/public/components/alerting/ui_components/alert_details_app_section/throughput_chart.tsx index 60b6997ad78d0..f9891eea5f13f 100644 --- a/x-pack/plugins/apm/public/components/alerting/ui_components/alert_details_app_section/throughput_chart.tsx +++ b/x-pack/plugins/apm/public/components/alerting/ui_components/alert_details_app_section/throughput_chart.tsx @@ -25,6 +25,8 @@ import { import { useFetcher } from '../../../../hooks/use_fetcher'; import { TimeseriesChart } from '../../../shared/charts/timeseries_chart'; import { getResponseTimeTickFormatter } from '../../../shared/charts/transaction_charts/helper'; +import { usePreferredDataSourceAndBucketSize } from '../../../../hooks/use_preferred_data_source_and_bucket_size'; +import { ApmDocumentType } from '../../../../../common/document_type'; const INITIAL_STATE = { currentPeriod: [], @@ -54,10 +56,19 @@ function ThroughputChart({ timeZone: string; }) { /* Throughput Chart */ + + const preferred = usePreferredDataSourceAndBucketSize({ + start, + end, + numBuckets: 100, + kuery: '', + type: ApmDocumentType.ServiceTransactionMetric, + }); + const { data: dataThroughput = INITIAL_STATE, status: statusThroughput } = useFetcher( (callApmApi) => { - if (serviceName && transactionType && start && end) { + if (serviceName && transactionType && start && end && preferred) { return callApmApi( 'GET /internal/apm/services/{serviceName}/throughput', { @@ -72,13 +83,16 @@ function ThroughputChart({ end, transactionType, transactionName: undefined, + documentType: preferred.source.documentType, + rollupInterval: preferred.source.rollupInterval, + bucketSizeInSeconds: preferred.bucketSizeInSeconds, }, }, } ); } }, - [environment, serviceName, start, end, transactionType] + [environment, serviceName, start, end, transactionType, preferred] ); const { currentPeriodColor, previousPeriodColor } = getTimeSeriesColor( ChartType.THROUGHPUT diff --git a/x-pack/plugins/apm/public/components/app/service_overview/service_overview_throughput_chart.tsx b/x-pack/plugins/apm/public/components/app/service_overview/service_overview_throughput_chart.tsx index 30df64a9b4d0c..d1dd659ea5e19 100644 --- a/x-pack/plugins/apm/public/components/app/service_overview/service_overview_throughput_chart.tsx +++ b/x-pack/plugins/apm/public/components/app/service_overview/service_overview_throughput_chart.tsx @@ -30,6 +30,8 @@ import { ChartType, getTimeSeriesColor, } from '../../shared/charts/helper/get_timeseries_color'; +import { usePreferredDataSourceAndBucketSize } from '../../../hooks/use_preferred_data_source_and_bucket_size'; +import { ApmDocumentType } from '../../../../common/document_type'; const INITIAL_STATE = { currentPeriod: [], @@ -60,6 +62,14 @@ export function ServiceOverviewThroughputChart({ const { start, end } = useTimeRange({ rangeFrom, rangeTo }); + const preferred = usePreferredDataSourceAndBucketSize({ + start, + end, + numBuckets: 100, + kuery, + type: ApmDocumentType.ServiceTransactionMetric, + }); + const { transactionType, serviceName, transactionTypeStatus } = useApmServiceContext(); @@ -71,7 +81,7 @@ export function ServiceOverviewThroughputChart({ return Promise.resolve(INITIAL_STATE); } - if (serviceName && transactionType && start && end) { + if (serviceName && transactionType && start && end && preferred) { return callApmApi( 'GET /internal/apm/services/{serviceName}/throughput', { @@ -90,6 +100,9 @@ export function ServiceOverviewThroughputChart({ ? offset : undefined, transactionName, + documentType: preferred.source.documentType, + rollupInterval: preferred.source.rollupInterval, + bucketSizeInSeconds: preferred.bucketSizeInSeconds, }, }, } @@ -107,6 +120,7 @@ export function ServiceOverviewThroughputChart({ offset, transactionName, comparisonEnabled, + preferred, ] ); diff --git a/x-pack/plugins/apm/public/components/shared/charts/failed_transaction_rate_chart/index.tsx b/x-pack/plugins/apm/public/components/shared/charts/failed_transaction_rate_chart/index.tsx index 620dacfd19f40..563e041224b87 100644 --- a/x-pack/plugins/apm/public/components/shared/charts/failed_transaction_rate_chart/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/charts/failed_transaction_rate_chart/index.tsx @@ -24,6 +24,8 @@ import { useEnvironmentsContext } from '../../../../context/environments_context import { ApmMlDetectorType } from '../../../../../common/anomaly_detection/apm_ml_detectors'; import { usePreferredServiceAnomalyTimeseries } from '../../../../hooks/use_preferred_service_anomaly_timeseries'; import { ChartType, getTimeSeriesColor } from '../helper/get_timeseries_color'; +import { usePreferredDataSourceAndBucketSize } from '../../../../hooks/use_preferred_data_source_and_bucket_size'; +import { ApmDocumentType } from '../../../../../common/document_type'; function yLabelFormat(y?: number | null) { return asPercent(y || 0, 1); @@ -71,6 +73,14 @@ export function FailedTransactionRateChart({ const { start, end } = useTimeRange({ rangeFrom, rangeTo }); + const preferred = usePreferredDataSourceAndBucketSize({ + start, + end, + numBuckets: 100, + kuery, + type: ApmDocumentType.ServiceTransactionMetric, + }); + const { environment } = useEnvironmentsContext(); const preferredAnomalyTimeseries = usePreferredServiceAnomalyTimeseries( @@ -88,7 +98,7 @@ export function FailedTransactionRateChart({ return Promise.resolve(INITIAL_STATE); } - if (transactionType && serviceName && start && end) { + if (transactionType && serviceName && start && end && preferred) { return callApmApi( 'GET /internal/apm/services/{serviceName}/transactions/charts/error_rate', { @@ -107,6 +117,9 @@ export function FailedTransactionRateChart({ comparisonEnabled && isTimeComparison(offset) ? offset : undefined, + documentType: preferred.source.documentType, + rollupInterval: preferred.source.rollupInterval, + bucketSizeInSeconds: preferred.bucketSizeInSeconds, }, }, } @@ -124,6 +137,7 @@ export function FailedTransactionRateChart({ transactionName, offset, comparisonEnabled, + preferred, ] ); diff --git a/x-pack/plugins/apm/server/lib/transaction_groups/get_failed_transaction_rate.ts b/x-pack/plugins/apm/server/lib/transaction_groups/get_failed_transaction_rate.ts index 0f646be6e0581..ce836c70fb676 100644 --- a/x-pack/plugins/apm/server/lib/transaction_groups/get_failed_transaction_rate.ts +++ b/x-pack/plugins/apm/server/lib/transaction_groups/get_failed_transaction_rate.ts @@ -10,28 +10,22 @@ import { rangeQuery, termQuery, } from '@kbn/observability-plugin/server'; +import { ApmServiceTransactionDocumentType } from '../../../common/document_type'; import { - EVENT_OUTCOME, SERVICE_NAME, TRANSACTION_NAME, TRANSACTION_TYPE, } from '../../../common/es_fields/apm'; -import { EventOutcome } from '../../../common/event_outcome'; +import { RollupInterval } from '../../../common/rollup'; import { environmentQuery } from '../../../common/utils/environment_query'; +import { getOffsetInMs } from '../../../common/utils/get_offset_in_ms'; import { Coordinate } from '../../../typings/timeseries'; -import { - getDocumentTypeFilterForTransactions, - getProcessorEventForTransactions, -} from '../helpers/transactions'; -import { getBucketSizeForAggregatedTransactions } from '../helpers/get_bucket_size_for_aggregated_transactions'; +import { APMEventClient } from '../helpers/create_es_client/create_apm_event_client'; import { calculateFailedTransactionRate, - getOutcomeAggregation, getFailedTransactionRateTimeSeries, + getOutcomeAggregation, } from '../helpers/transaction_error_rate'; -import { getOffsetInMs } from '../../../common/utils/get_offset_in_ms'; -import { APMEventClient } from '../helpers/create_es_client/create_apm_event_client'; -import { ApmDocumentType } from '../../../common/document_type'; export async function getFailedTransactionRate({ environment, @@ -40,11 +34,12 @@ export async function getFailedTransactionRate({ transactionTypes, transactionName, apmEventClient, - searchAggregatedTransactions, start, end, - numBuckets, offset, + documentType, + rollupInterval, + bucketSizeInSeconds, }: { environment: string; kuery: string; @@ -52,11 +47,12 @@ export async function getFailedTransactionRate({ transactionTypes: string[]; transactionName?: string; apmEventClient: APMEventClient; - searchAggregatedTransactions: boolean; start: number; end: number; - numBuckets?: number; offset?: string; + documentType: ApmServiceTransactionDocumentType; + rollupInterval: RollupInterval; + bucketSizeInSeconds: number; }): Promise<{ timeseries: Coordinate[]; average: number | null; @@ -69,28 +65,18 @@ export async function getFailedTransactionRate({ const filter = [ { term: { [SERVICE_NAME]: serviceName } }, - { - terms: { - [EVENT_OUTCOME]: [EventOutcome.failure, EventOutcome.success], - }, - }, { terms: { [TRANSACTION_TYPE]: transactionTypes } }, ...termQuery(TRANSACTION_NAME, transactionName), - ...getDocumentTypeFilterForTransactions(searchAggregatedTransactions), ...rangeQuery(startWithOffset, endWithOffset), ...environmentQuery(environment), ...kqlQuery(kuery), ]; - const outcomes = getOutcomeAggregation( - searchAggregatedTransactions - ? ApmDocumentType.TransactionMetric - : ApmDocumentType.TransactionEvent - ); + const outcomes = getOutcomeAggregation(documentType); const params = { apm: { - events: [getProcessorEventForTransactions(searchAggregatedTransactions)], + sources: [{ documentType, rollupInterval }], }, body: { track_total_hits: false, @@ -101,12 +87,7 @@ export async function getFailedTransactionRate({ timeseries: { date_histogram: { field: '@timestamp', - fixed_interval: getBucketSizeForAggregatedTransactions({ - start: startWithOffset, - end: endWithOffset, - searchAggregatedTransactions, - numBuckets, - }).intervalString, + fixed_interval: `${bucketSizeInSeconds}s`, min_doc_count: 0, extended_bounds: { min: startWithOffset, max: endWithOffset }, }, diff --git a/x-pack/plugins/apm/server/routes/service_map/get_service_map_service_node_info.ts b/x-pack/plugins/apm/server/routes/service_map/get_service_map_service_node_info.ts index 78a544c70b4d2..87963c19e6e08 100644 --- a/x-pack/plugins/apm/server/routes/service_map/get_service_map_service_node_info.ts +++ b/x-pack/plugins/apm/server/routes/service_map/get_service_map_service_node_info.ts @@ -33,6 +33,8 @@ import { percentSystemMemoryUsedScript, } from '../metrics/by_agent/shared/memory'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; +import { ApmDocumentType } from '../../../common/document_type'; +import { RollupInterval } from '../../../common/rollup'; interface Options { apmEventClient: APMEventClient; @@ -136,12 +138,25 @@ async function getFailedTransactionsRateStats({ environment, apmEventClient, serviceName, - searchAggregatedTransactions, start, end, kuery: '', - numBuckets, transactionTypes: defaultTransactionTypes, + bucketSizeInSeconds: getBucketSizeForAggregatedTransactions({ + start, + end, + numBuckets, + searchAggregatedTransactions, + }).bucketSize, + ...(searchAggregatedTransactions + ? { + documentType: ApmDocumentType.TransactionMetric, + rollupInterval: RollupInterval.OneMinute, + } + : { + documentType: ApmDocumentType.TransactionEvent, + rollupInterval: RollupInterval.None, + }), }); return { value: average, diff --git a/x-pack/plugins/apm/server/routes/services/get_throughput.ts b/x-pack/plugins/apm/server/routes/services/get_throughput.ts index c73a6856a1104..6a33c979531e7 100644 --- a/x-pack/plugins/apm/server/routes/services/get_throughput.ts +++ b/x-pack/plugins/apm/server/routes/services/get_throughput.ts @@ -10,25 +10,21 @@ import { rangeQuery, termQuery, } from '@kbn/observability-plugin/server'; +import { ApmServiceTransactionDocumentType } from '../../../common/document_type'; import { SERVICE_NAME, TRANSACTION_NAME, TRANSACTION_TYPE, } from '../../../common/es_fields/apm'; +import { RollupInterval } from '../../../common/rollup'; import { environmentQuery } from '../../../common/utils/environment_query'; -import { - getDocumentTypeFilterForTransactions, - getProcessorEventForTransactions, -} from '../../lib/helpers/transactions'; import { getOffsetInMs } from '../../../common/utils/get_offset_in_ms'; -import { getBucketSizeForAggregatedTransactions } from '../../lib/helpers/get_bucket_size_for_aggregated_transactions'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; import { Maybe } from '../../../typings/common'; interface Options { environment: string; kuery: string; - searchAggregatedTransactions: boolean; serviceName: string; apmEventClient: APMEventClient; transactionType: string; @@ -36,6 +32,9 @@ interface Options { start: number; end: number; offset?: string; + documentType: ApmServiceTransactionDocumentType; + rollupInterval: RollupInterval; + bucketSizeInSeconds: number; } export type ServiceThroughputResponse = Array<{ x: number; y: Maybe }>; @@ -43,7 +42,6 @@ export type ServiceThroughputResponse = Array<{ x: number; y: Maybe }>; export async function getThroughput({ environment, kuery, - searchAggregatedTransactions, serviceName, apmEventClient, transactionType, @@ -51,6 +49,9 @@ export async function getThroughput({ start, end, offset, + documentType, + rollupInterval, + bucketSizeInSeconds, }: Options): Promise { const { startWithOffset, endWithOffset } = getOffsetInMs({ start, @@ -58,15 +59,9 @@ export async function getThroughput({ offset, }); - const { intervalString } = getBucketSizeForAggregatedTransactions({ - start: startWithOffset, - end: endWithOffset, - searchAggregatedTransactions, - }); - const params = { apm: { - events: [getProcessorEventForTransactions(searchAggregatedTransactions)], + sources: [{ documentType, rollupInterval }], }, body: { track_total_hits: false, @@ -76,9 +71,6 @@ export async function getThroughput({ filter: [ { term: { [SERVICE_NAME]: serviceName } }, { term: { [TRANSACTION_TYPE]: transactionType } }, - ...getDocumentTypeFilterForTransactions( - searchAggregatedTransactions - ), ...rangeQuery(startWithOffset, endWithOffset), ...environmentQuery(environment), ...kqlQuery(kuery), @@ -90,7 +82,7 @@ export async function getThroughput({ timeseries: { date_histogram: { field: '@timestamp', - fixed_interval: intervalString, + fixed_interval: `${bucketSizeInSeconds}s`, min_doc_count: 0, extended_bounds: { min: startWithOffset, max: endWithOffset }, }, diff --git a/x-pack/plugins/apm/server/routes/services/route.ts b/x-pack/plugins/apm/server/routes/services/route.ts index 2db05a6846735..2b31be70ad6ba 100644 --- a/x-pack/plugins/apm/server/routes/services/route.ts +++ b/x-pack/plugins/apm/server/routes/services/route.ts @@ -523,9 +523,15 @@ const serviceThroughputRoute = createApmServerRoute({ serviceName: t.string, }), query: t.intersection([ - t.type({ transactionType: t.string }), + t.type({ transactionType: t.string, bucketSizeInSeconds: toNumberRt }), t.partial({ transactionName: t.string }), - t.intersection([environmentRt, kueryRt, rangeRt, offsetRt]), + t.intersection([ + environmentRt, + kueryRt, + rangeRt, + offsetRt, + serviceTransactionDataSourceRt, + ]), ]), }), options: { tags: ['access:apm'] }, @@ -536,7 +542,7 @@ const serviceThroughputRoute = createApmServerRoute({ previousPeriod: ServiceThroughputResponse; }> => { const apmEventClient = await getApmEventClient(resources); - const { params, config } = resources; + const { params } = resources; const { serviceName } = params.path; const { environment, @@ -546,23 +552,21 @@ const serviceThroughputRoute = createApmServerRoute({ offset, start, end, + documentType, + rollupInterval, + bucketSizeInSeconds, } = params.query; - const searchAggregatedTransactions = await getSearchTransactionsEvents({ - config, - apmEventClient, - kuery, - start, - end, - }); const commonProps = { environment, kuery, - searchAggregatedTransactions, serviceName, apmEventClient, transactionType, transactionName, + documentType, + rollupInterval, + bucketSizeInSeconds, }; const [currentPeriod, previousPeriod] = await Promise.all([ diff --git a/x-pack/plugins/apm/server/routes/transactions/get_failed_transaction_rate_periods.ts b/x-pack/plugins/apm/server/routes/transactions/get_failed_transaction_rate_periods.ts index 3b0bc38d1ad8d..5b77a780bce6a 100644 --- a/x-pack/plugins/apm/server/routes/transactions/get_failed_transaction_rate_periods.ts +++ b/x-pack/plugins/apm/server/routes/transactions/get_failed_transaction_rate_periods.ts @@ -8,6 +8,8 @@ import { getFailedTransactionRate } from '../../lib/transaction_groups/get_faile import { offsetPreviousPeriodCoordinates } from '../../../common/utils/offset_previous_period_coordinate'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; import { Coordinate } from '../../../typings/timeseries'; +import { ApmServiceTransactionDocumentType } from '../../../common/document_type'; +import { RollupInterval } from '../../../common/rollup'; export interface FailedTransactionRateResponse { currentPeriod: { @@ -27,10 +29,12 @@ export async function getFailedTransactionRatePeriods({ transactionType, transactionName, apmEventClient, - searchAggregatedTransactions, start, end, offset, + documentType, + rollupInterval, + bucketSizeInSeconds, }: { environment: string; kuery: string; @@ -38,10 +42,12 @@ export async function getFailedTransactionRatePeriods({ transactionType: string; transactionName?: string; apmEventClient: APMEventClient; - searchAggregatedTransactions: boolean; start: number; end: number; offset?: string; + documentType: ApmServiceTransactionDocumentType; + rollupInterval: RollupInterval; + bucketSizeInSeconds: number; }): Promise { const commonProps = { environment, @@ -50,7 +56,9 @@ export async function getFailedTransactionRatePeriods({ transactionTypes: [transactionType], transactionName, apmEventClient, - searchAggregatedTransactions, + documentType, + rollupInterval, + bucketSizeInSeconds, }; const currentPeriodPromise = getFailedTransactionRate({ diff --git a/x-pack/plugins/apm/server/routes/transactions/route.ts b/x-pack/plugins/apm/server/routes/transactions/route.ts index 55ad9685e984d..2783d3465c87f 100644 --- a/x-pack/plugins/apm/server/routes/transactions/route.ts +++ b/x-pack/plugins/apm/server/routes/transactions/route.ts @@ -334,16 +334,22 @@ const transactionChartsErrorRateRoute = createApmServerRoute({ serviceName: t.string, }), query: t.intersection([ - t.type({ transactionType: t.string }), + t.type({ transactionType: t.string, bucketSizeInSeconds: toNumberRt }), t.partial({ transactionName: t.string }), - t.intersection([environmentRt, kueryRt, rangeRt, offsetRt]), + t.intersection([ + environmentRt, + kueryRt, + rangeRt, + offsetRt, + serviceTransactionDataSourceRt, + ]), ]), }), options: { tags: ['access:apm'] }, handler: async (resources): Promise => { const apmEventClient = await getApmEventClient(resources); - const { params, config } = resources; + const { params } = resources; const { serviceName } = params.path; const { environment, @@ -353,16 +359,11 @@ const transactionChartsErrorRateRoute = createApmServerRoute({ start, end, offset, + documentType, + rollupInterval, + bucketSizeInSeconds, } = params.query; - const searchAggregatedTransactions = await getSearchTransactionsEvents({ - config, - apmEventClient, - kuery, - start, - end, - }); - return getFailedTransactionRatePeriods({ environment, kuery, @@ -370,10 +371,12 @@ const transactionChartsErrorRateRoute = createApmServerRoute({ transactionType, transactionName, apmEventClient, - searchAggregatedTransactions, start, end, offset, + documentType, + rollupInterval, + bucketSizeInSeconds, }); }, }); diff --git a/x-pack/plugins/cases/public/client/helpers/group_alerts_by_rule.ts b/x-pack/plugins/cases/public/client/helpers/group_alerts_by_rule.ts index 965495e39eaf8..098a59ef2fd3d 100644 --- a/x-pack/plugins/cases/public/client/helpers/group_alerts_by_rule.ts +++ b/x-pack/plugins/cases/public/client/helpers/group_alerts_by_rule.ts @@ -23,7 +23,9 @@ interface EventNonEcsData { type CommentRequestAlertTypeWithoutOwner = Omit; -export const groupAlertsByRule = (items: Event[]): CaseAttachmentsWithoutOwner => { +export type GroupAlertsByRule = (items: Event[]) => CaseAttachmentsWithoutOwner; + +export const groupAlertsByRule: GroupAlertsByRule = (items) => { const attachmentsByRule = items.reduce>( (acc, item) => { const rule = getRuleIdFromEvent(item); diff --git a/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.test.tsx b/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.test.tsx index cc164b2396f60..5b921efca97bd 100644 --- a/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.test.tsx @@ -32,13 +32,13 @@ jest.mock('./all_cases_selector_modal', () => { }; }); +const onSuccess = jest.fn(); const useCasesToastMock = useCasesToast as jest.Mock; - const AllCasesSelectorModalMock = AllCasesSelectorModal as unknown as jest.Mock; // test component to test the hook integration const TestComponent: React.FC = () => { - const hook = useCasesAddToExistingCaseModal(); + const hook = useCasesAddToExistingCaseModal({ onSuccess }); const onClick = () => { hook.open({ attachments: [alertComment] }); @@ -81,13 +81,14 @@ describe('use cases add to existing case modal hook', () => { }; const defaultParams = () => { - return { onRowClick: jest.fn() }; + return { onSuccess }; }; beforeEach(() => { appMockRender = createAppMockRenderer(); dispatch.mockReset(); AllCasesSelectorModalMock.mockReset(); + onSuccess.mockReset(); }); it('should throw if called outside of a cases context', () => { @@ -167,6 +168,31 @@ describe('use cases add to existing case modal hook', () => { expect(mockedToastSuccess).toHaveBeenCalled(); }); + it('should call onSuccess when defined', async () => { + const mockBulkCreateAttachments = jest.fn(); + + useCreateAttachmentsMock.mockReturnValueOnce({ + createAttachments: mockBulkCreateAttachments, + }); + + const mockedToastSuccess = jest.fn(); + useCasesToastMock.mockReturnValue({ + showSuccessAttach: mockedToastSuccess, + }); + + AllCasesSelectorModalMock.mockImplementation(({ onRowClick }) => { + onRowClick({ id: 'test' } as Case); + return null; + }); + + const result = appMockRender.render(); + userEvent.click(result.getByTestId('open-modal')); + + await waitFor(() => { + expect(onSuccess).toHaveBeenCalled(); + }); + }); + it('should not call createAttachments nor show toast success when a case is not selected', async () => { const mockBulkCreateAttachments = jest.fn(); useCreateAttachmentsMock.mockReturnValueOnce({ diff --git a/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.tsx b/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.tsx index 057973f82e0d2..676e5eaf8e335 100644 --- a/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/selector_modal/use_cases_add_to_existing_case_modal.tsx @@ -17,19 +17,18 @@ import type { CaseAttachmentsWithoutOwner } from '../../../types'; import { useCreateAttachments } from '../../../containers/use_create_attachments'; import { useAddAttachmentToExistingCaseTransaction } from '../../../common/apm/use_cases_transactions'; -type AddToExistingFlyoutProps = AllCasesSelectorModalProps & { +type AddToExistingFlyoutProps = Omit & { toastTitle?: string; toastContent?: string; + onSuccess?: (theCase: Case) => void; }; export const useCasesAddToExistingCaseModal = (props: AddToExistingFlyoutProps = {}) => { const createNewCaseFlyout = useCasesAddToNewCaseFlyout({ onClose: props.onClose, - // TODO there's no need for onSuccess to be async. This will be fixed - // in a follow up clean up - onSuccess: async (theCase?: Case) => { - if (props.onRowClick) { - return props.onRowClick(theCase); + onSuccess: (theCase?: Case) => { + if (props.onSuccess && theCase) { + return props.onSuccess(theCase); } }, toastTitle: props.toastTitle, @@ -74,6 +73,10 @@ export const useCasesAddToExistingCaseModal = (props: AddToExistingFlyoutProps = throwOnError: true, }); + if (props.onSuccess) { + props.onSuccess(theCase); + } + casesToasts.showSuccessAttach({ theCase, attachments, @@ -85,10 +88,6 @@ export const useCasesAddToExistingCaseModal = (props: AddToExistingFlyoutProps = // error toast is handled // inside the createAttachments method } - - if (props.onRowClick) { - props.onRowClick(theCase); - } }, [ props, @@ -114,6 +113,7 @@ export const useCasesAddToExistingCaseModal = (props: AddToExistingFlyoutProps = }, onClose: () => { closeModal(); + if (props.onClose) { return props.onClose(); } diff --git a/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.tsx b/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.tsx index 3cab988a5ab74..216d80a702dec 100644 --- a/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.tsx +++ b/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.tsx @@ -11,6 +11,7 @@ import { EuiFlyout, EuiFlyoutHeader, EuiTitle, EuiFlyoutBody } from '@elastic/eu import { QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import { noop } from 'lodash'; import type { CasePostRequest } from '../../../../common/api'; import * as i18n from '../translations'; import type { Case } from '../../../../common/ui/types'; @@ -25,7 +26,7 @@ export interface CreateCaseFlyoutProps { createAttachments: UseCreateAttachments['createAttachments'] ) => Promise; onClose?: () => void; - onSuccess?: (theCase: Case) => Promise; + onSuccess?: (theCase: Case) => void; attachments?: CaseAttachmentsWithoutOwner; headerContent?: React.ReactNode; initialValue?: Pick; @@ -76,8 +77,8 @@ const FormWrapper = styled.div` export const CreateCaseFlyout = React.memo( ({ afterCaseCreated, attachments, headerContent, initialValue, onClose, onSuccess }) => { - const handleCancel = onClose || function () {}; - const handleOnSuccess = onSuccess || async function () {}; + const handleCancel = onClose || noop; + const handleOnSuccess = onSuccess || noop; return ( diff --git a/x-pack/plugins/cases/public/components/create/form.tsx b/x-pack/plugins/cases/public/components/create/form.tsx index 7be18f167ab1f..05dfef2063630 100644 --- a/x-pack/plugins/cases/public/components/create/form.tsx +++ b/x-pack/plugins/cases/public/components/create/form.tsx @@ -69,7 +69,7 @@ export interface CreateCaseFormFieldsProps { } export interface CreateCaseFormProps extends Pick, 'withSteps'> { onCancel: () => void; - onSuccess: (theCase: Case) => Promise; + onSuccess: (theCase: Case) => void; afterCaseCreated?: ( theCase: Case, createAttachments: UseCreateAttachments['createAttachments'] @@ -208,7 +208,7 @@ export const CreateCaseForm: React.FC = React.memo( onConfirmationCallback: handleOnConfirmationCallback, }); - const handleOnSuccess = (theCase: Case): Promise => { + const handleOnSuccess = (theCase: Case): void => { removeItemFromSessionStorage(draftStorageKey); return onSuccess(theCase); }; diff --git a/x-pack/plugins/cases/public/components/create/form_context.tsx b/x-pack/plugins/cases/public/components/create/form_context.tsx index ba859b21d7b0f..979a2aa40cc27 100644 --- a/x-pack/plugins/cases/public/components/create/form_context.tsx +++ b/x-pack/plugins/cases/public/components/create/form_context.tsx @@ -43,7 +43,7 @@ interface Props { createAttachments: UseCreateAttachments['createAttachments'] ) => Promise; children?: JSX.Element | JSX.Element[]; - onSuccess?: (theCase: Case) => Promise; + onSuccess?: (theCase: Case) => void; attachments?: CaseAttachmentsWithoutOwner; initialValue?: Pick; } @@ -112,7 +112,7 @@ export const FormContext: React.FC = ({ } if (onSuccess && updatedCase) { - await onSuccess(updatedCase); + onSuccess(updatedCase); } } }, diff --git a/x-pack/plugins/cases/public/mocks.ts b/x-pack/plugins/cases/public/mocks.ts index 10678512d178e..b16e4895a6463 100644 --- a/x-pack/plugins/cases/public/mocks.ts +++ b/x-pack/plugins/cases/public/mocks.ts @@ -22,10 +22,13 @@ const uiMock: jest.Mocked = { }; export const openAddToExistingCaseModalMock = jest.fn(); +export const openAddToNewCaseFlyoutMock = jest.fn(); const hooksMock: jest.Mocked = { - getUseCasesAddToNewCaseFlyout: jest.fn(), - getUseCasesAddToExistingCaseModal: jest.fn().mockImplementation(() => ({ + useCasesAddToNewCaseFlyout: jest.fn().mockImplementation(() => ({ + open: openAddToNewCaseFlyoutMock, + })), + useCasesAddToExistingCaseModal: jest.fn().mockImplementation(() => ({ open: openAddToExistingCaseModalMock, })), }; diff --git a/x-pack/plugins/cases/public/plugin.ts b/x-pack/plugins/cases/public/plugin.ts index 83b0f2fb0f009..4053e35aa6cfc 100644 --- a/x-pack/plugins/cases/public/plugin.ts +++ b/x-pack/plugins/cases/public/plugin.ts @@ -133,14 +133,14 @@ export class CasesUiPlugin externalReferenceAttachmentTypeRegistry: this.externalReferenceAttachmentTypeRegistry, persistableStateAttachmentTypeRegistry: this.persistableStateAttachmentTypeRegistry, }), - // @deprecated Please use the hook getUseCasesAddToNewCaseFlyout + // @deprecated Please use the hook useCasesAddToNewCaseFlyout getCreateCaseFlyout: (props) => getCreateCaseFlyoutLazy({ ...props, externalReferenceAttachmentTypeRegistry: this.externalReferenceAttachmentTypeRegistry, persistableStateAttachmentTypeRegistry: this.persistableStateAttachmentTypeRegistry, }), - // @deprecated Please use the hook getUseCasesAddToExistingCaseModal + // @deprecated Please use the hook useCasesAddToExistingCaseModal getAllCasesSelectorModal: (props) => getAllCasesSelectorModalLazy({ ...props, @@ -149,8 +149,8 @@ export class CasesUiPlugin }), }, hooks: { - getUseCasesAddToNewCaseFlyout: useCasesAddToNewCaseFlyout, - getUseCasesAddToExistingCaseModal: useCasesAddToExistingCaseModal, + useCasesAddToNewCaseFlyout, + useCasesAddToExistingCaseModal, }, helpers: { canUseCases: canUseCases(core.application.capabilities), diff --git a/x-pack/plugins/cases/public/types.ts b/x-pack/plugins/cases/public/types.ts index a72f9e5449a95..7df2e8f950271 100644 --- a/x-pack/plugins/cases/public/types.ts +++ b/x-pack/plugins/cases/public/types.ts @@ -45,7 +45,7 @@ import type { GetAllCasesSelectorModalProps } from './client/ui/get_all_cases_se import type { GetCreateCaseFlyoutProps } from './client/ui/get_create_case_flyout'; import type { GetRecentCasesProps } from './client/ui/get_recent_cases'; import type { Cases, CasesStatus, CasesMetrics } from '../common/ui'; -import type { groupAlertsByRule } from './client/helpers/group_alerts_by_rule'; +import type { GroupAlertsByRule } from './client/helpers/group_alerts_by_rule'; import type { getUICapabilities } from './client/helpers/capabilities'; import type { AttachmentFramework } from './client/attachment_framework/types'; import type { ExternalReferenceAttachmentTypeRegistry } from './client/attachment_framework/external_reference_registry'; @@ -137,8 +137,8 @@ export interface CasesUiStart { getRecentCases: (props: GetRecentCasesProps) => ReactElement; }; hooks: { - getUseCasesAddToNewCaseFlyout: UseCasesAddToNewCaseFlyout; - getUseCasesAddToExistingCaseModal: UseCasesAddToExistingCaseModal; + useCasesAddToNewCaseFlyout: UseCasesAddToNewCaseFlyout; + useCasesAddToExistingCaseModal: UseCasesAddToExistingCaseModal; }; helpers: { /** @@ -152,7 +152,7 @@ export interface CasesUiStart { canUseCases: ReturnType; getUICapabilities: typeof getUICapabilities; getRuleIdFromEvent: typeof getRuleIdFromEvent; - groupAlertsByRule: typeof groupAlertsByRule; + groupAlertsByRule: GroupAlertsByRule; }; } diff --git a/x-pack/plugins/enterprise_search/common/ml_inference_pipeline/index.ts b/x-pack/plugins/enterprise_search/common/ml_inference_pipeline/index.ts index 4917ac29397e6..a633ed93eb78f 100644 --- a/x-pack/plugins/enterprise_search/common/ml_inference_pipeline/index.ts +++ b/x-pack/plugins/enterprise_search/common/ml_inference_pipeline/index.ts @@ -35,6 +35,9 @@ export const SUPPORTED_PYTORCH_TASKS = { ZERO_SHOT_CLASSIFICATION: 'zero_shot_classification', } as const; +export const ELSER_TASK_TYPE = 'text_expansion'; +export const LANG_IDENT_MODEL_TYPE = 'lang_ident'; + export interface MlInferencePipelineParams { description?: string; destinationField: string; @@ -206,8 +209,13 @@ export const parseMlInferenceParametersFromPipeline = ( }; }; -export const parseModelStateFromStats = (trainedModelStats?: Partial) => { - switch (trainedModelStats?.deployment_stats?.state) { +export const parseModelStateFromStats = ( + model?: Partial & Partial, + modelTypes?: string[] +) => { + if (model?.model_type === LANG_IDENT_MODEL_TYPE || modelTypes?.includes(LANG_IDENT_MODEL_TYPE)) + return TrainedModelState.Started; + switch (model?.deployment_stats?.state) { case 'started': return TrainedModelState.Started; case 'starting': diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_schema.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_schema.tsx index a5ec5aa7a0557..8a5bae680e34e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_schema.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_schema.tsx @@ -24,8 +24,6 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { FieldIcon } from '@kbn/react-field'; - import { SchemaField } from '../../../../../common/types/engines'; import { docLinks } from '../../../shared/doc_links'; import { generateEncodedPath } from '../../../shared/encode_path_params'; @@ -37,6 +35,7 @@ import { EnterpriseSearchEnginesPageTemplate } from '../layout/engines_page_temp import { EngineIndicesLogic } from './engine_indices_logic'; import { EngineViewLogic } from './engine_view_logic'; +import { FieldIcon } from './field_icon'; const SchemaFieldDetails: React.FC<{ schemaField: SchemaField }> = ({ schemaField }) => { const { navigateToUrl } = useValues(KibanaLogic); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/convert_results.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/convert_results.ts index 8d00549c6554c..c55200e7917ce 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/convert_results.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/convert_results.ts @@ -28,6 +28,10 @@ export interface ConvertedResult { value: string; } +export interface ConvertedResultWithType extends ConvertedResult { + type: string; +} + export const convertResults = (result: Record): ConvertedResult[] => { const flattenedResult = flattenObject(result); const unsortedFields = Object.entries(flattenedResult).map( @@ -39,3 +43,13 @@ export const convertResults = (result: Record): ConvertedResult const sortedFields = unsortedFields.sort((a, b) => a.field.localeCompare(b.field)); return sortedFields; }; + +export const addTypeToResults = ( + results: ConvertedResult[], + fieldTypes: Record +): ConvertedResultWithType[] => { + return results.map((result) => { + const type = fieldTypes[result.field]; + return { ...result, type }; + }); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/document_flyout.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/document_flyout.tsx index ee7c7f5524419..0d1151cc8db9d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/document_flyout.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/document_flyout.tsx @@ -7,6 +7,8 @@ import React, { useMemo } from 'react'; +import { useValues } from 'kea'; + import { EuiBasicTableColumn, EuiFlexGroup, @@ -21,14 +23,21 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { ConvertedResult, convertResults } from './convert_results'; +import { FieldIcon } from '../field_icon'; + +import { addTypeToResults, ConvertedResultWithType, convertResults } from './convert_results'; import { useSelectedDocument } from './document_context'; +import { EngineSearchPreviewLogic } from './engine_search_preview_logic'; export const DocumentFlyout: React.FC = () => { + const { fieldTypesByIndex } = useValues(EngineSearchPreviewLogic); const { selectedDocument, setSelectedDocument } = useSelectedDocument(); - const [id, items] = useMemo((): [string | null, ConvertedResult[]] => { - if (!selectedDocument) return [null, []]; + const index = selectedDocument?._meta.rawHit._index; + + const [id, items] = useMemo((): [string | null, ConvertedResultWithType[]] => { + const fieldTypes = fieldTypesByIndex[index]; + if (!selectedDocument || !fieldTypes) return [null, []]; const { _meta: { id: encodedId }, id: _id, @@ -41,24 +50,26 @@ export const DocumentFlyout: React.FC = () => { ), id: parsedId, }; - return [parsedId, convertResults(fields)]; - }, [selectedDocument]); + return [parsedId, addTypeToResults(convertResults(fields), fieldTypes)]; + }, [fieldTypesByIndex, index, selectedDocument]); if (selectedDocument === null) return null; - const columns: Array> = [ + const columns: Array> = [ { - field: 'field', name: i18n.translate( 'xpack.enterpriseSearch.content.engine.searchPreview.documentFlyout.fieldLabel', { defaultMessage: 'Field' } ), - render: (key: string) => ( - - - {key} - - + render: ({ field: key, type }: ConvertedResultWithType) => ( + + + + + {key} + + + ), truncateText: false, }, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/engine_search_preview_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/engine_search_preview_logic.ts index be453e046225a..e7ac955827d47 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/engine_search_preview_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/engine_search_preview_logic.ts @@ -19,6 +19,7 @@ interface EngineSearchPreviewActions { export interface EngineSearchPreviewValues { engineFieldCapabilitiesData: typeof FetchEngineFieldCapabilitiesApiLogic.values.data; engineName: typeof EngineNameLogic.values.engineName; + fieldTypesByIndex: Record>; resultFields: Record; searchableFields: Record; sortableFields: string[]; @@ -50,6 +51,27 @@ export const EngineSearchPreviewLogic = kea< }), path: ['enterprise_search', 'content', 'engine_search_preview_logic'], selectors: ({ selectors }) => ({ + fieldTypesByIndex: [ + () => [selectors.engineFieldCapabilitiesData], + (data: EngineSearchPreviewValues['engineFieldCapabilitiesData']) => { + if (!data) return {}; + + return data.fields.reduce( + (out: Record>, field) => + field.indices.reduce( + (acc: Record>, index) => ({ + ...acc, + [index.name]: { + ...(acc[index.name] || {}), + [field.name]: index.type, + }, + }), + out + ), + {} + ); + }, + ], resultFields: [ () => [selectors.engineFieldCapabilitiesData], (data: EngineSearchPreviewValues['engineFieldCapabilitiesData']) => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/field_icon.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/field_icon.tsx new file mode 100644 index 0000000000000..614b0582ba07b --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/field_icon.tsx @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { EuiTokenProps } from '@elastic/eui'; +import { FieldIcon as KbnFieldIcon } from '@kbn/react-field'; + +// Remappings from type to a supported `FieldIcon` type +const typeToFieldIconType: Partial> = { + integer: 'number', +}; + +// Mappings for types missing from `FieldIcon` +const typeToEuiIconMap: Partial> = { + object: { color: 'euiColorVis3', iconType: 'tokenObject' }, +}; + +export interface FieldIconProps { + type: string; +} + +export const FieldIcon: React.FC = (props) => { + const type = typeToFieldIconType[props.type] || props.type; + const overrides = typeToEuiIconMap[type] || {}; + return ; +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.test.tsx index d8db39d01722d..bdae531bb39c0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.test.tsx @@ -11,12 +11,13 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiBadge, EuiButtonIcon, EuiPanel, EuiTextColor, EuiTitle } from '@elastic/eui'; +import { EuiButtonIcon, EuiPanel, EuiTextColor, EuiTitle } from '@elastic/eui'; import { InferencePipeline, TrainedModelState } from '../../../../../../common/types/pipelines'; import { InferencePipelineCard } from './inference_pipeline_card'; import { TrainedModelHealth } from './ml_model_health'; +import { MLModelTypeBadge } from './ml_model_type_badge'; export const DEFAULT_VALUES: InferencePipeline = { modelId: 'sample-bert-ner-model', @@ -64,8 +65,8 @@ describe('InferencePipelineCard', () => { }); it('renders model type as badge', () => { const wrapper = shallow(); - expect(wrapper.find(EuiBadge)).toHaveLength(1); - const badge = wrapper.find(EuiBadge).render(); + expect(wrapper.find(MLModelTypeBadge)).toHaveLength(1); + const badge = wrapper.find(MLModelTypeBadge).render(); expect(badge.text()).toBe('ner'); }); it('renders fix button when model not deployed', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.tsx index c0cb7dd1375f1..700fe4fc2983c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/inference_pipeline_card.tsx @@ -10,7 +10,6 @@ import React, { useState } from 'react'; import { useActions, useValues } from 'kea'; import { - EuiBadge, EuiButtonEmpty, EuiButtonIcon, EuiConfirmModal, @@ -38,6 +37,7 @@ import { IndexViewLogic } from '../index_view_logic'; import { DeleteInferencePipelineButton } from './delete_inference_pipeline_button'; import { TrainedModelHealth } from './ml_model_health'; +import { MLModelTypeBadge } from './ml_model_type_badge'; import { PipelinesLogic } from './pipelines_logic'; export const InferencePipelineCard: React.FC = (pipeline) => { @@ -180,7 +180,7 @@ export const InferencePipelineCard: React.FC = (pipeline) => - {modelType} + diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/customize_pipeline_item.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/customize_pipeline_item.test.tsx index 6d2e832387315..ca281cb2ae54a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/customize_pipeline_item.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/customize_pipeline_item.test.tsx @@ -12,9 +12,11 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiText, EuiButtonEmpty } from '@elastic/eui'; +import { EuiCallOut, EuiButton } from '@elastic/eui'; -import { CustomizeIngestPipelineItem } from './customize_pipeline_item'; +import { LicensingCallout } from '../../../shared/licensing_callout/licensing_callout'; + +import { CopyAndCustomizePipelinePanel } from './customize_pipeline_item'; const DEFAULT_VALUES = { // LicensingLogic @@ -24,45 +26,39 @@ const DEFAULT_VALUES = { ingestionMethod: 'crawler', // KibanaLogic isCloud: false, + // PipelineLogic + hasIndexIngestionPipeline: false, }; -describe('CustomizeIngestPipelineItem', () => { +describe('CopyAndCustomizePipelinePanel', () => { beforeEach(() => { jest.clearAllMocks(); setMockValues({ ...DEFAULT_VALUES }); }); - it('renders cta with license', () => { - const wrapper = shallow(); - expect(wrapper.find(EuiButtonEmpty)).toHaveLength(1); - expect(wrapper.find(EuiText)).toHaveLength(1); - expect(wrapper.find(EuiText).children().text()).toContain('create an index-specific version'); - expect(wrapper.find(EuiText).children().text()).not.toContain('With a platinum license'); + it('renders callout with default pipeline', () => { + const wrapper = shallow(); + + expect(wrapper.find(EuiCallOut)).toHaveLength(1); + expect(wrapper.find(EuiButton)).toHaveLength(1); + expect(wrapper.find(EuiButton).render().text()).toBe('Copy and customize'); }); - it('renders cta on cloud', () => { + it('returns LicensingCallout if gated', () => { setMockValues({ ...DEFAULT_VALUES, hasPlatinumLicense: false, - isCloud: true, + isCloud: false, }); - const wrapper = shallow(); - expect(wrapper.find(EuiText)).toHaveLength(1); - expect(wrapper.find(EuiText).children().text()).toContain('create an index-specific version'); - expect(wrapper.find(EuiText).children().text()).not.toContain('With a platinum license'); + + const wrapper = shallow(); + expect(wrapper.find(LicensingCallout)).toHaveLength(1); }); - it('gates cta without license', () => { + it('returns null if you have a custom pipeline', () => { setMockValues({ ...DEFAULT_VALUES, - hasPlatinumLicense: false, - isCloud: false, + hasIndexIngestionPipeline: true, }); - const wrapper = shallow(); - expect(wrapper.find(EuiButtonEmpty)).toHaveLength(1); - expect(wrapper.find(EuiText)).toHaveLength(1); - - const ctaButton = wrapper.find(EuiButtonEmpty); - expect(ctaButton.prop('disabled')).toBe(true); - expect(ctaButton.prop('iconType')).toBe('lock'); - expect(wrapper.find(EuiText).children().text()).toContain('With a platinum license'); + const wrapper = shallow(); + expect(wrapper.isEmptyRender()).toBe(true); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/customize_pipeline_item.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/customize_pipeline_item.tsx index e95fb524f29ab..3c5afe6790af4 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/customize_pipeline_item.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/customize_pipeline_item.tsx @@ -9,115 +9,75 @@ import React from 'react'; import { useActions, useValues } from 'kea'; -import { EuiButtonEmpty, EuiConfirmModal, EuiFlexGroup, EuiSpacer, EuiText } from '@elastic/eui'; +import { EuiButton, EuiCallOut, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { Status } from '../../../../../../../common/types/api'; -import { CANCEL_BUTTON_LABEL } from '../../../../../shared/constants'; - import { KibanaLogic } from '../../../../../shared/kibana'; import { LicensingLogic } from '../../../../../shared/licensing'; import { CreateCustomPipelineApiLogic } from '../../../../api/index/create_custom_pipeline_api_logic'; -import { RevertConnectorPipelineApilogic } from '../../../../api/pipelines/revert_connector_pipeline_api_logic'; +import { + LicensingCallout, + LICENSING_FEATURE, +} from '../../../shared/licensing_callout/licensing_callout'; import { IndexViewLogic } from '../../index_view_logic'; + import { PipelinesLogic } from '../pipelines_logic'; -export const CustomizeIngestPipelineItem: React.FC = () => { +export const CopyAndCustomizePipelinePanel: React.FC = () => { const { indexName, ingestionMethod } = useValues(IndexViewLogic); const { isCloud } = useValues(KibanaLogic); const { hasPlatinumLicense } = useValues(LicensingLogic); - const { makeRequest: createCustomPipeline } = useActions(CreateCustomPipelineApiLogic); const { status: createStatus } = useValues(CreateCustomPipelineApiLogic); - const { isDeleteModalOpen, hasIndexIngestionPipeline } = useValues(PipelinesLogic); - const { closeDeleteModal, openDeleteModal } = useActions(PipelinesLogic); - const { makeRequest: revertPipeline } = useActions(RevertConnectorPipelineApilogic); - const { status: revertStatus } = useValues(RevertConnectorPipelineApilogic); + const { hasIndexIngestionPipeline, pipelineName } = useValues(PipelinesLogic); + const { makeRequest: createCustomPipeline } = useActions(CreateCustomPipelineApiLogic); + const isGated = !isCloud && !hasPlatinumLicense; + if (hasIndexIngestionPipeline) return null; + if (isGated) { + return ( + <> + + + + ); + } return ( <> - {isGated ? ( - - {i18n.translate( - 'xpack.enterpriseSearch.content.index.pipelines.copyAndCustomize.platinumText', - { - defaultMessage: - 'With a platinum license, you can create an index-specific version of this configuration and modify it for your use case.', - } - )} - - ) : ( - + +

+ {pipelineName}, + }} + /> +

+ createCustomPipeline({ indexName })} + > {i18n.translate( - 'xpack.enterpriseSearch.content.index.pipelines.copyAndCustomize.description', - { - defaultMessage: - 'You can create an index-specific version of this configuration and modify it for your use case.', - } + 'xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.copyButtonLabel', + { defaultMessage: 'Copy and customize' } )} -
- )} - - {isDeleteModalOpen && ( - revertPipeline({ indexName })} - cancelButtonText={CANCEL_BUTTON_LABEL} - confirmButtonText={i18n.translate( - 'xpack.enterpriseSearch.content.index.pipelines.deleteModal.confirmButton', - { - defaultMessage: 'Delete pipeline', - } - )} - buttonColor="danger" - > -

- {i18n.translate( - 'xpack.enterpriseSearch.content.index.pipelines.deleteModal.description', - { - defaultMessage: - 'This will delete any custom pipelines associated with this index, including machine learning inference pipelines. The index will revert to using the default ingest pipeline.', - } - )} -

-
- )} - {hasIndexIngestionPipeline ? ( - openDeleteModal()} - > - {i18n.translate( - 'xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.revertPipelineLabel', - { defaultMessage: 'Delete custom pipeline' } - )} - - ) : ( - createCustomPipeline({ indexName })} - > - {i18n.translate( - 'xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.copyButtonLabel', - { defaultMessage: 'Copy and customize' } - )} - - )} -
- + + + ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/default_pipeline_item.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/default_pipeline_item.tsx index ddc5d6f4d65df..087ceda6a8d9d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/default_pipeline_item.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/default_pipeline_item.tsx @@ -91,7 +91,7 @@ export const DefaultPipelineItem: React.FC<{ )} - + {i18n.translate( 'xpack.enterpriseSearch.content.indices.pipelines.ingestPipelinesCard.managedBadge.label', { defaultMessage: 'Managed' } diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/ingest_pipelines_card.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/ingest_pipelines_card.test.tsx index a6c68b47c7b5a..7ffaaee497235 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/ingest_pipelines_card.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/ingest_pipelines_card.test.tsx @@ -15,7 +15,6 @@ import { shallow } from 'enzyme'; import { DEFAULT_PIPELINE_NAME } from '../../../../../../../common/constants'; import { CustomPipelineItem } from './custom_pipeline_item'; -import { CustomizeIngestPipelineItem } from './customize_pipeline_item'; import { DefaultPipelineItem } from './default_pipeline_item'; import { IngestPipelinesCard } from './ingest_pipelines_card'; @@ -47,7 +46,6 @@ describe('IngestPipelinesCard', () => { it('renders with default ingest pipeline', () => { const wrapper = shallow(); expect(wrapper.find(DefaultPipelineItem)).toHaveLength(1); - expect(wrapper.find(CustomizeIngestPipelineItem)).toHaveLength(1); expect(wrapper.find(CustomPipelineItem)).toHaveLength(0); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/ingest_pipelines_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/ingest_pipelines_card.tsx index 64f195e217891..da9a1ccd9b1a6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/ingest_pipelines_card.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/ingest_pipelines_card.tsx @@ -17,7 +17,6 @@ import { IndexViewLogic } from '../../index_view_logic'; import { PipelinesLogic } from '../pipelines_logic'; import { CustomPipelineItem } from './custom_pipeline_item'; -import { CustomizeIngestPipelineItem } from './customize_pipeline_item'; import { DefaultPipelineItem } from './default_pipeline_item'; import { IngestPipelineFlyout } from './ingest_pipeline_flyout'; @@ -38,46 +37,43 @@ export const IngestPipelinesCard: React.FC = () => { }, [indexName]); return ( - <> - - - {showPipelineSettings && ( - + {showPipelineSettings && ( + + )} + + + - )} + + + {customPipeline && ( - - + - {customPipeline && ( - - - - - - )} - - + )} + ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/manage_custom_pipeline_actions.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/manage_custom_pipeline_actions.tsx new file mode 100644 index 0000000000000..9d30e9f949c90 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ingest_pipelines/manage_custom_pipeline_actions.tsx @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useState } from 'react'; + +import { css } from '@emotion/react'; +import { useActions } from 'kea'; + +import { EuiButtonEmpty, EuiContextMenuPanel, EuiContextMenuItem, EuiPopover } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { euiThemeVars } from '@kbn/ui-theme'; + +import { PipelinesLogic } from '../pipelines_logic'; + +const revertContextMenuItemCSS = css` + color: ${euiThemeVars.euiColorDanger}; +`; + +export const ManageCustomPipelineActions: React.FC = () => { + const [isMenuOpen, setIsMenuOpen] = useState(false); + const { openDeleteModal } = useActions(PipelinesLogic); + + const onButtonClick = () => setIsMenuOpen(!isMenuOpen); + const onRevertClick = () => { + openDeleteModal(); + setIsMenuOpen(false); + }; + return ( + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.ingestionPipeline.manageButton', + { defaultMessage: 'Manage' } + )} + + } + isOpen={isMenuOpen} + closePopover={() => setIsMenuOpen(false)} + panelPaddingSize="none" + anchorPosition="downRight" + > + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.ingestionPipeline.revertPipelineAction', + { defaultMessage: 'Revert to default configuration' } + )} + , + ]} + /> + + ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/add_ml_inference_button.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/add_ml_inference_button.tsx index 7f27fb0e0f612..6a0f9c574cf2d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/add_ml_inference_button.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/add_ml_inference_button.tsx @@ -77,10 +77,11 @@ const AddButton: React.FC<{ onClick?: () => void; }> = ({ disabled, ingestionMethod, onClick }) => ( {i18n.translate('xpack.enterpriseSearch.content.indices.pipelines.mlInference.addButtonLabel', { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx index 955687e39f762..a1a8f4aa60add 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference/model_select_option.tsx @@ -7,7 +7,7 @@ import React from 'react'; -import { EuiBadge, EuiFlexGroup, EuiFlexItem, EuiTextColor, EuiTitle } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiTextColor, EuiTitle } from '@elastic/eui'; import { getMlModelTypesForModelConfig, @@ -18,6 +18,7 @@ import { TrainedModel } from '../../../../api/ml_models/ml_trained_models_logic' import { getMLType, getModelDisplayTitle } from '../../../shared/ml_inference/utils'; import { TrainedModelHealth } from '../ml_model_health'; +import { MLModelTypeBadge } from '../ml_model_type_badge'; export interface MlModelSelectOptionProps { model: TrainedModel; @@ -49,7 +50,7 @@ export const MlModelSelectOption: React.FC = ({ model - {type} + diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference_pipeline_processors_card.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference_pipeline_processors_card.tsx index 4c87086b5a7b6..624643f564d85 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference_pipeline_processors_card.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_inference_pipeline_processors_card.tsx @@ -15,26 +15,28 @@ import { InferencePipeline } from '../../../../../../common/types/pipelines'; import { IndexNameLogic } from '../index_name_logic'; import { InferencePipelineCard } from './inference_pipeline_card'; +import { AddMLInferencePipelineButton } from './ml_inference/add_ml_inference_button'; import { PipelinesLogic } from './pipelines_logic'; export const MlInferencePipelineProcessorsCard: React.FC = () => { const { indexName } = useValues(IndexNameLogic); const { mlInferencePipelineProcessors: inferencePipelines } = useValues(PipelinesLogic); - const { fetchMlInferenceProcessors } = useActions(PipelinesLogic); + const { fetchMlInferenceProcessors, openAddMlInferencePipelineModal } = + useActions(PipelinesLogic); useEffect(() => { fetchMlInferenceProcessors({ indexName }); }, [indexName]); - if (inferencePipelines === undefined) return null; - if (inferencePipelines.length === 0) return null; - return ( - {inferencePipelines.map((item: InferencePipeline, index: number) => ( + + openAddMlInferencePipelineModal()} /> + + {inferencePipelines?.map((item: InferencePipeline, index: number) => ( - ))} + )) ?? null} ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_type_badge.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_type_badge.tsx new file mode 100644 index 0000000000000..2905cc66173b5 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/ml_model_type_badge.tsx @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { EuiBadge } from '@elastic/eui'; + +import { ELSER_TASK_TYPE } from '../../../../../../common/ml_inference_pipeline'; + +export const MLModelTypeBadge: React.FC<{ type: string }> = ({ type }) => { + if (type === ELSER_TASK_TYPE) { + return ELSER; + } + return {type}; +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines.tsx index 3acb91180197b..4c77a6820e088 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines.tsx @@ -10,8 +10,10 @@ import React from 'react'; import { useActions, useValues } from 'kea'; import { + EuiBadge, EuiButton, EuiCallOut, + EuiConfirmModal, EuiFlexGroup, EuiFlexItem, EuiLink, @@ -23,6 +25,8 @@ import { import { i18n } from '@kbn/i18n'; +import { Status } from '../../../../../../common/types/api'; +import { CANCEL_BUTTON_LABEL } from '../../../../shared/constants'; import { DataPanel } from '../../../../shared/data_panel/data_panel'; import { docLinks } from '../../../../shared/doc_links'; import { RevertConnectorPipelineApilogic } from '../../../api/pipelines/revert_connector_pipeline_api_logic'; @@ -32,9 +36,10 @@ import { IndexNameLogic } from '../index_name_logic'; import { InferenceErrors } from './inference_errors'; import { InferenceHistory } from './inference_history'; +import { CopyAndCustomizePipelinePanel } from './ingest_pipelines/customize_pipeline_item'; import { IngestPipelinesCard } from './ingest_pipelines/ingest_pipelines_card'; +import { ManageCustomPipelineActions } from './ingest_pipelines/manage_custom_pipeline_actions'; import { AddInferencePipelineFlyout } from './ml_inference/add_inference_pipeline_flyout'; -import { AddMLInferencePipelineButton } from './ml_inference/add_ml_inference_button'; import { MlInferencePipelineProcessorsCard } from './ml_inference_pipeline_processors_card'; import { PipelinesJSONConfigurations } from './pipelines_json_configurations'; import { PipelinesLogic } from './pipelines_logic'; @@ -45,11 +50,12 @@ export const SearchIndexPipelines: React.FC = () => { showAddMlInferencePipelineModal, hasIndexIngestionPipeline, index, + isDeleteModalOpen, pipelineName, } = useValues(PipelinesLogic); - const { closeAddMlInferencePipelineModal, openAddMlInferencePipelineModal } = - useActions(PipelinesLogic); + const { closeAddMlInferencePipelineModal, closeDeleteModal } = useActions(PipelinesLogic); const { indexName } = useValues(IndexNameLogic); + const { status: revertStatus } = useValues(RevertConnectorPipelineApilogic); const { makeRequest: revertPipeline } = useActions(RevertConnectorPipelineApilogic); const apiIndex = isApiIndex(index); @@ -78,37 +84,41 @@ export const SearchIndexPipelines: React.FC = () => { return ( <> + {showMissingPipelineCallout && ( - -

- {i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.missingPipeline.description', + <> + - revertPipeline({ indexName })}> - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.pipelines.missingPipeline.buttonLabel', - { - defaultMessage: 'Revert pipeline to default', - } - )} - - + > +

+ {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.missingPipeline.description', + { + defaultMessage: + 'The custom pipeline for this index has been deleted. This may affect connector data ingestion. Its configuration will need to be reverted to the default pipeline settings.', + } + )} +

+ revertPipeline({ indexName })}> + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.missingPipeline.buttonLabel', + { + defaultMessage: 'Revert pipeline to default', + } + )} + +
+ + )} - + { ) } iconType="logstashInput" + action={ + hasIndexIngestionPipeline ? ( + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.ingestionPipeline.customBadge', + { defaultMessage: 'Custom' } + )} + + + + + + + ) : ( + + {i18n.translate( + 'xpack.enterpriseSearch.content.indices.pipelines.ingestionPipeline.defaultBadge', + { defaultMessage: 'Default' } + )} + + ) + } > @@ -198,9 +232,6 @@ export const SearchIndexPipelines: React.FC = () => { ) } iconType="compute" - action={ - openAddMlInferencePipelineModal()} /> - } > @@ -219,6 +250,37 @@ export const SearchIndexPipelines: React.FC = () => { {showAddMlInferencePipelineModal && ( )} + {isDeleteModalOpen && ( + revertPipeline({ indexName })} + cancelButtonText={CANCEL_BUTTON_LABEL} + confirmButtonText={i18n.translate( + 'xpack.enterpriseSearch.content.index.pipelines.deleteModal.confirmButton', + { + defaultMessage: 'Delete pipeline', + } + )} + buttonColor="danger" + > +

+ {i18n.translate( + 'xpack.enterpriseSearch.content.index.pipelines.deleteModal.description', + { + defaultMessage: + 'This will delete any custom pipelines associated with this index, including machine learning inference pipelines. The index will revert to using the default ingest pipeline.', + } + )} +

+
+ )} ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/licensing_callout/licensing_callout.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/licensing_callout/licensing_callout.tsx index c6a6e8f9cd969..1bb423eb7efed 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/licensing_callout/licensing_callout.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/licensing_callout/licensing_callout.tsx @@ -16,6 +16,7 @@ export enum LICENSING_FEATURE { NATIVE_CONNECTOR = 'nativeConnector', CRAWLER = 'crawler', INFERENCE = 'inference', + PIPELINES = 'pipelines', SEARCH_APPLICATIONS = 'searchApplications', } @@ -44,6 +45,13 @@ export const LicensingCallout: React.FC<{ feature: LICENSING_FEATURE }> = ({ fea 'Inference processors require a Platinum license or higher and are not available to Standard license self-managed deployments. You need to upgrade to use this feature.', } ), + [LICENSING_FEATURE.PIPELINES]: i18n.translate( + 'xpack.enterpriseSearch.content.licensingCallout.pipelines.contentOne', + { + defaultMessage: + 'Custom pipelines require a Platinum license or higher and are not available to Standard license self-managed deployments. You need to upgrade to use this feature.', + } + ), [LICENSING_FEATURE.SEARCH_APPLICATIONS]: i18n.translate( 'xpack.enterpriseSearch.content.licensingCallout.searchApplications.contentOne', { @@ -75,6 +83,13 @@ export const LicensingCallout: React.FC<{ feature: LICENSING_FEATURE }> = ({ fea "Did you know that inference processors are available with a Standard Elastic Cloud license? Elastic Cloud gives you the flexibility to run where you want. Deploy our managed service on Google Cloud, Microsoft Azure, or Amazon Web Services, and we'll handle the maintenance and upkeep for you.", } ), + [LICENSING_FEATURE.PIPELINES]: i18n.translate( + 'xpack.enterpriseSearch.content.licensingCallout.pipelines.contentTwo', + { + defaultMessage: + "Did you know that custom pipelines are available with a Standard Elastic Cloud license? Elastic Cloud gives you the flexibility to run where you want. Deploy our managed service on Google Cloud, Microsoft Azure, or Amazon Web Services, and we'll handle the maintenance and upkeep for you.", + } + ), [LICENSING_FEATURE.SEARCH_APPLICATIONS]: i18n.translate( 'xpack.enterpriseSearch.content.licensingCallout.searchApplications.contentTwo', { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ml_inference/utils.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ml_inference/utils.test.ts index 204435e33f52d..4ddf5b1c4b77a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ml_inference/utils.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ml_inference/utils.test.ts @@ -58,6 +58,13 @@ describe('ml inference utils', () => { }, model_id: 'mock-fill_mask', }), + makeFakeModel({ + inference_config: { + classification: {}, + }, + model_id: 'lang_ident_model_1', + model_type: 'lang_ident', + }), ]; for (const model of models) { @@ -109,6 +116,9 @@ describe('ml inference utils', () => { test.each(NLP_CONFIG_KEYS)('%s should have a title defined', (type) => expect(getModelDisplayTitle(type)).not.toBe('') ); + it('returns title for lang_ident', () => { + expect(getModelDisplayTitle('lang_ident')).toBe('Language Identification'); + }); it('unsupported model type should return empty title', () => { // This should technically never happen given the above test. expect(getModelDisplayTitle('foo')).toBe(undefined); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ml_inference/utils.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ml_inference/utils.ts index f24fe059cc5d0..d4b4a353803e6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ml_inference/utils.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/shared/ml_inference/utils.ts @@ -8,7 +8,10 @@ import { i18n } from '@kbn/i18n'; import { TrainedModelConfigResponse } from '@kbn/ml-plugin/common/types/trained_models'; -import { SUPPORTED_PYTORCH_TASKS } from '../../../../../../common/ml_inference_pipeline'; +import { + LANG_IDENT_MODEL_TYPE, + SUPPORTED_PYTORCH_TASKS, +} from '../../../../../../common/ml_inference_pipeline'; export const NLP_CONFIG_KEYS: string[] = Object.values(SUPPORTED_PYTORCH_TASKS); export const RECOMMENDED_FIELDS = ['body', 'body_content', 'title']; @@ -17,6 +20,9 @@ export const NLP_DISPLAY_TITLES: Record = { fill_mask: i18n.translate('xpack.enterpriseSearch.content.ml_inference.fill_mask', { defaultMessage: 'Fill Mask', }), + lang_ident: i18n.translate('xpack.enterpriseSearch.content.ml_inference.lang_ident', { + defaultMessage: 'Language Identification', + }), ner: i18n.translate('xpack.enterpriseSearch.content.ml_inference.ner', { defaultMessage: 'Named Entity Recognition', }), @@ -44,7 +50,10 @@ export const NLP_DISPLAY_TITLES: Record = { }; export const isSupportedMLModel = (model: TrainedModelConfigResponse): boolean => { - return Object.keys(model.inference_config).some((key) => NLP_CONFIG_KEYS.includes(key)); + return ( + Object.keys(model.inference_config).some((key) => NLP_CONFIG_KEYS.includes(key)) || + model.model_type === LANG_IDENT_MODEL_TYPE + ); }; export const sortSourceFields = (a: string, b: string): number => { @@ -66,6 +75,7 @@ export const getMLType = (modelTypes: string[]): string => { return type; } } + if (modelTypes?.includes(LANG_IDENT_MODEL_TYPE)) return LANG_IDENT_MODEL_TYPE; return modelTypes?.[0] ?? ''; }; diff --git a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.test.ts b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.test.ts index 1a20551ab7911..faaf9cba8d2f6 100644 --- a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.test.ts +++ b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.test.ts @@ -160,7 +160,7 @@ const mockGetTrainedModelsData = { { inference_config: { ner: {} }, model_id: 'trained-model-id-1', - model_type: 'lang_ident', + model_type: 'pytorch', tags: [], }, { @@ -250,7 +250,7 @@ const trainedModelDataObject: Record = { modelState: TrainedModelState.NotDeployed, pipelineName: 'ml-inference-pipeline-1', pipelineReferences: ['my-index@ml-inference'], - types: ['lang_ident', 'ner'], + types: ['pytorch', 'ner'], }, 'trained-model-id-2': { modelId: 'trained-model-id-2', @@ -264,7 +264,7 @@ const trainedModelDataObject: Record = { modelState: TrainedModelState.NotDeployed, pipelineName: 'ml-inference-pipeline-3', pipelineReferences: ['my-index@ml-inference'], - types: ['lang_ident', 'ner'], + types: ['pytorch', 'ner'], }, }; @@ -571,7 +571,7 @@ describe('fetchAndAddTrainedModelData lib function', () => { pipelineName: 'ml-inference-pipeline-1', pipelineReferences: [], trainedModelName: 'trained-model-id-1', - types: ['lang_ident', 'ner'], + types: ['pytorch', 'ner'], }, { modelId: 'trained-model-id-2', diff --git a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.ts b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.ts index 8bdbb0a341442..e92396533e913 100644 --- a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.ts +++ b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.ts @@ -143,7 +143,10 @@ export const getMlModelConfigsForModelIds = async ( trainedModelsStats.trained_model_stats.forEach((trainedModelStats) => { const trainedModelName = trainedModelStats.model_id; if (modelConfigs.hasOwnProperty(trainedModelName)) { - modelConfigs[trainedModelName].modelState = parseModelStateFromStats(trainedModelStats); + modelConfigs[trainedModelName].modelState = parseModelStateFromStats( + trainedModelStats, + modelConfigs[trainedModelName].types + ); modelConfigs[trainedModelName].modelStateReason = parseModelStateReasonFromStats(trainedModelStats); } diff --git a/x-pack/plugins/fleet/common/experimental_features.ts b/x-pack/plugins/fleet/common/experimental_features.ts index aae45e12c1ddd..638e48cae5ba4 100644 --- a/x-pack/plugins/fleet/common/experimental_features.ts +++ b/x-pack/plugins/fleet/common/experimental_features.ts @@ -18,7 +18,7 @@ export const allowedExperimentalValues = Object.freeze({ diagnosticFileUploadEnabled: true, experimentalDataStreamSettings: false, displayAgentMetrics: true, - showIntegrationsSubcategories: false, + showIntegrationsSubcategories: true, agentFqdnMode: false, showExperimentalShipperOptions: false, fleetServerStandalone: false, diff --git a/x-pack/plugins/infra/common/constants.ts b/x-pack/plugins/infra/common/constants.ts index 4c70e34c9899f..9fcb488e02fda 100644 --- a/x-pack/plugins/infra/common/constants.ts +++ b/x-pack/plugins/infra/common/constants.ts @@ -5,7 +5,6 @@ * 2.0. */ -export const DEFAULT_SOURCE_ID = 'default'; export const METRICS_INDEX_PATTERN = 'metrics-*,metricbeat-*'; export const LOGS_INDEX_PATTERN = 'logs-*,filebeat-*,kibana_sample_data_logs*'; export const METRICS_APP = 'metrics'; diff --git a/x-pack/plugins/infra/common/log_analysis/job_parameters.ts b/x-pack/plugins/infra/common/log_analysis/job_parameters.ts index b8fa429195ff3..1a695af80a4d5 100644 --- a/x-pack/plugins/infra/common/log_analysis/job_parameters.ts +++ b/x-pack/plugins/infra/common/log_analysis/job_parameters.ts @@ -16,11 +16,11 @@ export const partitionField = 'event.dataset'; export const getJobIdPrefix = (spaceId: string, sourceId: string) => `kibana-logs-ui-${spaceId}-${sourceId}-`; -export const getJobId = (spaceId: string, sourceId: string, jobType: string) => - `${getJobIdPrefix(spaceId, sourceId)}${jobType}`; +export const getJobId = (spaceId: string, logViewId: string, jobType: string) => + `${getJobIdPrefix(spaceId, logViewId)}${jobType}`; -export const getDatafeedId = (spaceId: string, sourceId: string, jobType: string) => - `datafeed-${getJobId(spaceId, sourceId, jobType)}`; +export const getDatafeedId = (spaceId: string, logViewId: string, jobType: string) => + `datafeed-${getJobId(spaceId, logViewId, jobType)}`; export const datasetFilterRT = rt.union([ rt.strict({ diff --git a/x-pack/plugins/infra/common/log_views/types.ts b/x-pack/plugins/infra/common/log_views/types.ts index 5bf9585bb1c2f..ca6dd95330f8c 100644 --- a/x-pack/plugins/infra/common/log_views/types.ts +++ b/x-pack/plugins/infra/common/log_views/types.ts @@ -14,6 +14,7 @@ export interface LogViewsStaticConfig { export const logViewOriginRT = rt.keyof({ stored: null, internal: null, + inline: null, 'infra-source-stored': null, 'infra-source-internal': null, 'infra-source-fallback': null, diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx index ad5ef8a99f23b..bedd7a127394a 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx @@ -42,7 +42,10 @@ const AlertDetailsAppSection = ({ rule, alert }: AlertDetailsAppSectionProps) => { const { services: { @@ -33,7 +48,9 @@ export const AlertDropdown = () => { observability, }, } = useKibanaContextForPlugin(); - const canCreateAlerts = capabilities?.logs?.save ?? false; + const { isPersistedLogView } = useLogViewContext(); + const readOnly = !capabilities?.logs?.save; + const canCreateAlerts = (!readOnly && isPersistedLogView) ?? false; const [popoverOpen, setPopoverOpen] = useState(false); const [flyoutVisible, setFlyoutVisible] = useState(false); @@ -61,8 +78,20 @@ export const AlertDropdown = () => { icon="bell" key="createLink" onClick={openFlyout} - toolTipContent={!canCreateAlerts ? readOnlyUserTooltipContent : undefined} - toolTipTitle={!canCreateAlerts ? readOnlyUserTooltipTitle : undefined} + toolTipContent={ + !canCreateAlerts + ? readOnly + ? readOnlyUserTooltipContent + : inlineLogViewTooltipContent + : undefined + } + toolTipTitle={ + !canCreateAlerts + ? readOnly + ? readOnlyUserTooltipTitle + : inlineLogViewTooltipTitle + : undefined + } > { /> , ]; - }, [manageRulesLinkProps, canCreateAlerts, openFlyout]); + }, [canCreateAlerts, openFlyout, readOnly, manageRulesLinkProps]); return ( <> @@ -104,3 +133,7 @@ export const AlertDropdown = () => { ); }; + +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default AlertDropdown; diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/criteria.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/criteria.tsx index f26bab6b65f56..c5af2938f5456 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/criteria.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/criteria.tsx @@ -9,7 +9,10 @@ import React, { useCallback } from 'react'; import { EuiFlexItem, EuiFlexGroup, EuiButtonEmpty, EuiAccordion, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; -import type { ResolvedLogViewField } from '../../../../../common/log_views'; +import type { + PersistedLogViewReference, + ResolvedLogViewField, +} from '../../../../../common/log_views'; import { Criterion } from './criterion'; import { PartialRuleParams, @@ -39,7 +42,7 @@ interface SharedProps { defaultCriterion: PartialCriterionType; errors: Errors['criteria']; ruleParams: PartialRuleParams; - sourceId: string; + logViewReference: PersistedLogViewReference; updateCriteria: (criteria: PartialCriteriaType) => void; } @@ -64,7 +67,7 @@ interface CriteriaWrapperProps { addCriterion: () => void; criteria: PartialCountCriteriaType; errors: CriterionErrors; - sourceId: SharedProps['sourceId']; + logViewReference: SharedProps['logViewReference']; isRatio?: boolean; } @@ -77,7 +80,7 @@ const CriteriaWrapper: React.FC = (props) => { fields, errors, ruleParams, - sourceId, + logViewReference, isRatio = false, } = props; @@ -105,7 +108,7 @@ const CriteriaWrapper: React.FC = (props) => { diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/criterion_preview_chart.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/criterion_preview_chart.tsx index e5ea692ce7792..01d96cebdad9b 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/criterion_preview_chart.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/criterion_preview_chart.tsx @@ -21,6 +21,7 @@ import { import { EuiText } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { PersistedLogViewReference } from '../../../../../common/log_views'; import { ExecutionTimeRange } from '../../../../types'; import { ChartContainer, @@ -55,7 +56,7 @@ const GROUP_LIMIT = 5; interface Props { ruleParams: PartialRuleParams; chartCriterion: Partial; - sourceId: string; + logViewReference: PersistedLogViewReference; showThreshold: boolean; executionTimeRange?: ExecutionTimeRange; } @@ -63,7 +64,7 @@ interface Props { export const CriterionPreview: React.FC = ({ ruleParams, chartCriterion, - sourceId, + logViewReference, showThreshold, executionTimeRange, }) => { @@ -105,7 +106,7 @@ export const CriterionPreview: React.FC = ({ ? NUM_BUCKETS : NUM_BUCKETS / 4 } // Display less data for groups due to space limitations - sourceId={sourceId} + logViewReference={logViewReference} threshold={ruleParams.count} chartAlertParams={chartAlertParams} showThreshold={showThreshold} @@ -116,7 +117,7 @@ export const CriterionPreview: React.FC = ({ interface ChartProps { buckets: number; - sourceId: string; + logViewReference: PersistedLogViewReference; threshold?: Threshold; chartAlertParams: GetLogAlertsChartPreviewDataAlertParamsSubset; showThreshold: boolean; @@ -125,7 +126,7 @@ interface ChartProps { const CriterionPreviewChart: React.FC = ({ buckets, - sourceId, + logViewReference, threshold, chartAlertParams, showThreshold, @@ -141,7 +142,7 @@ const CriterionPreviewChart: React.FC = ({ hasError, chartPreviewData: series, } = useChartPreviewData({ - sourceId, + logViewReference, ruleParams: chartAlertParams, buckets, executionTimeRange, diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/editor.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/editor.tsx index 2f6f7a8583ae3..d9275a1ff0178 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/editor.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/editor.tsx @@ -27,7 +27,6 @@ import { } from '../../../../../common/alerting/logs/log_threshold/types'; import { decodeOrThrow } from '../../../../../common/runtime_types'; import { ObjectEntries } from '../../../../../common/utility_types'; -import { useSourceId } from '../../../../containers/source_id'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { LogViewProvider, useLogViewContext } from '../../../../hooks/use_log_view'; import { GroupByExpression } from '../../../common/group_by_expression/group_by_expression'; @@ -54,11 +53,6 @@ const DEFAULT_BASE_EXPRESSION = { const DEFAULT_FIELD = 'log.level'; -const createLogViewReference = (logViewId: string): PersistedLogViewReference => ({ - logViewId, - type: 'log-view-reference', -}); - const createDefaultCriterion = ( availableFields: ResolvedLogViewField[], value: ExpressionCriteria['value'] @@ -100,7 +94,6 @@ export const ExpressionEditor: React.FC< RuleTypeParamsExpressionProps > = (props) => { const isInternal = props.metadata?.isInternal ?? false; - const [logViewId] = useSourceId(); const { services: { logViews }, } = useKibanaContextForPlugin(); // injected during alert registration @@ -112,7 +105,7 @@ export const ExpressionEditor: React.FC< ) : ( - + @@ -163,7 +156,11 @@ export const Editor: React.FC { const { setRuleParams, ruleParams, errors } = props; const [hasSetDefaults, setHasSetDefaults] = useState(false); - const { logViewId, resolvedLogView } = useLogViewContext(); + const { logViewReference, resolvedLogView } = useLogViewContext(); + + if (logViewReference.type !== 'log-view-reference') { + throw new Error('The Log Threshold rule type only supports persisted Log Views'); + } const { criteria: criteriaErrors, @@ -230,8 +227,6 @@ export const Editor: React.FC createLogViewReference(logViewId), [logViewId]); - const defaultCountAlertParams = useMemo( () => createDefaultCountRuleParams(supportedFields, logViewReference), [supportedFields, logViewReference] @@ -279,7 +274,7 @@ export const Editor: React.FC ) : null; diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/hooks/use_chart_preview_data.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/hooks/use_chart_preview_data.tsx index 913962f8703d1..82a1916734192 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/hooks/use_chart_preview_data.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/expression_editor/hooks/use_chart_preview_data.tsx @@ -8,6 +8,7 @@ import { useState, useMemo } from 'react'; import { HttpHandler } from '@kbn/core/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { PersistedLogViewReference } from '../../../../../../common/log_views'; import { ExecutionTimeRange } from '../../../../../types'; import { useTrackedPromise } from '../../../../../utils/use_tracked_promise'; import { @@ -20,14 +21,14 @@ import { decodeOrThrow } from '../../../../../../common/runtime_types'; import { GetLogAlertsChartPreviewDataAlertParamsSubset } from '../../../../../../common/http_api/log_alerts'; interface Options { - sourceId: string; + logViewReference: PersistedLogViewReference; ruleParams: GetLogAlertsChartPreviewDataAlertParamsSubset; buckets: number; executionTimeRange?: ExecutionTimeRange; } export const useChartPreviewData = ({ - sourceId, + logViewReference, ruleParams, buckets, executionTimeRange, @@ -43,7 +44,7 @@ export const useChartPreviewData = ({ createPromise: async () => { setHasError(false); return await callGetChartPreviewDataAPI( - sourceId, + logViewReference, http!.fetch, ruleParams, buckets, @@ -58,7 +59,7 @@ export const useChartPreviewData = ({ setHasError(true); }, }, - [sourceId, http, ruleParams, buckets] + [logViewReference, http, ruleParams, buckets] ); const isLoading = useMemo( @@ -75,7 +76,7 @@ export const useChartPreviewData = ({ }; export const callGetChartPreviewDataAPI = async ( - sourceId: string, + logViewReference: PersistedLogViewReference, fetch: HttpHandler, alertParams: GetLogAlertsChartPreviewDataAlertParamsSubset, buckets: number, @@ -86,7 +87,7 @@ export const callGetChartPreviewDataAPI = async ( body: JSON.stringify( getLogAlertsChartPreviewDataRequestPayloadRT.encode({ data: { - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, alertParams, buckets, executionTimeRange, diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/lib/index.ts b/x-pack/plugins/infra/public/alerting/log_threshold/components/lazy_alert_dropdown.tsx similarity index 51% rename from x-pack/plugins/actions/server/cleanup_failed_executions/lib/index.ts rename to x-pack/plugins/infra/public/alerting/log_threshold/components/lazy_alert_dropdown.tsx index d332c2e1ef063..902a3af8839e8 100644 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/lib/index.ts +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/lazy_alert_dropdown.tsx @@ -5,6 +5,12 @@ * 2.0. */ -export { extractBulkResponseDeleteFailures } from './extract_bulk_response_delete_failures'; -export { bulkDelete } from './bulk_delete'; -export { getRawActionTaskParamsIdFromTask } from './get_raw_action_task_params_id_from_task'; +import React from 'react'; + +const LazyAlertDropdown = React.lazy(() => import('./alert_dropdown')); + +export const LazyAlertDropdownWrapper = () => ( + }> + + +); diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/index.ts b/x-pack/plugins/infra/public/alerting/log_threshold/index.ts index b6eff8ef3826e..588d6008ab639 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/index.ts +++ b/x-pack/plugins/infra/public/alerting/log_threshold/index.ts @@ -6,4 +6,4 @@ */ export * from './log_threshold_rule_type'; -export { AlertDropdown } from './components/alert_dropdown'; +export { LazyAlertDropdownWrapper } from './components/lazy_alert_dropdown'; diff --git a/x-pack/plugins/infra/public/components/log_stream/log_stream.tsx b/x-pack/plugins/infra/public/components/log_stream/log_stream.tsx index 6a3e8bfb6352b..5ae7daf0731b7 100644 --- a/x-pack/plugins/infra/public/components/log_stream/log_stream.tsx +++ b/x-pack/plugins/infra/public/components/log_stream/log_stream.tsx @@ -13,7 +13,7 @@ import { euiStyled } from '@kbn/kibana-react-plugin/common'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { noop } from 'lodash'; import { LogEntryCursor } from '../../../common/log_entry'; -import { defaultLogViewsStaticConfig } from '../../../common/log_views'; +import { defaultLogViewsStaticConfig, LogViewReference } from '../../../common/log_views'; import { BuiltEsQuery, useLogStream } from '../../containers/logs/log_stream'; import { useLogView } from '../../hooks/use_log_view'; import { LogViewsClient } from '../../services/log_views'; @@ -63,14 +63,8 @@ type LogColumnDefinition = export interface LogStreamProps extends LogStreamContentProps { height?: string | number; } - -interface LogView { - type: 'log-view-reference'; - logViewId: string; -} - interface LogStreamContentProps { - logView: LogView; + logView: LogViewReference; startTimestamp: number; endTimestamp: number; query?: string | Query | BuiltEsQuery; @@ -120,7 +114,7 @@ Read more at https://github.com/elastic/kibana/blob/main/src/plugins/kibana_reac ); } - const { openLogEntryFlyout } = useLogEntryFlyout(logView.logViewId); + const { openLogEntryFlyout } = useLogEntryFlyout(logView); const kibanaQuerySettings = useKibanaQuerySettings(); @@ -135,7 +129,7 @@ Read more at https://github.com/elastic/kibana/blob/main/src/plugins/kibana_reac load: loadLogView, resolvedLogView, } = useLogView({ - logViewId: logView.logViewId, + initialLogViewReference: logView, logViews, }); @@ -166,7 +160,7 @@ Read more at https://github.com/elastic/kibana/blob/main/src/plugins/kibana_reac isLoadingMore, isReloading: isLoadingEntries, } = useLogStream({ - sourceId: logView.logViewId, + logViewReference: logView, startTimestamp, endTimestamp, query: parsedQuery, diff --git a/x-pack/plugins/infra/public/components/logging/inline_log_view_splash_page.tsx b/x-pack/plugins/infra/public/components/logging/inline_log_view_splash_page.tsx new file mode 100644 index 0000000000000..cebe7ea21d9c4 --- /dev/null +++ b/x-pack/plugins/infra/public/components/logging/inline_log_view_splash_page.tsx @@ -0,0 +1,72 @@ +/* + * 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 { EuiButton } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { LazyObservabilityPageTemplateProps } from '@kbn/observability-plugin/public'; +import { EuiEmptyPrompt } from '@elastic/eui'; +import { EuiText } from '@elastic/eui'; +import { PageTemplate } from '../page_template'; + +type InlineLogViewSplashPageProps = { + revertToDefaultLogView: () => void; +} & LazyObservabilityPageTemplateProps; + +export const InlineLogViewSplashPage: React.FC = (props) => { + const { revertToDefaultLogView, ...templateProps } = props; + return ( + + + + ); +}; + +export const InlineLogViewSplashPrompt: React.FC<{ + revertToDefaultLogView: InlineLogViewSplashPageProps['revertToDefaultLogView']; +}> = ({ revertToDefaultLogView }) => { + const title = ( + + ); + + const ctaButton = ( + + + + ); + + const description = ( + + ); + + return ( + {title}} + body={ + +

{description}

+
+ } + actions={ctaButton} + /> + ); +}; diff --git a/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_flyout.tsx b/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_flyout.tsx index d7b1b45e02425..619d83cf270c1 100644 --- a/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_flyout.tsx +++ b/x-pack/plugins/infra/public/components/logging/log_entry_flyout/log_entry_flyout.tsx @@ -23,6 +23,7 @@ import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; import { OverlayRef } from '@kbn/core/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import { LogViewReference } from '../../../../common/log_views'; import { TimeKey } from '../../../../common/time'; import { useLogEntry } from '../../../containers/logs/log_entry'; import { CenteredEuiFlyoutBody } from '../../centered_flyout_body'; @@ -35,10 +36,10 @@ export interface LogEntryFlyoutProps { logEntryId: string | null | undefined; onCloseFlyout: () => void; onSetFieldFilter?: (filter: Query, logEntryId: string, timeKey?: TimeKey) => void; - sourceId: string | null | undefined; + logViewReference: LogViewReference | null | undefined; } -export const useLogEntryFlyout = (sourceId: string) => { +export const useLogEntryFlyout = (logViewReference: LogViewReference) => { const flyoutRef = useRef(); const { services: { http, data, uiSettings, application }, @@ -63,12 +64,12 @@ export const useLogEntryFlyout = (sourceId: string) => { ); }, - [http, data, uiSettings, application, openFlyout, sourceId, closeLogEntryFlyout] + [http, data, uiSettings, application, openFlyout, logViewReference, closeLogEntryFlyout] ); useEffect(() => { @@ -87,7 +88,7 @@ export const LogEntryFlyout = ({ logEntryId, onCloseFlyout, onSetFieldFilter, - sourceId, + logViewReference, }: LogEntryFlyoutProps) => { const { cancelRequest: cancelLogEntryRequest, @@ -98,15 +99,15 @@ export const LogEntryFlyout = ({ logEntry, total: logEntryRequestTotal, } = useLogEntry({ - sourceId, + logViewReference, logEntryId, }); useEffect(() => { - if (sourceId && logEntryId) { + if (logViewReference && logEntryId) { fetchLogEntry(); } - }, [fetchLogEntry, sourceId, logEntryId]); + }, [fetchLogEntry, logViewReference, logEntryId]); return ( diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_cleanup.ts b/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_cleanup.ts index 17377e1484e26..2912cdf74a36e 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_cleanup.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_cleanup.ts @@ -13,7 +13,7 @@ import { decodeOrThrow } from '../../../../../common/runtime_types'; interface DeleteJobsRequestArgs { spaceId: string; - sourceId: string; + logViewId: string; jobTypes: JobType[]; } @@ -21,14 +21,14 @@ export const callDeleteJobs = async ( requestArgs: DeleteJobsRequestArgs, fetch: HttpHandler ) => { - const { spaceId, sourceId, jobTypes } = requestArgs; + const { spaceId, logViewId, jobTypes } = requestArgs; // NOTE: Deleting the jobs via this API will delete the datafeeds at the same time const deleteJobsResponse = await fetch('/api/ml/jobs/delete_jobs', { method: 'POST', body: JSON.stringify( deleteJobsRequestPayloadRT.encode({ - jobIds: jobTypes.map((jobType) => getJobId(spaceId, sourceId, jobType)), + jobIds: jobTypes.map((jobType) => getJobId(spaceId, logViewId, jobType)), }) ), }); @@ -44,7 +44,7 @@ export const callGetJobDeletionTasks = async (fetch: HttpHandler) => { interface StopDatafeedsRequestArgs { spaceId: string; - sourceId: string; + logViewId: string; jobTypes: JobType[]; } @@ -52,14 +52,14 @@ export const callStopDatafeeds = async ( requestArgs: StopDatafeedsRequestArgs, fetch: HttpHandler ) => { - const { spaceId, sourceId, jobTypes } = requestArgs; + const { spaceId, logViewId, jobTypes } = requestArgs; // Stop datafeed due to https://github.com/elastic/kibana/issues/44652 const stopDatafeedResponse = await fetch('/api/ml/jobs/stop_datafeeds', { method: 'POST', body: JSON.stringify( stopDatafeedsRequestPayloadRT.encode({ - datafeedIds: jobTypes.map((jobType) => getDatafeedId(spaceId, sourceId, jobType)), + datafeedIds: jobTypes.map((jobType) => getDatafeedId(spaceId, logViewId, jobType)), }) ), }); diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_get_jobs_summary_api.ts b/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_get_jobs_summary_api.ts index 142304269687e..b737427b23912 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_get_jobs_summary_api.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/api/ml_get_jobs_summary_api.ts @@ -13,7 +13,7 @@ import { decodeOrThrow } from '../../../../../common/runtime_types'; interface RequestArgs { spaceId: string; - sourceId: string; + logViewId: string; jobTypes: JobType[]; } @@ -21,12 +21,12 @@ export const callJobsSummaryAPI = async ( requestArgs: RequestArgs, fetch: HttpHandler ) => { - const { spaceId, sourceId, jobTypes } = requestArgs; + const { spaceId, logViewId, jobTypes } = requestArgs; const response = await fetch('/api/ml/jobs/jobs_summary', { method: 'POST', body: JSON.stringify( fetchJobStatusRequestPayloadRT.encode({ - jobIds: jobTypes.map((jobType) => getJobId(spaceId, sourceId, jobType)), + jobIds: jobTypes.map((jobType) => getJobId(spaceId, logViewId, jobType)), }) ), }); diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_cleanup.tsx b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_cleanup.tsx index 7269a530409f6..2a5493f153ff3 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_cleanup.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_cleanup.tsx @@ -11,12 +11,12 @@ import { callDeleteJobs, callGetJobDeletionTasks, callStopDatafeeds } from './ap export const cleanUpJobsAndDatafeeds = async ( spaceId: string, - sourceId: string, + logViewId: string, jobTypes: JobType[], fetch: HttpHandler ) => { try { - await callStopDatafeeds({ spaceId, sourceId, jobTypes }, fetch); + await callStopDatafeeds({ spaceId, logViewId, jobTypes }, fetch); } catch (err) { // Proceed only if datafeed has been deleted or didn't exist in the first place if (err?.response?.status !== 404) { @@ -24,27 +24,27 @@ export const cleanUpJobsAndDatafeeds = async ( } } - return await deleteJobs(spaceId, sourceId, jobTypes, fetch); + return await deleteJobs(spaceId, logViewId, jobTypes, fetch); }; const deleteJobs = async ( spaceId: string, - sourceId: string, + logViewId: string, jobTypes: JobType[], fetch: HttpHandler ) => { - const deleteJobsResponse = await callDeleteJobs({ spaceId, sourceId, jobTypes }, fetch); - await waitUntilJobsAreDeleted(spaceId, sourceId, jobTypes, fetch); + const deleteJobsResponse = await callDeleteJobs({ spaceId, logViewId, jobTypes }, fetch); + await waitUntilJobsAreDeleted(spaceId, logViewId, jobTypes, fetch); return deleteJobsResponse; }; const waitUntilJobsAreDeleted = async ( spaceId: string, - sourceId: string, + logViewId: string, jobTypes: JobType[], fetch: HttpHandler ) => { - const moduleJobIds = jobTypes.map((jobType) => getJobId(spaceId, sourceId, jobType)); + const moduleJobIds = jobTypes.map((jobType) => getJobId(spaceId, logViewId, jobType)); while (true) { const { jobIds: jobIdsBeingDeleted } = await callGetJobDeletionTasks(fetch); const needToWait = jobIdsBeingDeleted.some((jobId) => moduleJobIds.includes(jobId)); diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module.tsx b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module.tsx index 29e5508b24d38..3695c6952cd16 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module.tsx @@ -21,7 +21,7 @@ export const useLogAnalysisModule = ({ moduleDescriptor: ModuleDescriptor; }) => { const { services } = useKibanaContextForPlugin(); - const { spaceId, sourceId, timestampField, runtimeMappings } = sourceConfiguration; + const { spaceId, sourceId: logViewId, timestampField, runtimeMappings } = sourceConfiguration; const [moduleStatus, dispatchModuleStatus] = useModuleStatus(moduleDescriptor.jobTypes); const trackMetric = useUiTracker({ app: 'infra_logs' }); @@ -31,21 +31,21 @@ export const useLogAnalysisModule = ({ cancelPreviousOn: 'resolution', createPromise: async () => { dispatchModuleStatus({ type: 'fetchingJobStatuses' }); - return await moduleDescriptor.getJobSummary(spaceId, sourceId, services.http.fetch); + return await moduleDescriptor.getJobSummary(spaceId, logViewId, services.http.fetch); }, onResolve: (jobResponse) => { dispatchModuleStatus({ type: 'fetchedJobStatuses', payload: jobResponse, spaceId, - sourceId, + logViewId, }); }, onReject: () => { dispatchModuleStatus({ type: 'failedFetchingJobStatuses' }); }, }, - [spaceId, sourceId] + [spaceId, logViewId] ); const [, setUpModule] = useTrackedPromise( @@ -64,7 +64,7 @@ export const useLogAnalysisModule = ({ datasetFilter, { indices: selectedIndices, - sourceId, + sourceId: logViewId, spaceId, timestampField, runtimeMappings, @@ -73,7 +73,7 @@ export const useLogAnalysisModule = ({ ); const jobSummaries = await moduleDescriptor.getJobSummary( spaceId, - sourceId, + logViewId, services.http.fetch ); return { setupResult, jobSummaries }; @@ -104,7 +104,7 @@ export const useLogAnalysisModule = ({ jobSetupResults: jobs, jobSummaries, spaceId, - sourceId, + logViewId, }); }, onReject: (e: any) => { @@ -114,17 +114,17 @@ export const useLogAnalysisModule = ({ } }, }, - [moduleDescriptor.setUpModule, spaceId, sourceId, timestampField] + [moduleDescriptor.setUpModule, spaceId, logViewId, timestampField] ); const [cleanUpModuleRequest, cleanUpModule] = useTrackedPromise( { cancelPreviousOn: 'resolution', createPromise: async () => { - return await moduleDescriptor.cleanUpModule(spaceId, sourceId, services.http.fetch); + return await moduleDescriptor.cleanUpModule(spaceId, logViewId, services.http.fetch); }, }, - [spaceId, sourceId] + [spaceId, logViewId] ); const isCleaningUp = useMemo( @@ -156,8 +156,8 @@ export const useLogAnalysisModule = ({ }, [dispatchModuleStatus]); const jobIds = useMemo( - () => moduleDescriptor.getJobIds(spaceId, sourceId), - [moduleDescriptor, spaceId, sourceId] + () => moduleDescriptor.getJobIds(spaceId, logViewId), + [moduleDescriptor, spaceId, logViewId] ); return { diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_status.tsx b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_status.tsx index 5c4623075dec2..90f36b40d14d7 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_status.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_status.tsx @@ -29,7 +29,7 @@ type StatusReducerAction = | { type: 'startedSetup' } | { type: 'finishedSetup'; - sourceId: string; + logViewId: string; spaceId: string; jobSetupResults: SetupMlModuleResponsePayload['jobs']; jobSummaries: FetchJobStatusResponsePayload; @@ -40,7 +40,7 @@ type StatusReducerAction = | { type: 'fetchedJobStatuses'; spaceId: string; - sourceId: string; + logViewId: string; payload: FetchJobStatusResponsePayload; } | { type: 'failedFetchingJobStatuses' } @@ -84,13 +84,13 @@ const createStatusReducer = }; } case 'finishedSetup': { - const { datafeedSetupResults, jobSetupResults, jobSummaries, spaceId, sourceId } = action; + const { datafeedSetupResults, jobSetupResults, jobSummaries, spaceId, logViewId } = action; const nextJobStatus = jobTypes.reduce( (accumulatedJobStatus, jobType) => ({ ...accumulatedJobStatus, [jobType]: - hasSuccessfullyCreatedJob(getJobId(spaceId, sourceId, jobType))(jobSetupResults) && - hasSuccessfullyStartedDatafeed(getDatafeedId(spaceId, sourceId, jobType))( + hasSuccessfullyCreatedJob(getJobId(spaceId, logViewId, jobType))(jobSetupResults) && + hasSuccessfullyStartedDatafeed(getDatafeedId(spaceId, logViewId, jobType))( datafeedSetupResults ) ? 'started' @@ -142,13 +142,13 @@ const createStatusReducer = }; } case 'fetchedJobStatuses': { - const { payload: jobSummaries, spaceId, sourceId } = action; + const { payload: jobSummaries, spaceId, logViewId } = action; const { setupStatus } = state; const nextJobStatus = jobTypes.reduce( (accumulatedJobStatus, jobType) => ({ ...accumulatedJobStatus, - [jobType]: getJobStatus(getJobId(spaceId, sourceId, jobType))(jobSummaries), + [jobType]: getJobStatus(getJobId(spaceId, logViewId, jobType))(jobSummaries), }), {} as Record ); diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_types.ts b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_types.ts index b26916a22f7b0..d82b8f66c8b77 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_types.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/log_analysis_module_types.ts @@ -25,10 +25,10 @@ export interface ModuleDescriptor { moduleDescription: string; jobTypes: JobType[]; bucketSpan: number; - getJobIds: (spaceId: string, sourceId: string) => Record; + getJobIds: (spaceId: string, logViewId: string) => Record; getJobSummary: ( spaceId: string, - sourceId: string, + logViewId: string, fetch: HttpHandler ) => Promise; getModuleDefinition: (fetch: HttpHandler) => Promise; @@ -41,7 +41,7 @@ export interface ModuleDescriptor { ) => Promise; cleanUpModule: ( spaceId: string, - sourceId: string, + logViewId: string, fetch: HttpHandler ) => Promise; validateSetupIndices: ( diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_categories/module_descriptor.ts b/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_categories/module_descriptor.ts index 02e977dfadd32..38a1c5c907528 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_categories/module_descriptor.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_categories/module_descriptor.ts @@ -36,21 +36,21 @@ const moduleDescription = i18n.translate( } ); -const getJobIds = (spaceId: string, sourceId: string) => +const getJobIds = (spaceId: string, logViewId: string) => logEntryCategoriesJobTypes.reduce( (accumulatedJobIds, jobType) => ({ ...accumulatedJobIds, - [jobType]: getJobId(spaceId, sourceId, jobType), + [jobType]: getJobId(spaceId, logViewId, jobType), }), {} as Record ); -const getJobSummary = async (spaceId: string, sourceId: string, fetch: HttpHandler) => { +const getJobSummary = async (spaceId: string, logViewId: string, fetch: HttpHandler) => { const response = await callJobsSummaryAPI( - { spaceId, sourceId, jobTypes: logEntryCategoriesJobTypes }, + { spaceId, logViewId, jobTypes: logEntryCategoriesJobTypes }, fetch ); - const jobIds = Object.values(getJobIds(spaceId, sourceId)); + const jobIds = Object.values(getJobIds(spaceId, logViewId)); return response.filter((jobSummary) => jobIds.includes(jobSummary.id)); }; @@ -130,8 +130,8 @@ const setUpModule = async ( ); }; -const cleanUpModule = async (spaceId: string, sourceId: string, fetch: HttpHandler) => { - return await cleanUpJobsAndDatafeeds(spaceId, sourceId, logEntryCategoriesJobTypes, fetch); +const cleanUpModule = async (spaceId: string, logViewId: string, fetch: HttpHandler) => { + return await cleanUpJobsAndDatafeeds(spaceId, logViewId, logEntryCategoriesJobTypes, fetch); }; const validateSetupIndices = async ( diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_categories/use_log_entry_categories_module.tsx b/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_categories/use_log_entry_categories_module.tsx index 433a24cffd937..3f4d802940974 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_categories/use_log_entry_categories_module.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_categories/use_log_entry_categories_module.tsx @@ -17,13 +17,13 @@ import { useLogEntryCategoriesQuality } from './use_log_entry_categories_quality export const useLogEntryCategoriesModule = ({ indexPattern, - sourceId, + logViewId, spaceId, timestampField, runtimeMappings, }: { indexPattern: string; - sourceId: string; + logViewId: string; spaceId: string; timestampField: string; runtimeMappings: estypes.MappingRuntimeFields; @@ -31,12 +31,12 @@ export const useLogEntryCategoriesModule = ({ const sourceConfiguration: ModuleSourceConfiguration = useMemo( () => ({ indices: indexPattern.split(','), - sourceId, + sourceId: logViewId, spaceId, timestampField, runtimeMappings, }), - [indexPattern, sourceId, spaceId, timestampField, runtimeMappings] + [indexPattern, logViewId, spaceId, timestampField, runtimeMappings] ); const logAnalysisModule = useLogAnalysisModule({ diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_rate/module_descriptor.ts b/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_rate/module_descriptor.ts index 8acf7ce9d9a5b..8cb0bb8a21799 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_rate/module_descriptor.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_rate/module_descriptor.ts @@ -35,21 +35,21 @@ const moduleDescription = i18n.translate( } ); -const getJobIds = (spaceId: string, sourceId: string) => +const getJobIds = (spaceId: string, logViewId: string) => logEntryRateJobTypes.reduce( (accumulatedJobIds, jobType) => ({ ...accumulatedJobIds, - [jobType]: getJobId(spaceId, sourceId, jobType), + [jobType]: getJobId(spaceId, logViewId, jobType), }), {} as Record ); -const getJobSummary = async (spaceId: string, sourceId: string, fetch: HttpHandler) => { +const getJobSummary = async (spaceId: string, logViewId: string, fetch: HttpHandler) => { const response = await callJobsSummaryAPI( - { spaceId, sourceId, jobTypes: logEntryRateJobTypes }, + { spaceId, logViewId, jobTypes: logEntryRateJobTypes }, fetch ); - const jobIds = Object.values(getJobIds(spaceId, sourceId)); + const jobIds = Object.values(getJobIds(spaceId, logViewId)); return response.filter((jobSummary) => jobIds.includes(jobSummary.id)); }; @@ -122,8 +122,8 @@ const setUpModule = async ( ); }; -const cleanUpModule = async (spaceId: string, sourceId: string, fetch: HttpHandler) => { - return await cleanUpJobsAndDatafeeds(spaceId, sourceId, logEntryRateJobTypes, fetch); +const cleanUpModule = async (spaceId: string, logViewId: string, fetch: HttpHandler) => { + return await cleanUpJobsAndDatafeeds(spaceId, logViewId, logEntryRateJobTypes, fetch); }; const validateSetupIndices = async ( diff --git a/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_rate/use_log_entry_rate_module.tsx b/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_rate/use_log_entry_rate_module.tsx index 46587969ca2ab..65bddee00ce30 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_rate/use_log_entry_rate_module.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_analysis/modules/log_entry_rate/use_log_entry_rate_module.tsx @@ -16,13 +16,13 @@ import { logEntryRateModule } from './module_descriptor'; export const useLogEntryRateModule = ({ indexPattern, - sourceId, + logViewId, spaceId, timestampField, runtimeMappings, }: { indexPattern: string; - sourceId: string; + logViewId: string; spaceId: string; timestampField: string; runtimeMappings: estypes.MappingRuntimeFields; @@ -30,12 +30,12 @@ export const useLogEntryRateModule = ({ const sourceConfiguration: ModuleSourceConfiguration = useMemo( () => ({ indices: indexPattern.split(','), - sourceId, + sourceId: logViewId, spaceId, timestampField, runtimeMappings, }), - [indexPattern, sourceId, spaceId, timestampField, runtimeMappings] + [indexPattern, logViewId, spaceId, timestampField, runtimeMappings] ); const logAnalysisModule = useLogAnalysisModule({ diff --git a/x-pack/plugins/infra/public/containers/logs/log_entry.ts b/x-pack/plugins/infra/public/containers/logs/log_entry.ts index 958097fc3baa5..51b98329ddd5e 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_entry.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_entry.ts @@ -6,6 +6,7 @@ */ import { useCallback } from 'react'; +import { LogViewReference } from '../../../common/log_views'; import { decodeOrThrow } from '../../../common/runtime_types'; import { logEntrySearchRequestParamsRT, @@ -19,26 +20,26 @@ import { } from '../../utils/data_search'; export const useLogEntry = ({ - sourceId, + logViewReference, logEntryId, }: { - sourceId: string | null | undefined; + logViewReference: LogViewReference | null | undefined; logEntryId: string | null | undefined; }) => { const { search: fetchLogEntry, requests$: logEntrySearchRequests$ } = useDataSearch({ getRequest: useCallback(() => { - return !!logEntryId && !!sourceId + return !!logEntryId && !!logViewReference ? { request: { params: logEntrySearchRequestParamsRT.encode({ - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, logEntryId, }), }, options: { strategy: LOG_ENTRY_SEARCH_STRATEGY }, } : null; - }, [sourceId, logEntryId]), + }, [logViewReference, logEntryId]), parseResponses: parseLogEntrySearchResponses, }); diff --git a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_entry_highlights.tsx b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_entry_highlights.tsx index d9f7ab078ae0b..ea0e1fa326c78 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_entry_highlights.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_entry_highlights.tsx @@ -6,6 +6,7 @@ */ import { useEffect, useMemo, useState } from 'react'; +import { LogViewReference } from '../../../../common/log_views'; import { LogEntriesHighlightsResponse } from '../../../../common/http_api'; import { LogEntry } from '../../../../common/log_entry'; import { TimeKey } from '../../../../common/time'; @@ -14,7 +15,7 @@ import { useTrackedPromise } from '../../../utils/use_tracked_promise'; import { fetchLogEntriesHighlights } from './api/fetch_log_entries_highlights'; export const useLogEntryHighlights = ( - sourceId: string, + logViewReference: LogViewReference, sourceVersion: string | undefined, startTimestamp: number | null, endTimestamp: number | null, @@ -37,7 +38,7 @@ export const useLogEntryHighlights = ( return await fetchLogEntriesHighlights( { - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, startTimestamp, endTimestamp, center: centerPoint, @@ -52,7 +53,7 @@ export const useLogEntryHighlights = ( setLogEntryHighlights(response.data); }, }, - [sourceId, startTimestamp, endTimestamp, centerPoint, size, filterQuery, highlightTerms] + [logViewReference, startTimestamp, endTimestamp, centerPoint, size, filterQuery, highlightTerms] ); useEffect(() => { diff --git a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_highlights.tsx b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_highlights.tsx index 9ca6858c3450e..0a6710731bcb1 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_highlights.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_highlights.tsx @@ -8,6 +8,7 @@ import createContainer from 'constate'; import { useState } from 'react'; import useThrottle from 'react-use/lib/useThrottle'; +import { LogViewReference } from '../../../../common/log_views'; import { useLogEntryHighlights } from './log_entry_highlights'; import { useLogSummaryHighlights } from './log_summary_highlights'; import { useNextAndPrevious } from './next_and_previous'; @@ -17,7 +18,7 @@ import { TimeKey } from '../../../../common/time'; const FETCH_THROTTLE_INTERVAL = 3000; interface UseLogHighlightsStateProps { - sourceId: string; + logViewReference: LogViewReference; sourceVersion: string | undefined; centerCursor: TimeKey | null; size: number; @@ -25,7 +26,7 @@ interface UseLogHighlightsStateProps { } export const useLogHighlightsState = ({ - sourceId, + logViewReference, sourceVersion, centerCursor, size, @@ -40,7 +41,7 @@ export const useLogHighlightsState = ({ const { logEntryHighlights, logEntryHighlightsById, loadLogEntryHighlightsRequest } = useLogEntryHighlights( - sourceId, + logViewReference, sourceVersion, throttledStartTimestamp, throttledEndTimestamp, @@ -51,7 +52,7 @@ export const useLogHighlightsState = ({ ); const { logSummaryHighlights, loadLogSummaryHighlightsRequest } = useLogSummaryHighlights( - sourceId, + logViewReference, sourceVersion, throttledStartTimestamp, throttledEndTimestamp, diff --git a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_summary_highlights.ts b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_summary_highlights.ts index e994e2a013bb7..8c5f7fb7ae778 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_highlights/log_summary_highlights.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_highlights/log_summary_highlights.ts @@ -8,6 +8,7 @@ import { useEffect, useMemo, useState } from 'react'; import { debounce } from 'lodash'; +import { LogViewReference } from '../../../../common/log_views'; import { useTrackedPromise } from '../../../utils/use_tracked_promise'; import { fetchLogSummaryHighlights } from './api/fetch_log_summary_highlights'; import { LogEntriesSummaryHighlightsResponse } from '../../../../common/http_api'; @@ -15,7 +16,7 @@ import { useBucketSize } from '../log_summary/bucket_size'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; export const useLogSummaryHighlights = ( - sourceId: string, + logViewReference: LogViewReference, sourceVersion: string | undefined, startTimestamp: number | null, endTimestamp: number | null, @@ -39,7 +40,7 @@ export const useLogSummaryHighlights = ( return await fetchLogSummaryHighlights( { - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, startTimestamp, endTimestamp, bucketSize, @@ -53,7 +54,7 @@ export const useLogSummaryHighlights = ( setLogSummaryHighlights(response.data); }, }, - [sourceId, startTimestamp, endTimestamp, bucketSize, filterQuery, highlightTerms] + [logViewReference, startTimestamp, endTimestamp, bucketSize, filterQuery, highlightTerms] ); const debouncedLoadSummaryHighlights = useMemo( diff --git a/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts b/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts index 2a81afa234729..e1b425b112f8c 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_stream/index.ts @@ -12,7 +12,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import usePrevious from 'react-use/lib/usePrevious'; import useSetState from 'react-use/lib/useSetState'; import { LogEntry, LogEntryCursor } from '../../../../common/log_entry'; -import { LogViewColumnConfiguration } from '../../../../common/log_views'; +import { LogViewColumnConfiguration, LogViewReference } from '../../../../common/log_views'; import { useSubscription } from '../../../utils/use_observable'; import { useFetchLogEntriesAfter } from './use_fetch_log_entries_after'; import { useFetchLogEntriesAround } from './use_fetch_log_entries_around'; @@ -21,7 +21,7 @@ import { useFetchLogEntriesBefore } from './use_fetch_log_entries_before'; export type BuiltEsQuery = ReturnType; interface LogStreamProps { - sourceId: string; + logViewReference: LogViewReference; startTimestamp: number; endTimestamp: number; query?: BuiltEsQuery; @@ -52,7 +52,7 @@ const INITIAL_STATE: LogStreamState = { const LOG_ENTRIES_CHUNK_SIZE = 200; export function useLogStream({ - sourceId, + logViewReference, startTimestamp, endTimestamp, query, @@ -85,13 +85,13 @@ export function useLogStream({ const commonFetchArguments = useMemo( () => ({ - sourceId, + logViewReference, startTimestamp, endTimestamp, query: cachedQuery, columnOverrides: columns, }), - [columns, endTimestamp, cachedQuery, sourceId, startTimestamp] + [columns, endTimestamp, cachedQuery, logViewReference, startTimestamp] ); const { diff --git a/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_after.ts b/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_after.ts index 3ee39fbda3d49..168d2e8577b85 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_after.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_after.ts @@ -11,7 +11,7 @@ import { Observable } from 'rxjs'; import { exhaustMap } from 'rxjs/operators'; import { IKibanaSearchRequest } from '@kbn/data-plugin/public'; import { LogEntryAfterCursor } from '../../../../common/log_entry'; -import { LogViewColumnConfiguration } from '../../../../common/log_views'; +import { LogViewColumnConfiguration, LogViewReference } from '../../../../common/log_views'; import { decodeOrThrow } from '../../../../common/runtime_types'; import { logEntriesSearchRequestParamsRT, @@ -34,21 +34,21 @@ export const useLogEntriesAfterRequest = ({ endTimestamp, highlightPhrase, query, - sourceId, + logViewReference, startTimestamp, }: { columnOverrides?: LogViewColumnConfiguration[]; endTimestamp: number; highlightPhrase?: string; query?: LogEntriesSearchRequestQuery; - sourceId: string; + logViewReference: LogViewReference; startTimestamp: number; }) => { const { search: fetchLogEntriesAfter, requests$: logEntriesAfterSearchRequests$ } = useDataSearch( { getRequest: useCallback( (cursor: LogEntryAfterCursor['after'], params: { size: number; extendTo?: number }) => { - return !!sourceId + return !!logViewReference ? { request: { params: logEntriesSearchRequestParamsRT.encode({ @@ -58,7 +58,7 @@ export const useLogEntriesAfterRequest = ({ highlightPhrase, query: query as JsonObject, size: params.size, - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, startTimestamp, }), }, @@ -66,7 +66,7 @@ export const useLogEntriesAfterRequest = ({ } : null; }, - [columnOverrides, endTimestamp, highlightPhrase, query, sourceId, startTimestamp] + [columnOverrides, endTimestamp, highlightPhrase, query, logViewReference, startTimestamp] ), parseResponses: parseLogEntriesAfterSearchResponses, } @@ -107,14 +107,14 @@ export const useFetchLogEntriesAfter = ({ endTimestamp, highlightPhrase, query, - sourceId, + logViewReference, startTimestamp, }: { columnOverrides?: LogViewColumnConfiguration[]; endTimestamp: number; highlightPhrase?: string; query?: LogEntriesSearchRequestQuery; - sourceId: string; + logViewReference: LogViewReference; startTimestamp: number; }) => { const { fetchLogEntriesAfter, logEntriesAfterSearchRequests$ } = useLogEntriesAfterRequest({ @@ -122,7 +122,7 @@ export const useFetchLogEntriesAfter = ({ endTimestamp, highlightPhrase, query, - sourceId, + logViewReference, startTimestamp, }); diff --git a/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_around.ts b/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_around.ts index 748281d5517a7..a6bd8ba794288 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_around.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_around.ts @@ -9,7 +9,7 @@ import { useCallback } from 'react'; import { combineLatest, Observable, ReplaySubject } from 'rxjs'; import { last, map, startWith, switchMap } from 'rxjs/operators'; import { LogEntryCursor } from '../../../../common/log_entry'; -import { LogViewColumnConfiguration } from '../../../../common/log_views'; +import { LogViewColumnConfiguration, LogViewReference } from '../../../../common/log_views'; import { LogEntriesSearchRequestQuery } from '../../../../common/search_strategies/log_entries/log_entries'; import { flattenDataSearchResponseDescriptor } from '../../../utils/data_search'; import { useObservable, useObservableState } from '../../../utils/use_observable'; @@ -21,14 +21,14 @@ export const useFetchLogEntriesAround = ({ endTimestamp, highlightPhrase, query, - sourceId, + logViewReference, startTimestamp, }: { columnOverrides?: LogViewColumnConfiguration[]; endTimestamp: number; highlightPhrase?: string; query?: LogEntriesSearchRequestQuery; - sourceId: string; + logViewReference: LogViewReference; startTimestamp: number; }) => { const { fetchLogEntriesBefore } = useLogEntriesBeforeRequest({ @@ -36,7 +36,7 @@ export const useFetchLogEntriesAround = ({ endTimestamp, highlightPhrase, query, - sourceId, + logViewReference, startTimestamp, }); @@ -45,7 +45,7 @@ export const useFetchLogEntriesAround = ({ endTimestamp, highlightPhrase, query, - sourceId, + logViewReference, startTimestamp, }); diff --git a/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_before.ts b/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_before.ts index 581d31a28a8c5..a745b5f13a19f 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_before.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_before.ts @@ -11,7 +11,7 @@ import { Observable } from 'rxjs'; import { exhaustMap } from 'rxjs/operators'; import { IKibanaSearchRequest } from '@kbn/data-plugin/public'; import { LogEntryBeforeCursor } from '../../../../common/log_entry'; -import { LogViewColumnConfiguration } from '../../../../common/log_views'; +import { LogViewColumnConfiguration, LogViewReference } from '../../../../common/log_views'; import { decodeOrThrow } from '../../../../common/runtime_types'; import { logEntriesSearchRequestParamsRT, @@ -34,21 +34,21 @@ export const useLogEntriesBeforeRequest = ({ endTimestamp, highlightPhrase, query, - sourceId, + logViewReference, startTimestamp, }: { columnOverrides?: LogViewColumnConfiguration[]; endTimestamp: number; highlightPhrase?: string; query?: LogEntriesSearchRequestQuery; - sourceId: string; + logViewReference: LogViewReference; startTimestamp: number; }) => { const { search: fetchLogEntriesBefore, requests$: logEntriesBeforeSearchRequests$ } = useDataSearch({ getRequest: useCallback( (cursor: LogEntryBeforeCursor['before'], params: { size: number; extendTo?: number }) => { - return !!sourceId + return !!logViewReference ? { request: { params: logEntriesSearchRequestParamsRT.encode({ @@ -58,7 +58,7 @@ export const useLogEntriesBeforeRequest = ({ highlightPhrase, query: query as JsonObject, size: params.size, - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, startTimestamp: params.extendTo ?? startTimestamp, }), }, @@ -66,7 +66,7 @@ export const useLogEntriesBeforeRequest = ({ } : null; }, - [columnOverrides, endTimestamp, highlightPhrase, query, sourceId, startTimestamp] + [columnOverrides, endTimestamp, highlightPhrase, query, logViewReference, startTimestamp] ), parseResponses: parseLogEntriesBeforeSearchResponses, }); @@ -106,14 +106,14 @@ export const useFetchLogEntriesBefore = ({ endTimestamp, highlightPhrase, query, - sourceId, + logViewReference, startTimestamp, }: { columnOverrides?: LogViewColumnConfiguration[]; endTimestamp: number; highlightPhrase?: string; query?: LogEntriesSearchRequestQuery; - sourceId: string; + logViewReference: LogViewReference; startTimestamp: number; }) => { const { fetchLogEntriesBefore, logEntriesBeforeSearchRequests$ } = useLogEntriesBeforeRequest({ @@ -121,7 +121,7 @@ export const useFetchLogEntriesBefore = ({ endTimestamp, highlightPhrase, query, - sourceId, + logViewReference, startTimestamp, }); diff --git a/x-pack/plugins/infra/public/containers/logs/log_summary/log_summary.test.tsx b/x-pack/plugins/infra/public/containers/logs/log_summary/log_summary.test.tsx index fe02367e4b1ff..183950edf9777 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_summary/log_summary.test.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_summary/log_summary.test.tsx @@ -14,6 +14,12 @@ import { useLogSummary } from './log_summary'; import { fetchLogSummary } from './api/fetch_log_summary'; import { datemathToEpochMillis } from '../../../utils/datemath'; +const LOG_VIEW_REFERENCE = { type: 'log-view-reference' as const, logViewId: 'LOG_VIEW_ID' }; +const CHANGED_LOG_VIEW_REFERENCE = { + type: 'log-view-reference' as const, + logViewId: 'CHANGED_LOG_VIEW_ID', +}; + // Typescript doesn't know that `fetchLogSummary` is a jest mock. // We use a second variable with a type cast to help the compiler further down the line. jest.mock('./api/fetch_log_summary', () => ({ fetchLogSummary: jest.fn() })); @@ -32,7 +38,7 @@ describe('useLogSummary hook', () => { }); it('provides an empty list of buckets by default', () => { - const { result } = renderHook(() => useLogSummary('SOURCE_ID', null, null, null)); + const { result } = renderHook(() => useLogSummary(LOG_VIEW_REFERENCE, null, null, null)); expect(result.current.buckets).toEqual([]); }); @@ -51,9 +57,9 @@ describe('useLogSummary hook', () => { .mockResolvedValueOnce(secondMockResponse); const { result, waitForNextUpdate, rerender } = renderHook( - ({ sourceId }) => useLogSummary(sourceId, startTimestamp, endTimestamp, null), + ({ logViewReference }) => useLogSummary(logViewReference, startTimestamp, endTimestamp, null), { - initialProps: { sourceId: 'INITIAL_SOURCE_ID' }, + initialProps: { logViewReference: LOG_VIEW_REFERENCE }, } ); @@ -62,19 +68,19 @@ describe('useLogSummary hook', () => { expect(fetchLogSummaryMock).toHaveBeenCalledTimes(1); expect(fetchLogSummaryMock).toHaveBeenLastCalledWith( expect.objectContaining({ - logView: { logViewId: 'INITIAL_SOURCE_ID', type: 'log-view-reference' }, + logView: LOG_VIEW_REFERENCE, }), expect.anything() ); expect(result.current.buckets).toEqual(firstMockResponse.data.buckets); - rerender({ sourceId: 'CHANGED_SOURCE_ID' }); + rerender({ logViewReference: CHANGED_LOG_VIEW_REFERENCE }); await waitForNextUpdate(); expect(fetchLogSummaryMock).toHaveBeenCalledTimes(2); expect(fetchLogSummaryMock).toHaveBeenLastCalledWith( expect.objectContaining({ - logView: { logViewId: 'CHANGED_SOURCE_ID', type: 'log-view-reference' }, + logView: CHANGED_LOG_VIEW_REFERENCE, }), expect.anything() ); @@ -96,7 +102,8 @@ describe('useLogSummary hook', () => { .mockResolvedValueOnce(secondMockResponse); const { result, waitForNextUpdate, rerender } = renderHook( - ({ filterQuery }) => useLogSummary('SOURCE_ID', startTimestamp, endTimestamp, filterQuery), + ({ filterQuery }) => + useLogSummary(LOG_VIEW_REFERENCE, startTimestamp, endTimestamp, filterQuery), { initialProps: { filterQuery: 'INITIAL_FILTER_QUERY' }, } @@ -134,7 +141,7 @@ describe('useLogSummary hook', () => { const firstRange = createMockDateRange(); const { waitForNextUpdate, rerender } = renderHook( ({ startTimestamp, endTimestamp }) => - useLogSummary('SOURCE_ID', startTimestamp, endTimestamp, null), + useLogSummary(LOG_VIEW_REFERENCE, startTimestamp, endTimestamp, null), { initialProps: firstRange, } @@ -171,7 +178,7 @@ describe('useLogSummary hook', () => { const firstRange = createMockDateRange(); const { waitForNextUpdate, rerender } = renderHook( ({ startTimestamp, endTimestamp }) => - useLogSummary('SOURCE_ID', startTimestamp, endTimestamp, null), + useLogSummary(LOG_VIEW_REFERENCE, startTimestamp, endTimestamp, null), { initialProps: firstRange, } diff --git a/x-pack/plugins/infra/public/containers/logs/log_summary/log_summary.tsx b/x-pack/plugins/infra/public/containers/logs/log_summary/log_summary.tsx index c4b933ab04cd0..c2792300c5f34 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_summary/log_summary.tsx +++ b/x-pack/plugins/infra/public/containers/logs/log_summary/log_summary.tsx @@ -8,6 +8,7 @@ import { useEffect } from 'react'; import { exhaustMap, map, Observable } from 'rxjs'; import { HttpHandler } from '@kbn/core-http-browser'; +import { LogViewReference } from '../../../../common/log_views'; import { useObservableState, useReplaySubject } from '../../../utils/use_observable'; import { fetchLogSummary } from './api/fetch_log_summary'; import { LogEntriesSummaryRequest, LogEntriesSummaryResponse } from '../../../../common/http_api'; @@ -17,7 +18,7 @@ import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; export type LogSummaryBuckets = LogEntriesSummaryResponse['data']['buckets']; export const useLogSummary = ( - sourceId: string, + logViewReference: LogViewReference, startTimestamp: number | null, endTimestamp: number | null, filterQuery: string | null @@ -35,7 +36,7 @@ export const useLogSummary = ( pushLogSummaryBucketsArgs([ { - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, startTimestamp, endTimestamp, bucketSize, @@ -49,7 +50,7 @@ export const useLogSummary = ( filterQuery, pushLogSummaryBucketsArgs, services.http.fetch, - sourceId, + logViewReference, startTimestamp, ]); diff --git a/x-pack/plugins/infra/public/containers/logs/log_summary/with_summary.ts b/x-pack/plugins/infra/public/containers/logs/log_summary/with_summary.ts index 102999a199530..1dc5c7021d253 100644 --- a/x-pack/plugins/infra/public/containers/logs/log_summary/with_summary.ts +++ b/x-pack/plugins/infra/public/containers/logs/log_summary/with_summary.ts @@ -25,7 +25,7 @@ export const WithSummary = ({ end: number | null; }>; }) => { - const { logViewId } = useLogViewContext(); + const { logViewReference } = useLogViewContext(); const serializedParsedQuery = useSelector(useLogStreamPageStateContext(), (logStreamPageState) => logStreamPageState.matches({ hasLogViewIndices: 'initialized' }) ? stringify(logStreamPageState.context.parsedQuery) @@ -38,7 +38,7 @@ export const WithSummary = ({ const throttledEndTimestamp = useThrottle(endTimestamp, FETCH_THROTTLE_INTERVAL); const { buckets, start, end } = useLogSummary( - logViewId, + logViewReference, throttledStartTimestamp, throttledEndTimestamp, serializedParsedQuery diff --git a/x-pack/plugins/infra/public/containers/logs/view_log_in_context/view_log_in_context.ts b/x-pack/plugins/infra/public/containers/logs/view_log_in_context/view_log_in_context.ts index b22a73d77cc54..1ea8f71da129e 100644 --- a/x-pack/plugins/infra/public/containers/logs/view_log_in_context/view_log_in_context.ts +++ b/x-pack/plugins/infra/public/containers/logs/view_log_in_context/view_log_in_context.ts @@ -7,10 +7,11 @@ import { useState } from 'react'; import createContainer from 'constate'; +import { LogViewReference } from '../../../../common/log_views'; import { LogEntry } from '../../../../common/log_entry'; interface ViewLogInContextProps { - sourceId: string; + logViewReference: LogViewReference; startTimestamp: number; endTimestamp: number; } @@ -27,13 +28,13 @@ export const useViewLogInContext = ( props: ViewLogInContextProps ): [ViewLogInContextState, ViewLogInContextCallbacks] => { const [contextEntry, setContextEntry] = useState(); - const { startTimestamp, endTimestamp, sourceId } = props; + const { startTimestamp, endTimestamp, logViewReference } = props; return [ { startTimestamp, endTimestamp, - sourceId, + logViewReference, contextEntry, }, { diff --git a/x-pack/plugins/infra/public/containers/source_id/source_id.ts b/x-pack/plugins/infra/public/containers/source_id/source_id.ts deleted file mode 100644 index f7c7c11b87fe2..0000000000000 --- a/x-pack/plugins/infra/public/containers/source_id/source_id.ts +++ /dev/null @@ -1,32 +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 * as runtimeTypes from 'io-ts'; - -import { pipe } from 'fp-ts/lib/pipeable'; -import { fold } from 'fp-ts/lib/Either'; -import { constant, identity } from 'fp-ts/lib/function'; -import { useUrlState, replaceStateKeyInQueryString } from '../../utils/use_url_state'; - -const SOURCE_ID_URL_STATE_KEY = 'sourceId'; - -export const useSourceId = () => { - return useUrlState({ - defaultState: 'default', - decodeUrlState: decodeSourceIdUrlState, - encodeUrlState: encodeSourceIdUrlState, - urlStateKey: SOURCE_ID_URL_STATE_KEY, - }); -}; - -export const replaceSourceIdInQueryString = (sourceId: string) => - replaceStateKeyInQueryString(SOURCE_ID_URL_STATE_KEY, sourceId); - -const sourceIdRuntimeType = runtimeTypes.union([runtimeTypes.string, runtimeTypes.undefined]); -const encodeSourceIdUrlState = sourceIdRuntimeType.encode; -const decodeSourceIdUrlState = (value: unknown) => - pipe(sourceIdRuntimeType.decode(value), fold(constant(undefined), identity)); diff --git a/x-pack/plugins/infra/public/hooks/use_log_view.mock.ts b/x-pack/plugins/infra/public/hooks/use_log_view.mock.ts index cdf702f741c40..3d95dfb72abb0 100644 --- a/x-pack/plugins/infra/public/hooks/use_log_view.mock.ts +++ b/x-pack/plugins/infra/public/hooks/use_log_view.mock.ts @@ -36,12 +36,18 @@ export const createUninitializedUseLogViewMock = load: jest.fn(), retry: jest.fn(), logView: undefined, - logViewId, + logViewReference: { type: 'log-view-reference', logViewId }, logViewStatus: undefined, resolvedLogView: undefined, update: jest.fn(), - logViewStateService: interpret(createPureLogViewStateMachine({ logViewId })), + changeLogViewReference: jest.fn(), + revertToDefaultLogView: jest.fn(), + logViewStateService: interpret( + createPureLogViewStateMachine({ logViewReference: { type: 'log-view-reference', logViewId } }) + ), logViewStateNotifications: createLogViewNotificationChannel(), + isPersistedLogView: false, + isInlineLogView: false, }); export const createLoadingUseLogViewMock = diff --git a/x-pack/plugins/infra/public/hooks/use_log_view.ts b/x-pack/plugins/infra/public/hooks/use_log_view.ts index 8afc517dbfcac..258fbd76850fc 100644 --- a/x-pack/plugins/infra/public/hooks/use_log_view.ts +++ b/x-pack/plugins/infra/public/hooks/use_log_view.ts @@ -7,62 +7,90 @@ import { useInterpret, useSelector } from '@xstate/react'; import createContainer from 'constate'; -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useState } from 'react'; import { waitFor } from 'xstate/lib/waitFor'; -import { LogViewAttributes } from '../../common/log_views'; +import { LogViewAttributes, LogViewReference } from '../../common/log_views'; import { createLogViewNotificationChannel, createLogViewStateMachine, + DEFAULT_LOG_VIEW, } from '../observability_logs/log_view_state'; import type { ILogViewsClient } from '../services/log_views'; import { isDevMode } from '../utils/dev_mode'; +import { useKbnUrlStateStorageFromRouterContext } from '../utils/kbn_url_state_context'; +import { useKibanaContextForPlugin } from './use_kibana'; export const useLogView = ({ - logViewId, + initialLogViewReference, logViews, useDevTools = isDevMode(), }: { - logViewId: string; + initialLogViewReference?: LogViewReference; logViews: ILogViewsClient; useDevTools?: boolean; }) => { + const { + services: { + notifications: { toasts: toastsService }, + }, + } = useKibanaContextForPlugin(); + + const urlStateStorage = useKbnUrlStateStorageFromRouterContext(); + const [logViewStateNotifications] = useState(() => createLogViewNotificationChannel()); const logViewStateService = useInterpret( () => createLogViewStateMachine({ initialContext: { - logViewId, + logViewReference: initialLogViewReference ?? DEFAULT_LOG_VIEW, }, logViews, notificationChannel: logViewStateNotifications, + toastsService, + urlStateStorage, }), { devTools: useDevTools, } ); - useEffect(() => { - logViewStateService.send({ - type: 'LOG_VIEW_ID_CHANGED', - logViewId, - }); - }, [logViewId, logViewStateService]); + const changeLogViewReference = useCallback( + (logViewReference: LogViewReference) => { + logViewStateService.send({ + type: 'LOG_VIEW_REFERENCE_CHANGED', + logViewReference, + }); + }, + [logViewStateService] + ); + + const logViewReference = useSelector( + logViewStateService, + (state) => state.context.logViewReference + ); const logView = useSelector(logViewStateService, (state) => - state.matches('resolving') || state.matches('checkingStatus') || state.matches('resolved') + state.matches('resolving') || + state.matches('checkingStatus') || + state.matches('resolvedPersistedLogView') || + state.matches('resolvedInlineLogView') ? state.context.logView : undefined ); const resolvedLogView = useSelector(logViewStateService, (state) => - state.matches('checkingStatus') || state.matches('resolved') + state.matches('checkingStatus') || + state.matches('resolvedPersistedLogView') || + state.matches('resolvedInlineLogView') ? state.context.resolvedLogView : undefined ); const logViewStatus = useSelector(logViewStateService, (state) => - state.matches('resolved') ? state.context.status : undefined + state.matches('resolvedPersistedLogView') || state.matches('resolvedInlineLogView') + ? state.context.status + : undefined ); const isLoadingLogView = useSelector(logViewStateService, (state) => state.matches('loading')); @@ -91,6 +119,13 @@ export const useLogView = ({ state.matches('checkingStatusFailed') ); + const isPersistedLogView = useSelector( + logViewStateService, + (state) => state.context.logViewReference.type === 'log-view-reference' + ); + + const isInlineLogView = !isPersistedLogView; + const latestLoadLogViewFailures = useSelector(logViewStateService, (state) => state.matches('loadingFailed') || state.matches('resolutionFailed') || @@ -118,7 +153,10 @@ export const useLogView = ({ const doneState = await waitFor( logViewStateService, - (state) => state.matches('updatingFailed') || state.matches('resolved') + (state) => + state.matches('updatingFailed') || + state.matches('resolvedPersistedLogView') || + state.matches('resolvedInlineLogView') ); if (doneState.matches('updatingFailed')) { @@ -128,8 +166,12 @@ export const useLogView = ({ [logViewStateService] ); + const revertToDefaultLogView = useCallback(() => { + changeLogViewReference(DEFAULT_LOG_VIEW); + }, [changeLogViewReference]); + return { - // underlying state machine + // Underlying state machine logViewStateService, logViewStateNotifications, @@ -147,17 +189,21 @@ export const useLogView = ({ isLoadingLogViewStatus, isResolvingLogView, - // data - logViewId, + // Data + logViewReference, logView, resolvedLogView, logViewStatus, derivedDataView: resolvedLogView?.dataViewReference, + isInlineLogView, + isPersistedLogView, - // actions + // Actions load: retry, retry, update, + changeLogViewReference, + revertToDefaultLogView, }; }; diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/constants.ts b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/defaults.ts similarity index 63% rename from x-pack/plugins/actions/server/cleanup_failed_executions/constants.ts rename to x-pack/plugins/infra/public/observability_logs/log_view_state/src/defaults.ts index c8c1d6105586a..eb31f91ed12fb 100644 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/constants.ts +++ b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/defaults.ts @@ -5,5 +5,8 @@ * 2.0. */ -export const TASK_TYPE = 'cleanup_failed_action_executions'; -export const TASK_ID = `Actions-${TASK_TYPE}`; +const DEFAULT_LOG_VIEW_ID = 'default'; +export const DEFAULT_LOG_VIEW = { + type: 'log-view-reference' as const, + logViewId: DEFAULT_LOG_VIEW_ID, +}; diff --git a/x-pack/plugins/infra/public/observability_logs/log_view_state/src/index.ts b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/index.ts index 82e7b9fbd2796..5dcfedc6faa49 100644 --- a/x-pack/plugins/infra/public/observability_logs/log_view_state/src/index.ts +++ b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/index.ts @@ -8,3 +8,5 @@ export { createLogViewNotificationChannel, type LogViewNotificationEvent } from './notifications'; export * from './state_machine'; export * from './types'; +export * from './defaults'; +export * from './url_state_storage_service'; diff --git a/x-pack/plugins/infra/public/observability_logs/log_view_state/src/notifications.ts b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/notifications.ts index 4b5733452c037..105f911f6c789 100644 --- a/x-pack/plugins/infra/public/observability_logs/log_view_state/src/notifications.ts +++ b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/notifications.ts @@ -5,14 +5,14 @@ * 2.0. */ -import { LogViewStatus, ResolvedLogView } from '../../../../common/log_views'; +import { LogViewReference, LogViewStatus, ResolvedLogView } from '../../../../common/log_views'; import { createNotificationChannel } from '../../xstate_helpers'; import { LogViewContext, LogViewEvent } from './types'; export type LogViewNotificationEvent = | { type: 'LOADING_LOG_VIEW_STARTED'; - logViewId: string; + logViewReference: LogViewReference; } | { type: 'LOADING_LOG_VIEW_SUCCEEDED'; @@ -29,10 +29,10 @@ export const createLogViewNotificationChannel = () => export const logViewNotificationEventSelectors = { loadingLogViewStarted: (context: LogViewContext) => - 'logViewId' in context + 'logViewReference' in context ? ({ type: 'LOADING_LOG_VIEW_STARTED', - logViewId: context.logViewId, + logViewReference: context.logViewReference, } as LogViewNotificationEvent) : undefined, loadingLogViewSucceeded: (context: LogViewContext) => diff --git a/x-pack/plugins/infra/public/observability_logs/log_view_state/src/state_machine.ts b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/state_machine.ts index aa94ebcce6a01..2074119bb329c 100644 --- a/x-pack/plugins/infra/public/observability_logs/log_view_state/src/state_machine.ts +++ b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/state_machine.ts @@ -5,6 +5,8 @@ * 2.0. */ +import { IToasts } from '@kbn/core/public'; +import { IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import { catchError, from, map, of, throwError } from 'rxjs'; import { createMachine, actions, assign } from 'xstate'; import { ILogViewsClient } from '../../../services/log_views'; @@ -13,15 +15,20 @@ import { LogViewNotificationEvent, logViewNotificationEventSelectors } from './n import { LogViewContext, LogViewContextWithError, - LogViewContextWithId, LogViewContextWithLogView, + LogViewContextWithReference, LogViewContextWithResolvedLogView, LogViewContextWithStatus, LogViewEvent, LogViewTypestate, } from './types'; +import { + initializeFromUrl, + updateContextInUrl, + listenForUrlChanges, +} from './url_state_storage_service'; -export const createPureLogViewStateMachine = (initialContext: LogViewContextWithId) => +export const createPureLogViewStateMachine = (initialContext: LogViewContextWithReference) => /** @xstate-layout N4IgpgJg5mDOIC5QBkD2UBqBLMB3AxMgPIDiA+hgJICiA6mZQCJkDCAEgIIByJ1jA2gAYAuolAAHVLCwAXLKgB2YkAA9EAFkEBmAHQAmAGwB2dQYAcAVkGmAjGYMAaEAE9EAWi3qjO9WcGCLIzMbLWMLAE4AX0inNEwcAgBVAAVGDgAVaiFRJBBJaTlFZTUEG20DfUEDLUtwg3CbdXUtJ1cEDz11HSMLTzMagwtjAOjY9Gw8HQBXBSxZuQBDABssAC9IfGzlfNl5JVySz3CdGwMwrRsbCK0a1sQyiqNDCMEjcK09QT8LUZA4idwOiWqAWEDmUEIRA4jEoPDIAGVEiwWNQ+HwtrkdoV9qASkZPDoLnpwmZniTgmY7ghSTorP5fFo6lorHobL9-gkgSCwQoIcRobDyAAxDiUZDokTbKS7IoHRBWMzdT4vCxDPQ3PRUvTqnThcL+OoWVmdU7qdnjTkAJzgqCWADdwfgAErUeFEZCJdKUIhcMgisUSnISaXY4qIcm0y6XJ5mdR6Iw2IxanV6g2DY3qRPm+KTa2wW0O3nO13uz3e32I5GoxiBqUFPZh0ra7z9S6CBo9G4tFyIGl06z9JlWOzZgE6ADGAAswOOANbg+EyBYyKawfDsagsADSgoR6QyiXhftF4oEksxIYbctKFhCOksxjsF3CQSTPYQ2t0qfb6ZsJqMo6clOM7zryi7Lqu65sJuO5wvC+7pIeCJIiiaJnkGeSXrKuL3K+3RnJ8eqGPGgRUm8PjEvq5jBKE6oATEfwWrmNr2hsLr8swxDkFQdAYsG9bYao9x6BYXSkjcBrqp8RiOO+Hg6NUAzhEM6gkvUNRmgxHKTMCoLgkKCxYEsbHUOkToAJp8ZhAk4kJCCMl0MlPKqoS+O2b5tJ0jynGc+KCHowR1HogHMfmSxTNiBlGSZZmWee-EyrZJT6jYCkfARVxaDJsZaqY3Q+cYWj+YFBghYCwFzguS4rrAUXGRAxaxVZWJXjhpSZt4ng2O84Qie2njdp5eUJmchXFd1BjBVpTGAlM4gQMujopGkXpwv6p7NVhSXCV43SqfU2qqYYWVUm42rHAOcb1L12gsmV0zzYtRbLRku6VqhNboXWiWNi+3j6spfSDB84TqKdZjHAY-kRE05hfMSbLTTms2PXIvJ1SZHFkFxFA0LQm02Y2xiKsyJJNPqNxQ5Scl-hYOgBEVt6fsYqn0QxCioBAcDKNpuDfaG14hIq9T2FcjSWEEgync0XQkv4k1ZQYjQRD8SNjjMcy7MsayQPzrV2XYFQi0rt6+IE9gWFSZR09qZzNN1fRDFEaucrpPJQHrgklF4ej0yJInKRDpIeYg5hKoMZhvGUbxFfRYzIzoeYFuCnvbQgcs+Gb+oib4x1UsE4e9PYZzWLe90VaBUDgTVqeNmLF1GlU9S+FDRpkcLKkhO8Vwkqr8djknrEQLX16spcCl0poRoGE0NztxP1QvmLARPM7-eu9y+mGfVI9tV4RuXOqgSJsSIlUrRJyr8fdT+FUfeMQng8RXsGPDxehPXkvlTVAmQy9Le59JqX2JPiF8gxMyR3LtOSqYFqqrlfrvA2jcfAWH6IYGePtwjnwiCcYqHxbCqk0Jpdekw5oLTRh7d+P1P5nAUp8Dq6hRJeFVKdTovtSR2CaD+TMTQzD3TIU9KACCqECzauLOmYtiZZRqAOVhxJ7ysljCEGSTQ4xs0iEAA */ createMachine( { @@ -33,11 +40,22 @@ export const createPureLogViewStateMachine = (initialContext: LogViewContextWith states: { uninitialized: { always: { - target: 'loading', + target: 'initializingFromUrl', + }, + }, + initializingFromUrl: { + on: { + INITIALIZED_FROM_URL: { + target: 'loading', + actions: ['storeLogViewReference'], + }, + }, + invoke: { + src: 'initializeFromUrl', }, }, loading: { - entry: 'notifyLoadingStarted', + entry: ['notifyLoadingStarted', 'updateContextInUrl'], invoke: { src: 'loadLogView', }, @@ -76,18 +94,69 @@ export const createPureLogViewStateMachine = (initialContext: LogViewContextWith target: 'checkingStatusFailed', actions: 'storeError', }, - CHECKING_STATUS_SUCCEEDED: { - target: 'resolved', - actions: 'storeStatus', - }, + CHECKING_STATUS_SUCCEEDED: [ + { + target: 'resolvedPersistedLogView', + actions: 'storeStatus', + cond: 'isPersistedLogView', + }, + { + target: 'resolvedInlineLogView', + actions: 'storeStatus', + }, + ], }, }, - resolved: { - entry: 'notifyLoadingSucceeded', + resolvedPersistedLogView: { + invoke: { + src: 'listenForUrlChanges', + }, + entry: ['notifyLoadingSucceeded', 'updateContextInUrl'], on: { + PERSIST_INLINE_LOG_VIEW: undefined, RELOAD_LOG_VIEW: { target: 'loading', }, + LOG_VIEW_URL_KEY_REMOVED: { + actions: 'updateContextInUrl', + }, + }, + }, + resolvedInlineLogView: { + invoke: { + src: 'listenForUrlChanges', + }, + entry: ['notifyLoadingSucceeded', 'updateContextInUrl'], + on: { + PERSIST_INLINE_LOG_VIEW: { + target: 'persistingInlineLogView', + }, + LOG_VIEW_URL_KEY_REMOVED: { + actions: 'updateContextInUrl', + }, + }, + }, + persistingInlineLogView: { + invoke: { + src: 'persistInlineLogView', + }, + on: { + PERSISTING_INLINE_LOG_VIEW_FAILED: { + target: 'persistingInlineLogViewFailed', + actions: 'storeError', + }, + PERSISTING_INLINE_LOG_VIEW_SUCCEEDED: { + target: 'resolving', + actions: ['convertInlineLogViewReferenceToPersistedLogViewReference', 'storeLogView'], + }, + }, + }, + persistingInlineLogViewFailed: { + entry: 'notifyPersistingInlineLogViewFailed', + on: { + RETRY_PERSISTING_INLINE_LOG_VIEW: { + target: 'persistingInlineLogView', + }, }, }, loadingFailed: { @@ -126,7 +195,7 @@ export const createPureLogViewStateMachine = (initialContext: LogViewContextWith }, UPDATING_SUCCEEDED: { target: 'resolving', - actions: 'storeLogView', + actions: ['updateLogViewReference', 'storeLogView'], }, }, }, @@ -140,10 +209,9 @@ export const createPureLogViewStateMachine = (initialContext: LogViewContextWith }, }, on: { - LOG_VIEW_ID_CHANGED: { + LOG_VIEW_REFERENCE_CHANGED: { target: '.loading', - actions: 'storeLogViewId', - cond: 'isLogViewIdDifferent', + actions: 'storeLogViewReference', }, UPDATE: { target: '.updating', @@ -155,11 +223,11 @@ export const createPureLogViewStateMachine = (initialContext: LogViewContextWith notifyLoadingStarted: actions.pure(() => undefined), notifyLoadingSucceeded: actions.pure(() => undefined), notifyLoadingFailed: actions.pure(() => undefined), - storeLogViewId: assign((context, event) => - 'logViewId' in event + storeLogViewReference: assign((context, event) => + 'logViewReference' in event && event.logViewReference !== null ? ({ - logViewId: event.logViewId, - } as LogViewContextWithId) + logViewReference: event.logViewReference, + } as LogViewContextWithReference) : {} ), storeLogView: assign((context, event) => @@ -190,28 +258,55 @@ export const createPureLogViewStateMachine = (initialContext: LogViewContextWith } as LogViewContextWithError) : {} ), + convertInlineLogViewReferenceToPersistedLogViewReference: assign((context, event) => + 'logView' in event && context.logViewReference.type === 'log-view-inline' + ? ({ + logViewReference: { + type: 'log-view-reference', + logViewId: context.logViewReference.id, + }, + } as LogViewContextWithReference) + : {} + ), + updateLogViewReference: assign((context, event) => + 'attributes' in event && context.logViewReference.type === 'log-view-inline' + ? ({ + logViewReference: { + ...context.logViewReference, + attributes: { + ...context.logViewReference.attributes, + ...event.attributes, + }, + }, + } as LogViewContextWithReference) + : {} + ), }, guards: { - isLogViewIdDifferent: (context, event) => - 'logViewId' in event ? event.logViewId !== context.logViewId : false, + isPersistedLogView: (context, event) => + context.logViewReference.type === 'log-view-reference', }, } ); export interface LogViewStateMachineDependencies { - initialContext: LogViewContextWithId; + initialContext: LogViewContextWithReference; logViews: ILogViewsClient; notificationChannel?: NotificationChannel; + toastsService: IToasts; + urlStateStorage: IKbnUrlStateStorage; } export const createLogViewStateMachine = ({ initialContext, logViews, notificationChannel, + toastsService, + urlStateStorage, }: LogViewStateMachineDependencies) => createPureLogViewStateMachine(initialContext).withConfig({ - actions: - notificationChannel != null + actions: { + ...(notificationChannel != null ? { notifyLoadingStarted: notificationChannel.notify( logViewNotificationEventSelectors.loadingLogViewStarted @@ -223,13 +318,17 @@ export const createLogViewStateMachine = ({ logViewNotificationEventSelectors.loadingLogViewFailed ), } - : {}, + : {}), + updateContextInUrl: updateContextInUrl({ toastsService, urlStateStorage }), + }, services: { + initializeFromUrl: initializeFromUrl({ toastsService, urlStateStorage }), + listenForUrlChanges: listenForUrlChanges({ urlStateStorage }), loadLogView: (context) => from( - 'logViewId' in context - ? logViews.getLogView(context.logViewId) - : throwError(() => new Error('Failed to load log view: No id found in context.')) + 'logViewReference' in context + ? logViews.getLogView(context.logViewReference) + : throwError(() => new Error('Failed to load log view')) ).pipe( map( (logView): LogViewEvent => ({ @@ -246,8 +345,8 @@ export const createLogViewStateMachine = ({ ), updateLogView: (context, event) => from( - 'logViewId' in context && event.type === 'UPDATE' - ? logViews.putLogView(context.logViewId, event.attributes) + 'logViewReference' in context && event.type === 'UPDATE' + ? logViews.putLogView(context.logViewReference, event.attributes) : throwError( () => new Error( @@ -268,6 +367,30 @@ export const createLogViewStateMachine = ({ }) ) ), + persistInlineLogView: (context, event) => + from( + 'logViewReference' in context && + event.type === 'PERSIST_INLINE_LOG_VIEW' && + context.logViewReference.type === 'log-view-inline' + ? logViews.putLogView( + { type: 'log-view-reference', logViewId: context.logViewReference.id }, + context.logViewReference.attributes + ) + : throwError(() => new Error('Failed to persist inline Log View.')) + ).pipe( + map( + (logView): LogViewEvent => ({ + type: 'PERSISTING_INLINE_LOG_VIEW_SUCCEEDED', + logView, + }) + ), + catchError((error) => + of({ + type: 'PERSISTING_INLINE_LOG_VIEW_FAILED', + error, + }) + ) + ), resolveLogView: (context) => from( 'logView' in context diff --git a/x-pack/plugins/infra/public/observability_logs/log_view_state/src/types.ts b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/types.ts index 3a997748c5c38..3a7914e8ff6dc 100644 --- a/x-pack/plugins/infra/public/observability_logs/log_view_state/src/types.ts +++ b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/types.ts @@ -9,14 +9,15 @@ import type { ActorRef } from 'xstate'; import type { LogView, LogViewAttributes, + LogViewReference, LogViewStatus, ResolvedLogView, } from '../../../../common/log_views'; import { type NotificationChannel } from '../../xstate_helpers'; import { type LogViewNotificationEvent } from './notifications'; -export interface LogViewContextWithId { - logViewId: string; +export interface LogViewContextWithReference { + logViewReference: LogViewReference; } export interface LogViewContextWithLogView { @@ -38,46 +39,55 @@ export interface LogViewContextWithError { export type LogViewTypestate = | { value: 'uninitialized'; - context: LogViewContextWithId; + context: LogViewContextWithReference; } | { value: 'loading'; - context: LogViewContextWithId; + context: LogViewContextWithReference; } | { value: 'resolving'; - context: LogViewContextWithId & LogViewContextWithLogView; + context: LogViewContextWithReference & LogViewContextWithLogView; } | { value: 'checkingStatus'; - context: LogViewContextWithId & LogViewContextWithLogView & LogViewContextWithResolvedLogView; + context: LogViewContextWithReference & + LogViewContextWithLogView & + LogViewContextWithResolvedLogView; } | { - value: 'resolved'; - context: LogViewContextWithId & + value: 'resolvedPersistedLogView'; + context: LogViewContextWithReference & + LogViewContextWithLogView & + LogViewContextWithResolvedLogView & + LogViewContextWithStatus; + } + | { + value: 'resolvedInlineLogView'; + context: LogViewContextWithReference & LogViewContextWithLogView & LogViewContextWithResolvedLogView & LogViewContextWithStatus; } | { value: 'updating'; - context: LogViewContextWithId; + context: LogViewContextWithReference; } | { value: 'loadingFailed'; - context: LogViewContextWithId & LogViewContextWithError; + context: LogViewContextWithReference & LogViewContextWithError; } | { value: 'updatingFailed'; - context: LogViewContextWithId & LogViewContextWithError; + context: LogViewContextWithReference & LogViewContextWithError; } | { value: 'resolutionFailed'; - context: LogViewContextWithId & LogViewContextWithLogView & LogViewContextWithError; + context: LogViewContextWithReference & LogViewContextWithLogView & LogViewContextWithError; } | { value: 'checkingStatusFailed'; - context: LogViewContextWithId & LogViewContextWithLogView & LogViewContextWithError; + context: LogViewContextWithReference & LogViewContextWithLogView & LogViewContextWithError; }; export type LogViewContext = LogViewTypestate['context']; @@ -86,8 +96,12 @@ export type LogViewStateValue = LogViewTypestate['value']; export type LogViewEvent = | { - type: 'LOG_VIEW_ID_CHANGED'; - logViewId: string; + type: 'LOG_VIEW_REFERENCE_CHANGED'; + logViewReference: LogViewReference; + } + | { + type: 'INITIALIZED_FROM_URL'; + logViewReference: LogViewReference | null; } | { type: 'LOADING_SUCCEEDED'; @@ -130,7 +144,17 @@ export type LogViewEvent = } | { type: 'RELOAD_LOG_VIEW'; - }; + } + | { + type: 'PERSIST_INLINE_LOG_VIEW'; + } + | { type: 'PERSISTING_INLINE_LOG_VIEW_FAILED'; error: Error } + | { type: 'PERSISTING_INLINE_LOG_VIEW_SUCCEEDED'; logView: LogView } + | { + type: 'RETRY_PERSISTING_INLINE_LOG_VIEW'; + } + | { type: 'LOG_VIEW_URL_KEY_REMOVED' } + | { type: 'LOG_VIEW_URL_KEY_CHANGED' }; export type LogViewActorRef = ActorRef; export type LogViewNotificationChannel = NotificationChannel< diff --git a/x-pack/plugins/infra/public/observability_logs/log_view_state/src/url_state_storage_service.ts b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/url_state_storage_service.ts new file mode 100644 index 0000000000000..dd9098b09052e --- /dev/null +++ b/x-pack/plugins/infra/public/observability_logs/log_view_state/src/url_state_storage_service.ts @@ -0,0 +1,135 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as rt from 'io-ts'; +import { IToasts } from '@kbn/core/public'; +import { IKbnUrlStateStorage, withNotifyOnErrors } from '@kbn/kibana-utils-plugin/public'; +import { InvokeCreator } from 'xstate'; +import * as Either from 'fp-ts/lib/Either'; +import { identity, pipe } from 'fp-ts/lib/function'; +import { map } from 'rxjs'; +import { createPlainError, formatErrors } from '../../../../common/runtime_types'; +import { + LogViewReference, + logViewReferenceRT, + PersistedLogViewReference, +} from '../../../../common/log_views'; +import { LogViewContext, LogViewEvent } from './types'; +import { replaceStateKeyInQueryString } from '../../../utils/url_state'; + +export const defaultLogViewKey = 'logView'; +const defaultLegacySourceIdKey = 'sourceId'; + +interface LogViewUrlStateDependencies { + logViewKey?: string; + sourceIdKey?: string; + toastsService: IToasts; + urlStateStorage: IKbnUrlStateStorage; +} + +export const updateContextInUrl = + ({ urlStateStorage, logViewKey = defaultLogViewKey }: LogViewUrlStateDependencies) => + (context: LogViewContext, _event: LogViewEvent) => { + if (!('logViewReference' in context)) { + throw new Error('Missing keys from context needed to sync to the URL'); + } + + urlStateStorage.set(logViewKey, logViewStateInUrlRT.encode(context.logViewReference), { + replace: true, + }); + }; + +export const initializeFromUrl = + ({ + logViewKey = defaultLogViewKey, + sourceIdKey = defaultLegacySourceIdKey, + toastsService, + urlStateStorage, + }: LogViewUrlStateDependencies): InvokeCreator => + (_context, _event) => + (send) => { + const logViewQueryValueFromUrl = urlStateStorage.get(logViewKey); + const logViewQueryE = decodeLogViewQueryValueFromUrl(logViewQueryValueFromUrl); + + const legacySourceIdQueryValueFromUrl = urlStateStorage.get(sourceIdKey); + const sourceIdQueryE = decodeSourceIdQueryValueFromUrl(legacySourceIdQueryValueFromUrl); + + if (Either.isLeft(logViewQueryE) || Either.isLeft(sourceIdQueryE)) { + withNotifyOnErrors(toastsService).onGetError( + createPlainError( + formatErrors([ + ...(Either.isLeft(logViewQueryE) ? logViewQueryE.left : []), + ...(Either.isLeft(sourceIdQueryE) ? sourceIdQueryE.left : []), + ]) + ) + ); + + send({ + type: 'INITIALIZED_FROM_URL', + logViewReference: null, + }); + } else { + send({ + type: 'INITIALIZED_FROM_URL', + logViewReference: pipe( + // Via the legacy sourceId key + pipe( + sourceIdQueryE.right, + Either.fromNullable(null), + Either.map(convertSourceIdToReference) + ), + // Via the logView key + Either.alt(() => pipe(logViewQueryE.right, Either.fromNullable(null))), + Either.fold(identity, identity) + ), + }); + } + }; + +// NOTE: Certain navigations within the Logs solution will remove the logView URL key, +// we want to ensure the logView key is present in the URL at all times by monitoring for it's removal. +export const listenForUrlChanges = + ({ + urlStateStorage, + logViewKey = defaultLogViewKey, + }: { + urlStateStorage: LogViewUrlStateDependencies['urlStateStorage']; + logViewKey?: LogViewUrlStateDependencies['logViewKey']; + }): InvokeCreator => + (context, event) => { + return urlStateStorage + .change$(logViewKey) + .pipe( + map((value) => + value === undefined || value === null + ? { type: 'LOG_VIEW_URL_KEY_REMOVED' } + : { type: 'LOG_VIEW_URL_KEY_CHANGED' } + ) + ); + }; + +const logViewStateInUrlRT = rt.union([logViewReferenceRT, rt.null]); +const sourceIdStateInUrl = rt.union([rt.string, rt.null]); + +const decodeLogViewQueryValueFromUrl = (queryValueFromUrl: unknown) => { + return logViewStateInUrlRT.decode(queryValueFromUrl); +}; + +const decodeSourceIdQueryValueFromUrl = (queryValueFromUrl: unknown) => { + return sourceIdStateInUrl.decode(queryValueFromUrl); +}; + +const convertSourceIdToReference = (sourceId: string): PersistedLogViewReference => { + return { + type: 'log-view-reference' as const, + logViewId: sourceId, + }; +}; + +// NOTE: Used by link-to components +export const replaceLogViewInQueryString = (logViewReference: LogViewReference) => + replaceStateKeyInQueryString(defaultLogViewKey, logViewReference); diff --git a/x-pack/plugins/infra/public/observability_logs/xstate_helpers/src/index.ts b/x-pack/plugins/infra/public/observability_logs/xstate_helpers/src/index.ts index fa0e5da4cb4c1..8e6f993a9755e 100644 --- a/x-pack/plugins/infra/public/observability_logs/xstate_helpers/src/index.ts +++ b/x-pack/plugins/infra/public/observability_logs/xstate_helpers/src/index.ts @@ -9,3 +9,4 @@ export * from './invalid_state_callout'; export * from './notification_channel'; export * from './send_actions'; export * from './types'; +export * from './state_machine_playground'; diff --git a/x-pack/plugins/infra/public/observability_logs/xstate_helpers/src/state_machine_playground.tsx b/x-pack/plugins/infra/public/observability_logs/xstate_helpers/src/state_machine_playground.tsx new file mode 100644 index 0000000000000..78f1c5f15dee9 --- /dev/null +++ b/x-pack/plugins/infra/public/observability_logs/xstate_helpers/src/state_machine_playground.tsx @@ -0,0 +1,81 @@ +/* + * 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 { EuiButton } from '@elastic/eui'; +import React, { useCallback } from 'react'; +import { useLogViewContext } from '../../../hooks/use_log_view'; + +export const StateMachinePlayground = () => { + const { changeLogViewReference, revertToDefaultLogView, update, isLoading, logViewStateService } = + useLogViewContext(); + + const switchToInlineLogView = useCallback(() => { + changeLogViewReference({ + type: 'log-view-inline', + id: 'playground-log-view', + attributes: { + name: 'playground-log-view-name', + description: 'from the state machine playground', + logIndices: { type: 'index_name', indexName: 'logs-*' }, + logColumns: [ + { + fieldColumn: { + id: 'playground-field-column', + field: 'event.dataset', + }, + }, + ], + }, + }); + }, [changeLogViewReference]); + + const updateLogView = useCallback(() => { + update({ + name: 'Updated playground name', + }); + }, [update]); + + const persistInlineLogView = useCallback(() => { + logViewStateService.send({ + type: 'PERSIST_INLINE_LOG_VIEW', + }); + }, [logViewStateService]); + + return ( + <> + {isLoading && 'Is loading'} + switchToInlineLogView()} + > + {'Switch to inline Log View'} + + persistInlineLogView()} + > + {'Persist inline Log View'} + + revertToDefaultLogView()} + > + {'Revert to default (persisted) Log View'} + + updateLogView()} + > + {'Update log view'} + + + ); +}; diff --git a/x-pack/plugins/infra/public/pages/link_to/link_to_logs.test.tsx b/x-pack/plugins/infra/public/pages/link_to/link_to_logs.test.tsx index c6af835dad803..d3dd705a59811 100644 --- a/x-pack/plugins/infra/public/pages/link_to/link_to_logs.test.tsx +++ b/x-pack/plugins/infra/public/pages/link_to/link_to_logs.test.tsx @@ -22,6 +22,8 @@ import { LinkToLogsPage } from './link_to_logs'; jest.mock('../../hooks/use_log_view'); const useLogViewMock = useLogView as jest.MockedFunction; +const LOG_VIEW_REFERENCE = '(logViewId:default,type:log-view-reference)'; +const OTHER_LOG_VIEW_REFERENCE = '(logViewId:OTHER_SOURCE,type:log-view-reference)'; const renderRoutes = (routes: React.ReactElement) => { const history = createMemoryHistory(); @@ -71,7 +73,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('default'); + expect(searchParams.get('logView')).toEqual(LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:'FILTER_FIELD:FILTER_VALUE'),refreshInterval:(pause:!t,value:5000),timeRange:(from:'2019-02-20T12:58:09.404Z',to:'2019-02-20T14:58:09.404Z'))"` ); @@ -92,7 +94,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('OTHER_SOURCE'); + expect(searchParams.get('logView')).toEqual(OTHER_LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:''),refreshInterval:(pause:!t,value:5000))"` ); @@ -113,7 +115,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('default'); + expect(searchParams.get('logView')).toEqual(LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:'FILTER_FIELD:FILTER_VALUE'),refreshInterval:(pause:!t,value:5000),timeRange:(from:'2019-02-20T12:58:09.404Z',to:'2019-02-20T14:58:09.404Z'))"` ); @@ -134,7 +136,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('OTHER_SOURCE'); + expect(searchParams.get('logView')).toEqual(OTHER_LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:''),refreshInterval:(pause:!t,value:5000))"` ); @@ -155,7 +157,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('default'); + expect(searchParams.get('logView')).toEqual(LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:'host.name: HOST_NAME'),refreshInterval:(pause:!t,value:5000))"` ); @@ -176,7 +178,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('default'); + expect(searchParams.get('logView')).toEqual(LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:'(host.name: HOST_NAME) and (FILTER_FIELD:FILTER_VALUE)'),refreshInterval:(pause:!t,value:5000),timeRange:(from:'2019-02-20T12:58:09.404Z',to:'2019-02-20T14:58:09.404Z'))"` ); @@ -197,7 +199,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('OTHER_SOURCE'); + expect(searchParams.get('logView')).toEqual(OTHER_LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:'host.name: HOST_NAME'),refreshInterval:(pause:!t,value:5000))"` ); @@ -233,7 +235,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('default'); + expect(searchParams.get('logView')).toEqual(LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:'container.id: CONTAINER_ID'),refreshInterval:(pause:!t,value:5000))"` ); @@ -254,7 +256,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('default'); + expect(searchParams.get('logView')).toEqual(LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:'(container.id: CONTAINER_ID) and (FILTER_FIELD:FILTER_VALUE)'),refreshInterval:(pause:!t,value:5000),timeRange:(from:'2019-02-20T12:58:09.404Z',to:'2019-02-20T14:58:09.404Z'))"` ); @@ -291,7 +293,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('default'); + expect(searchParams.get('logView')).toEqual(LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:'kubernetes.pod.uid: POD_UID'),refreshInterval:(pause:!t,value:5000))"` ); @@ -310,7 +312,7 @@ describe('LinkToLogsPage component', () => { expect(history.location.pathname).toEqual('/stream'); const searchParams = new URLSearchParams(history.location.search); - expect(searchParams.get('sourceId')).toEqual('default'); + expect(searchParams.get('logView')).toEqual(LOG_VIEW_REFERENCE); expect(searchParams.get('logFilter')).toMatchInlineSnapshot( `"(query:(language:kuery,query:'(kubernetes.pod.uid: POD_UID) and (FILTER_FIELD:FILTER_VALUE)'),refreshInterval:(pause:!t,value:5000),timeRange:(from:'2019-02-20T12:58:09.404Z',to:'2019-02-20T14:58:09.404Z'))"` ); diff --git a/x-pack/plugins/infra/public/pages/link_to/link_to_logs.tsx b/x-pack/plugins/infra/public/pages/link_to/link_to_logs.tsx index 85d38e7f476d8..60afe9c98bd54 100644 --- a/x-pack/plugins/infra/public/pages/link_to/link_to_logs.tsx +++ b/x-pack/plugins/infra/public/pages/link_to/link_to_logs.tsx @@ -26,11 +26,11 @@ export const LinkToLogsPage: React.FC = (props) => { return ( - - + + ); diff --git a/x-pack/plugins/infra/public/pages/link_to/redirect_to_logs.test.tsx b/x-pack/plugins/infra/public/pages/link_to/redirect_to_logs.test.tsx index 58ba0df004f26..c5c3e4d507582 100644 --- a/x-pack/plugins/infra/public/pages/link_to/redirect_to_logs.test.tsx +++ b/x-pack/plugins/infra/public/pages/link_to/redirect_to_logs.test.tsx @@ -20,7 +20,7 @@ describe('RedirectToLogs component', () => { expect(component).toMatchInlineSnapshot(` `); }); @@ -34,7 +34,7 @@ describe('RedirectToLogs component', () => { expect(component).toMatchInlineSnapshot(` `); }); @@ -46,7 +46,7 @@ describe('RedirectToLogs component', () => { expect(component).toMatchInlineSnapshot(` `); }); diff --git a/x-pack/plugins/infra/public/pages/link_to/redirect_to_logs.tsx b/x-pack/plugins/infra/public/pages/link_to/redirect_to_logs.tsx index 32bc4c909284d..4d4533596fd57 100644 --- a/x-pack/plugins/infra/public/pages/link_to/redirect_to_logs.tsx +++ b/x-pack/plugins/infra/public/pages/link_to/redirect_to_logs.tsx @@ -8,27 +8,27 @@ import React from 'react'; import { match as RouteMatch, Redirect, RouteComponentProps } from 'react-router-dom'; import { flowRight } from 'lodash'; -import { replaceSourceIdInQueryString } from '../../containers/source_id'; import { replaceLogPositionInQueryString } from '../../observability_logs/log_stream_position_state/src/url_state_storage_service'; import { replaceLogFilterInQueryString } from '../../observability_logs/log_stream_query_state'; import { getFilterFromLocation, getTimeFromLocation } from './query_params'; +import { replaceLogViewInQueryString } from '../../observability_logs/log_view_state'; type RedirectToLogsType = RouteComponentProps<{}>; interface RedirectToLogsProps extends RedirectToLogsType { match: RouteMatch<{ - sourceId?: string; + logViewId?: string; }>; } export const RedirectToLogs = ({ location, match }: RedirectToLogsProps) => { - const sourceId = match.params.sourceId || 'default'; + const logViewId = match.params.logViewId || 'default'; const filter = getFilterFromLocation(location); const time = getTimeFromLocation(location); const searchString = flowRight( replaceLogFilterInQueryString({ language: 'kuery', query: filter }, time), replaceLogPositionInQueryString(time), - replaceSourceIdInQueryString(sourceId) + replaceLogViewInQueryString({ type: 'log-view-reference', logViewId }) )(''); return ; diff --git a/x-pack/plugins/infra/public/pages/link_to/redirect_to_node_logs.tsx b/x-pack/plugins/infra/public/pages/link_to/redirect_to_node_logs.tsx index 4f5fb79acc76f..7be728273e5b6 100644 --- a/x-pack/plugins/infra/public/pages/link_to/redirect_to_node_logs.tsx +++ b/x-pack/plugins/infra/public/pages/link_to/redirect_to_node_logs.tsx @@ -14,28 +14,28 @@ import { flowRight } from 'lodash'; import { findInventoryFields } from '../../../common/inventory_models'; import { InventoryItemType } from '../../../common/inventory_models/types'; import { LoadingPage } from '../../components/loading_page'; -import { replaceSourceIdInQueryString } from '../../containers/source_id'; import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; import { useLogView } from '../../hooks/use_log_view'; import { replaceLogFilterInQueryString } from '../../observability_logs/log_stream_query_state'; import { getFilterFromLocation, getTimeFromLocation } from './query_params'; import { replaceLogPositionInQueryString } from '../../observability_logs/log_stream_position_state/src/url_state_storage_service'; +import { replaceLogViewInQueryString } from '../../observability_logs/log_view_state'; type RedirectToNodeLogsType = RouteComponentProps<{ nodeId: string; nodeType: InventoryItemType; - sourceId?: string; + logViewId?: string; }>; export const RedirectToNodeLogs = ({ match: { - params: { nodeId, nodeType, sourceId = 'default' }, + params: { nodeId, nodeType, logViewId = 'default' }, }, location, }: RedirectToNodeLogsType) => { const { services } = useKibanaContextForPlugin(); const { isLoading, load } = useLogView({ - logViewId: sourceId, + initialLogViewReference: { type: 'log-view-reference', logViewId }, logViews: services.logViews.client, }); @@ -65,7 +65,7 @@ export const RedirectToNodeLogs = ({ const searchString = flowRight( replaceLogFilterInQueryString({ language: 'kuery', query: filter }, time), replaceLogPositionInQueryString(time), - replaceSourceIdInQueryString(sourceId) + replaceLogViewInQueryString({ type: 'log-view-reference', logViewId }) )(''); return ; diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/page_providers.tsx b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/page_providers.tsx index 35150368b586c..6e1d3f4a4f0bd 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/page_providers.tsx +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/page_providers.tsx @@ -6,6 +6,7 @@ */ import React from 'react'; +import { InlineLogViewSplashPage } from '../../../components/logging/inline_log_view_splash_page'; import { LogAnalysisSetupFlyoutStateProvider } from '../../../components/logging/log_analysis_setup/setup_flyout'; import { SourceLoadingPage } from '../../../components/source_loading_page'; import { LogEntryCategoriesModuleProvider } from '../../../containers/logs/log_analysis/modules/log_entry_categories'; @@ -14,8 +15,15 @@ import { useLogViewContext } from '../../../hooks/use_log_view'; import { ConnectedLogViewErrorPage } from '../shared/page_log_view_error'; export const LogEntryCategoriesPageProviders: React.FunctionComponent = ({ children }) => { - const { hasFailedLoading, isLoading, isUninitialized, resolvedLogView, logViewId } = - useLogViewContext(); + const { + hasFailedLoading, + isLoading, + isUninitialized, + resolvedLogView, + logViewReference, + isPersistedLogView, + revertToDefaultLogView, + } = useLogViewContext(); const { space } = useActiveKibanaSpace(); // This is a rather crude way of guarding the dependent providers against @@ -23,15 +31,20 @@ export const LogEntryCategoriesPageProviders: React.FunctionComponent = ({ child // React concurrent mode and Suspense in order to handle that more gracefully. if (space == null) { return null; + } else if (!isPersistedLogView) { + return ; } else if (hasFailedLoading) { return ; } else if (isLoading || isUninitialized) { return ; } else if (resolvedLogView != null) { + if (logViewReference.type === 'log-view-inline') { + throw new Error('Logs ML features only support persisted Log View references'); + } return ( @@ -265,7 +265,7 @@ export const LogEntryCategoriesResultsContent: React.FunctionComponent< = ({ categoryId, timeRange, sourceId }) => { + logViewReference: PersistedLogViewReference; +}> = ({ categoryId, timeRange, logViewReference }) => { const { getLogEntryCategoryExamples, hasFailedLoadingLogEntryCategoryExamples, @@ -27,7 +28,7 @@ export const CategoryDetailsRow: React.FunctionComponent<{ categoryId, endTime: timeRange.endTime, exampleCount, - sourceId, + logViewReference, startTime: timeRange.startTime, }); diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/sections/top_categories/top_categories_section.tsx b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/sections/top_categories/top_categories_section.tsx index 0aabc570a89e8..c9f93ee618ddb 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/sections/top_categories/top_categories_section.tsx +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/sections/top_categories/top_categories_section.tsx @@ -9,6 +9,7 @@ import { EuiLoadingSpinner } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; +import { PersistedLogViewReference } from '../../../../../../common/log_views'; import { LogEntryCategory } from '../../../../../../common/log_analysis'; import { TimeRange } from '../../../../../../common/time'; import { LoadingOverlayWrapper } from '../../../../../components/loading_overlay_wrapper'; @@ -18,7 +19,7 @@ import { SortOptions, ChangeSortOptions } from '../../use_log_entry_categories_r export const TopCategoriesSection: React.FunctionComponent<{ isLoadingTopCategories?: boolean; jobId: string; - sourceId: string; + logViewReference: PersistedLogViewReference; timeRange: TimeRange; topCategories: LogEntryCategory[]; sortOptions: SortOptions; @@ -26,7 +27,7 @@ export const TopCategoriesSection: React.FunctionComponent<{ }> = ({ isLoadingTopCategories = false, jobId, - sourceId, + logViewReference, timeRange, topCategories, sortOptions, @@ -40,7 +41,7 @@ export const TopCategoriesSection: React.FunctionComponent<{ > ), }), {} ), - [expandedCategories, sourceId, timeRange] + [expandedCategories, logViewReference, timeRange] ); return ( diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_log_entry_category_datasets.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_log_entry_category_datasets.ts index 34358b983e12b..e2f34f644ecaa 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_log_entry_category_datasets.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_log_entry_category_datasets.ts @@ -6,6 +6,7 @@ */ import type { HttpHandler } from '@kbn/core/public'; +import { PersistedLogViewReference } from '../../../../../common/log_views'; import { getLogEntryCategoryDatasetsRequestPayloadRT, @@ -15,7 +16,7 @@ import { import { decodeOrThrow } from '../../../../../common/runtime_types'; interface RequestArgs { - sourceId: string; + logViewReference: PersistedLogViewReference; startTime: number; endTime: number; } @@ -24,14 +25,14 @@ export const callGetLogEntryCategoryDatasetsAPI = async ( requestArgs: RequestArgs, fetch: HttpHandler ) => { - const { sourceId, startTime, endTime } = requestArgs; + const { logViewReference, startTime, endTime } = requestArgs; const response = await fetch(LOG_ANALYSIS_GET_LOG_ENTRY_CATEGORY_DATASETS_PATH, { method: 'POST', body: JSON.stringify( getLogEntryCategoryDatasetsRequestPayloadRT.encode({ data: { - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, timeRange: { startTime, endTime, diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_log_entry_category_examples.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_log_entry_category_examples.ts index e3b99750af715..52f9f17747b5a 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_log_entry_category_examples.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_log_entry_category_examples.ts @@ -6,6 +6,7 @@ */ import type { HttpHandler } from '@kbn/core/public'; +import { PersistedLogViewReference } from '../../../../../common/log_views'; import { getLogEntryCategoryExamplesRequestPayloadRT, @@ -15,7 +16,7 @@ import { import { decodeOrThrow } from '../../../../../common/runtime_types'; interface RequestArgs { - sourceId: string; + logViewReference: PersistedLogViewReference; startTime: number; endTime: number; categoryId: number; @@ -26,7 +27,7 @@ export const callGetLogEntryCategoryExamplesAPI = async ( requestArgs: RequestArgs, fetch: HttpHandler ) => { - const { sourceId, startTime, endTime, categoryId, exampleCount } = requestArgs; + const { logViewReference, startTime, endTime, categoryId, exampleCount } = requestArgs; const response = await fetch(LOG_ANALYSIS_GET_LOG_ENTRY_CATEGORY_EXAMPLES_PATH, { method: 'POST', @@ -35,7 +36,7 @@ export const callGetLogEntryCategoryExamplesAPI = async ( data: { categoryId, exampleCount, - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, timeRange: { startTime, endTime, diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_top_log_entry_categories.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_top_log_entry_categories.ts index 93e9daf0b9cb6..0cd04d999183f 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_top_log_entry_categories.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/service_calls/get_top_log_entry_categories.ts @@ -6,6 +6,7 @@ */ import type { HttpHandler } from '@kbn/core/public'; +import { PersistedLogViewReference } from '../../../../../common/log_views'; import { getLogEntryCategoriesRequestPayloadRT, @@ -16,7 +17,7 @@ import { CategoriesSort } from '../../../../../common/log_analysis'; import { decodeOrThrow } from '../../../../../common/runtime_types'; interface RequestArgs { - sourceId: string; + logViewReference: PersistedLogViewReference; startTime: number; endTime: number; categoryCount: number; @@ -28,7 +29,7 @@ export const callGetTopLogEntryCategoriesAPI = async ( requestArgs: RequestArgs, fetch: HttpHandler ) => { - const { sourceId, startTime, endTime, categoryCount, datasets, sort } = requestArgs; + const { logViewReference, startTime, endTime, categoryCount, datasets, sort } = requestArgs; const intervalDuration = endTime - startTime; const response = await fetch(LOG_ANALYSIS_GET_LOG_ENTRY_CATEGORIES_PATH, { @@ -36,7 +37,7 @@ export const callGetTopLogEntryCategoriesAPI = async ( body: JSON.stringify( getLogEntryCategoriesRequestPayloadRT.encode({ data: { - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, timeRange: { startTime, endTime, diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_categories_results.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_categories_results.ts index b4cfb301e0402..f7e05c885f026 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_categories_results.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_categories_results.ts @@ -7,6 +7,7 @@ import { useMemo, useState } from 'react'; +import { PersistedLogViewReference } from '../../../../common/log_views'; import { GetLogEntryCategoriesSuccessResponsePayload, GetLogEntryCategoryDatasetsSuccessResponsePayload, @@ -30,7 +31,7 @@ export const useLogEntryCategoriesResults = ({ endTime, onGetLogEntryCategoryDatasetsError, onGetTopLogEntryCategoriesError, - sourceId, + logViewReference, startTime, }: { categoriesCount: number; @@ -38,7 +39,7 @@ export const useLogEntryCategoriesResults = ({ endTime: number; onGetLogEntryCategoryDatasetsError?: (error: Error) => void; onGetTopLogEntryCategoriesError?: (error: Error) => void; - sourceId: string; + logViewReference: PersistedLogViewReference; startTime: number; }) => { const [sortOptions, setSortOptions] = useState({ @@ -56,7 +57,7 @@ export const useLogEntryCategoriesResults = ({ createPromise: async () => { return await callGetTopLogEntryCategoriesAPI( { - sourceId, + logViewReference, startTime, endTime, categoryCount: categoriesCount, @@ -79,7 +80,7 @@ export const useLogEntryCategoriesResults = ({ } }, }, - [categoriesCount, endTime, filteredDatasets, sourceId, startTime, sortOptions] + [categoriesCount, endTime, filteredDatasets, logViewReference, startTime, sortOptions] ); const [getLogEntryCategoryDatasetsRequest, getLogEntryCategoryDatasets] = useTrackedPromise( @@ -87,7 +88,7 @@ export const useLogEntryCategoriesResults = ({ cancelPreviousOn: 'creation', createPromise: async () => { return await callGetLogEntryCategoryDatasetsAPI( - { sourceId, startTime, endTime }, + { logViewReference, startTime, endTime }, services.http.fetch ); }, @@ -104,7 +105,7 @@ export const useLogEntryCategoriesResults = ({ } }, }, - [categoriesCount, endTime, sourceId, startTime] + [categoriesCount, endTime, logViewReference, startTime] ); const isLoadingTopLogEntryCategories = useMemo( diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_category_examples.tsx b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_category_examples.tsx index 010bcaa47942e..8152cae426448 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_category_examples.tsx +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_categories/use_log_entry_category_examples.tsx @@ -6,6 +6,7 @@ */ import { useMemo, useState } from 'react'; +import { PersistedLogViewReference } from '../../../../common/log_views'; import { LogEntryCategoryExample } from '../../../../common/http_api'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; @@ -16,13 +17,13 @@ export const useLogEntryCategoryExamples = ({ categoryId, endTime, exampleCount, - sourceId, + logViewReference, startTime, }: { categoryId: number; endTime: number; exampleCount: number; - sourceId: string; + logViewReference: PersistedLogViewReference; startTime: number; }) => { const { services } = useKibanaContextForPlugin(); @@ -37,7 +38,7 @@ export const useLogEntryCategoryExamples = ({ createPromise: async () => { return await callGetLogEntryCategoryExamplesAPI( { - sourceId, + logViewReference, startTime, endTime, categoryId, @@ -50,7 +51,7 @@ export const useLogEntryCategoryExamples = ({ setLogEntryCategoryExamples(examples); }, }, - [categoryId, endTime, exampleCount, sourceId, startTime] + [categoryId, endTime, exampleCount, logViewReference, startTime] ); const isLoadingLogEntryCategoryExamples = useMemo( diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/page_providers.tsx b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/page_providers.tsx index f3ddc6c7cc57d..7e1381cbd4f21 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/page_providers.tsx +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/page_providers.tsx @@ -6,6 +6,7 @@ */ import React from 'react'; +import { InlineLogViewSplashPage } from '../../../components/logging/inline_log_view_splash_page'; import { LogAnalysisSetupFlyoutStateProvider } from '../../../components/logging/log_analysis_setup/setup_flyout'; import { SourceLoadingPage } from '../../../components/source_loading_page'; import { LogEntryCategoriesModuleProvider } from '../../../containers/logs/log_analysis/modules/log_entry_categories'; @@ -16,8 +17,16 @@ import { useLogViewContext } from '../../../hooks/use_log_view'; import { ConnectedLogViewErrorPage } from '../shared/page_log_view_error'; export const LogEntryRatePageProviders: React.FunctionComponent = ({ children }) => { - const { hasFailedLoading, isLoading, isUninitialized, logViewId, resolvedLogView } = - useLogViewContext(); + const { + hasFailedLoading, + isLoading, + isUninitialized, + logViewReference, + resolvedLogView, + isPersistedLogView, + revertToDefaultLogView, + } = useLogViewContext(); + const { space } = useActiveKibanaSpace(); // This is a rather crude way of guarding the dependent providers against @@ -25,23 +34,28 @@ export const LogEntryRatePageProviders: React.FunctionComponent = ({ children }) // React concurrent mode and Suspense in order to handle that more gracefully. if (space == null) { return null; + } else if (!isPersistedLogView) { + return ; } else if (isLoading || isUninitialized) { return ; } else if (hasFailedLoading) { return ; } else if (resolvedLogView != null) { + if (logViewReference.type === 'log-view-inline') { + throw new Error('Logs ML features only support persisted Log Views'); + } return ( ) : null} diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/sections/anomalies/expanded_row.tsx b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/sections/anomalies/expanded_row.tsx index ef5db53ebdc31..493b5c4077c69 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/sections/anomalies/expanded_row.tsx +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/sections/anomalies/expanded_row.tsx @@ -28,7 +28,11 @@ export const AnomaliesTableExpandedRow: React.FunctionComponent<{ anomaly: LogEntryAnomaly; timeRange: TimeRange; }> = ({ anomaly, timeRange }) => { - const { logViewId } = useLogViewContext(); + const { logViewReference } = useLogViewContext(); + + if (logViewReference.type === 'log-view-inline') { + throw new Error('Logs ML features only support persisted Log Views'); + } const { getLogEntryExamples, @@ -39,7 +43,7 @@ export const AnomaliesTableExpandedRow: React.FunctionComponent<{ dataset: anomaly.dataset, endTime: anomaly.startTime + anomaly.duration, exampleCount: EXAMPLE_COUNT, - sourceId: logViewId, + logViewReference, startTime: anomaly.startTime, categoryId: isCategoryAnomaly(anomaly) ? anomaly.categoryId : undefined, }); diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_anomalies.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_anomalies.ts index 7916cad0f1e07..ef39f6ac5f012 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_anomalies.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_anomalies.ts @@ -6,6 +6,7 @@ */ import type { HttpHandler } from '@kbn/core/public'; +import { PersistedLogViewReference } from '../../../../../common/log_views'; import { getLogEntryAnomaliesRequestPayloadRT, getLogEntryAnomaliesSuccessReponsePayloadRT, @@ -15,7 +16,7 @@ import { decodeOrThrow } from '../../../../../common/runtime_types'; import { AnomaliesSort, Pagination } from '../../../../../common/log_analysis'; interface RequestArgs { - sourceId: string; + logViewReference: PersistedLogViewReference; startTime: number; endTime: number; sort: AnomaliesSort; @@ -24,13 +25,13 @@ interface RequestArgs { } export const callGetLogEntryAnomaliesAPI = async (requestArgs: RequestArgs, fetch: HttpHandler) => { - const { sourceId, startTime, endTime, sort, pagination, datasets } = requestArgs; + const { logViewReference, startTime, endTime, sort, pagination, datasets } = requestArgs; const response = await fetch(LOG_ANALYSIS_GET_LOG_ENTRY_ANOMALIES_PATH, { method: 'POST', body: JSON.stringify( getLogEntryAnomaliesRequestPayloadRT.encode({ data: { - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, timeRange: { startTime, endTime, diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_anomalies_datasets.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_anomalies_datasets.ts index 16a8092f290f8..8915f514d1bfb 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_anomalies_datasets.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_anomalies_datasets.ts @@ -6,6 +6,7 @@ */ import type { HttpHandler } from '@kbn/core/public'; +import { PersistedLogViewReference } from '../../../../../common/log_views'; import { decodeOrThrow } from '../../../../../common/runtime_types'; import { getLogEntryAnomaliesDatasetsRequestPayloadRT, @@ -14,7 +15,7 @@ import { } from '../../../../../common/http_api/log_analysis'; interface RequestArgs { - sourceId: string; + logViewReference: PersistedLogViewReference; startTime: number; endTime: number; } @@ -23,13 +24,13 @@ export const callGetLogEntryAnomaliesDatasetsAPI = async ( requestArgs: RequestArgs, fetch: HttpHandler ) => { - const { sourceId, startTime, endTime } = requestArgs; + const { logViewReference, startTime, endTime } = requestArgs; const response = await fetch(LOG_ANALYSIS_GET_LOG_ENTRY_ANOMALIES_DATASETS_PATH, { method: 'POST', body: JSON.stringify( getLogEntryAnomaliesDatasetsRequestPayloadRT.encode({ data: { - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, timeRange: { startTime, endTime, diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_examples.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_examples.ts index 0e44e5b02feb7..75580caa6db8a 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_examples.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/service_calls/get_log_entry_examples.ts @@ -6,6 +6,7 @@ */ import type { HttpHandler } from '@kbn/core/public'; +import { PersistedLogViewReference } from '../../../../../common/log_views'; import { getLogEntryExamplesRequestPayloadRT, @@ -15,7 +16,7 @@ import { import { decodeOrThrow } from '../../../../../common/runtime_types'; interface RequestArgs { - sourceId: string; + logViewReference: PersistedLogViewReference; startTime: number; endTime: number; dataset: string; @@ -24,7 +25,7 @@ interface RequestArgs { } export const callGetLogEntryExamplesAPI = async (requestArgs: RequestArgs, fetch: HttpHandler) => { - const { sourceId, startTime, endTime, dataset, exampleCount, categoryId } = requestArgs; + const { logViewReference, startTime, endTime, dataset, exampleCount, categoryId } = requestArgs; const response = await fetch(LOG_ANALYSIS_GET_LOG_ENTRY_RATE_EXAMPLES_PATH, { method: 'POST', body: JSON.stringify( @@ -32,7 +33,7 @@ export const callGetLogEntryExamplesAPI = async (requestArgs: RequestArgs, fetch data: { dataset, exampleCount, - logView: { type: 'log-view-reference', logViewId: sourceId }, + logView: logViewReference, timeRange: { startTime, endTime, diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_anomalies_results.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_anomalies_results.ts index 80123bb10e550..f68aa20d41f0e 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_anomalies_results.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_anomalies_results.ts @@ -7,6 +7,7 @@ import { useMemo, useState, useCallback, useEffect, useReducer } from 'react'; import useMount from 'react-use/lib/useMount'; +import { PersistedLogViewReference } from '../../../../common/log_views'; import { useTrackedPromise, CanceledPromiseError } from '../../../utils/use_tracked_promise'; import { callGetLogEntryAnomaliesAPI } from './service_calls/get_log_entry_anomalies'; import { callGetLogEntryAnomaliesDatasetsAPI } from './service_calls/get_log_entry_anomalies_datasets'; @@ -137,7 +138,7 @@ const STATE_DEFAULTS: ReducerStateDefaults = { export const useLogEntryAnomaliesResults = ({ endTime, startTime, - sourceId, + logViewReference, defaultSortOptions, defaultPaginationOptions, onGetLogEntryAnomaliesDatasetsError, @@ -145,7 +146,7 @@ export const useLogEntryAnomaliesResults = ({ }: { endTime: number; startTime: number; - sourceId: string; + logViewReference: PersistedLogViewReference; defaultSortOptions: AnomaliesSort; defaultPaginationOptions: Pick; onGetLogEntryAnomaliesDatasetsError?: (error: Error) => void; @@ -183,7 +184,7 @@ export const useLogEntryAnomaliesResults = ({ } = reducerState; return await callGetLogEntryAnomaliesAPI( { - sourceId, + logViewReference, startTime: queryStartTime, endTime: queryEndTime, sort: sortOptions, @@ -216,7 +217,7 @@ export const useLogEntryAnomaliesResults = ({ }, }, [ - sourceId, + logViewReference, dispatch, reducerState.timeRange, reducerState.sortOptions, @@ -294,7 +295,7 @@ export const useLogEntryAnomaliesResults = ({ cancelPreviousOn: 'creation', createPromise: async () => { return await callGetLogEntryAnomaliesDatasetsAPI( - { sourceId, startTime, endTime }, + { logViewReference, startTime, endTime }, services.http.fetch ); }, @@ -311,7 +312,7 @@ export const useLogEntryAnomaliesResults = ({ } }, }, - [endTime, sourceId, startTime] + [endTime, logViewReference, startTime] ); const isLoadingDatasets = useMemo( diff --git a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_examples.ts b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_examples.ts index 8f6269c46c3df..a678f5deaf07a 100644 --- a/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_examples.ts +++ b/x-pack/plugins/infra/public/pages/logs/log_entry_rate/use_log_entry_examples.ts @@ -6,6 +6,7 @@ */ import { useMemo, useState } from 'react'; +import { PersistedLogViewReference } from '../../../../common/log_views'; import { LogEntryExample } from '../../../../common/log_analysis'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; @@ -16,14 +17,14 @@ export const useLogEntryExamples = ({ dataset, endTime, exampleCount, - sourceId, + logViewReference, startTime, categoryId, }: { dataset: string; endTime: number; exampleCount: number; - sourceId: string; + logViewReference: PersistedLogViewReference; startTime: number; categoryId?: string; }) => { @@ -36,7 +37,7 @@ export const useLogEntryExamples = ({ createPromise: async () => { return await callGetLogEntryExamplesAPI( { - sourceId, + logViewReference, startTime, endTime, dataset, @@ -50,7 +51,7 @@ export const useLogEntryExamples = ({ setLogEntryExamples(examples); }, }, - [dataset, endTime, exampleCount, sourceId, startTime] + [dataset, endTime, exampleCount, logViewReference, startTime] ); const isLoadingLogEntryExamples = useMemo( diff --git a/x-pack/plugins/infra/public/pages/logs/page_content.tsx b/x-pack/plugins/infra/public/pages/logs/page_content.tsx index 0be59c785919f..17def99bc1612 100644 --- a/x-pack/plugins/infra/public/pages/logs/page_content.tsx +++ b/x-pack/plugins/infra/public/pages/logs/page_content.tsx @@ -12,7 +12,7 @@ import { Switch } from 'react-router-dom'; import { Route } from '@kbn/shared-ux-router'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { HeaderMenuPortal, useLinkProps } from '@kbn/observability-plugin/public'; -import { AlertDropdown } from '../../alerting/log_threshold'; +import { LazyAlertDropdownWrapper } from '../../alerting/log_threshold'; import { HelpCenterContent } from '../../components/help_center_content'; import { useReadOnlyBadge } from '../../hooks/use_readonly_badge'; import { HeaderActionMenuContext } from '../../utils/header_action_menu_provider'; @@ -21,9 +21,12 @@ import { LogEntryCategoriesPage } from './log_entry_categories'; import { LogEntryRatePage } from './log_entry_rate'; import { LogsSettingsPage } from './settings'; import { StreamPage } from './stream'; +import { isDevMode } from '../../utils/dev_mode'; +import { StateMachinePlayground } from '../../observability_logs/xstate_helpers'; import { NotFoundPage } from '../404'; export const LogsPageContent: React.FunctionComponent = () => { + const enableDeveloperRoutes = isDevMode(); const uiCapabilities = useKibana().services.application?.capabilities; const { setHeaderActionMenu, theme$ } = useContext(HeaderActionMenuContext); @@ -71,7 +74,7 @@ export const LogsPageContent: React.FunctionComponent = () => { {settingsTabTitle} - + { + {enableDeveloperRoutes && ( + + )} diff --git a/x-pack/plugins/infra/public/pages/logs/page_providers.tsx b/x-pack/plugins/infra/public/pages/logs/page_providers.tsx index 92db5f003932c..c6548cfbd40aa 100644 --- a/x-pack/plugins/infra/public/pages/logs/page_providers.tsx +++ b/x-pack/plugins/infra/public/pages/logs/page_providers.tsx @@ -7,16 +7,14 @@ import React from 'react'; import { LogAnalysisCapabilitiesProvider } from '../../containers/logs/log_analysis'; -import { useSourceId } from '../../containers/source_id'; import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; import { LogViewProvider } from '../../hooks/use_log_view'; export const LogsPageProviders: React.FunctionComponent = ({ children }) => { - const [sourceId] = useSourceId(); const { services } = useKibanaContextForPlugin(); return ( - + {children} ); diff --git a/x-pack/plugins/infra/public/pages/logs/settings/inline_log_view_callout.tsx b/x-pack/plugins/infra/public/pages/logs/settings/inline_log_view_callout.tsx new file mode 100644 index 0000000000000..ed332f97ea471 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/logs/settings/inline_log_view_callout.tsx @@ -0,0 +1,47 @@ +/* + * 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 { EuiButton } from '@elastic/eui'; +import { EuiCallOut } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export const InlineLogViewCallout = ({ + revertToDefaultLogView, +}: { + revertToDefaultLogView: () => void; +}) => { + return ( + + <> +

+ {i18n.translate('xpack.infra.logs.settings.inlineLogViewCalloutDescription', { + defaultMessage: + 'An inline Log View is currently being used, changes will be synchronized to the URL, but they will not be persisted.', + })} +

+ + + + +
+ ); +}; diff --git a/x-pack/plugins/infra/public/pages/logs/settings/source_configuration_settings.tsx b/x-pack/plugins/infra/public/pages/logs/settings/source_configuration_settings.tsx index f826be82ac674..6ee20c00b9e64 100644 --- a/x-pack/plugins/infra/public/pages/logs/settings/source_configuration_settings.tsx +++ b/x-pack/plugins/infra/public/pages/logs/settings/source_configuration_settings.tsx @@ -28,6 +28,7 @@ import { LogColumnsConfigurationPanel } from './log_columns_configuration_panel' import { NameConfigurationPanel } from './name_configuration_panel'; import { LogSourceConfigurationFormErrors } from './source_configuration_form_errors'; import { useLogSourceConfigurationFormState } from './source_configuration_form_state'; +import { InlineLogViewCallout } from './inline_log_view_callout'; export const LogsSettingsPage = () => { const uiCapabilities = useKibana().services.application?.capabilities; @@ -46,8 +47,16 @@ export const LogsSettingsPage = () => { }, ]); - const { logView, hasFailedLoadingLogView, isLoading, isUninitialized, update, resolvedLogView } = - useLogViewContext(); + const { + logView, + hasFailedLoadingLogView, + isLoading, + isUninitialized, + update, + resolvedLogView, + isInlineLogView, + revertToDefaultLogView, + } = useLogViewContext(); const availableFields = useMemo( () => resolvedLogView?.fields.map((field) => field.name) ?? [], @@ -141,6 +150,14 @@ export const LogsSettingsPage = () => {
) : ( <> + {isInlineLogView && ( + + + + + + + )} ) : null} - + { const { startTimestamp, endTimestamp } = useLogPositionStateContext(); - const { logViewId } = useLogViewContext(); + const { logViewReference } = useLogViewContext(); if (!startTimestamp || !endTimestamp) { return null; @@ -35,7 +35,7 @@ const ViewLogInContext: React.FC = ({ children }) => { {children} @@ -45,7 +45,7 @@ const ViewLogInContext: React.FC = ({ children }) => { const LogEntriesStateProvider: React.FC<{ logStreamPageState: InitializedLogStreamPageState; }> = ({ children, logStreamPageState }) => { - const { logViewId } = useLogViewContext(); + const { logViewReference } = useLogViewContext(); const { startTimestamp, endTimestamp, targetPosition } = useLogPositionStateContext(); const { context: { parsedQuery }, @@ -58,7 +58,7 @@ const LogEntriesStateProvider: React.FC<{ return ( = ({ children, logStreamPageState }) => { - const { logViewId, logView } = useLogViewContext(); + const { logViewReference, logView } = useLogViewContext(); const { topCursor, bottomCursor, entries } = useLogStreamContext(); const serializedParsedQuery = useMemo( () => stringify(logStreamPageState.context.parsedQuery), @@ -80,7 +80,7 @@ const LogHighlightsState: React.FC<{ ); const highlightsProps = { - sourceId: logViewId, + logViewReference, sourceVersion: logView?.version, entriesStart: topCursor, entriesEnd: bottomCursor, diff --git a/x-pack/plugins/infra/public/pages/logs/stream/page_view_log_in_context.tsx b/x-pack/plugins/infra/public/pages/logs/stream/page_view_log_in_context.tsx index 9b4a2ffb4185b..15dbbcca7ce9f 100644 --- a/x-pack/plugins/infra/public/pages/logs/stream/page_view_log_in_context.tsx +++ b/x-pack/plugins/infra/public/pages/logs/stream/page_view_log_in_context.tsx @@ -25,7 +25,7 @@ import { LogStream } from '../../../components/log_stream'; const MODAL_MARGIN = 25; export const PageViewLogInContext: React.FC = () => { - const [{ contextEntry, startTimestamp, endTimestamp, sourceId }, { setContextEntry }] = + const [{ contextEntry, startTimestamp, endTimestamp, logViewReference }, { setContextEntry }] = useViewLogInProviderContext(); const closeModal = useCallback(() => setContextEntry(undefined), [setContextEntry]); const { width: vw, height: vh } = useViewportDimensions(); @@ -56,7 +56,7 @@ export const PageViewLogInContext: React.FC = () => { { const { searchCriteria } = useUnifiedSearchContext(); - const { application, cases, triggersActionsUi } = services; + const { triggersActionsUi } = services; const { alertsTableConfigurationRegistry, getAlertsStateTable: AlertsStateTable } = triggersActionsUi; - const CasesContext = cases.ui.getCasesContext(); - const uiCapabilities = application?.capabilities; - const casesCapabilities = cases.helpers.getUICapabilities(uiCapabilities.observabilityCases); - return ( @@ -63,23 +57,17 @@ export const AlertsTabContent = () => { {alertsEsQueryByStatus && ( - - - + )} diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/config.ts b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/config.ts index 2c8af4fa4c76b..28ba329e6a264 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/config.ts +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/tabs/config.ts @@ -13,8 +13,6 @@ export const ALERTS_TABLE_ID = 'xpack.infra.hosts.alerts.table'; export const INFRA_ALERT_FEATURE_ID = 'infrastructure'; export const infraAlertFeatureIds: ValidFeatureId[] = [AlertConsumers.INFRASTRUCTURE]; -export const casesFeatures = { alerts: { sync: false } }; -export const casesOwner = [INFRA_ALERT_FEATURE_ID]; export const DEFAULT_INTERVAL = '60s'; export const DEFAULT_DATE_FORMAT = 'YYYY-MM-DD HH:mm'; diff --git a/x-pack/plugins/infra/public/services/log_views/log_views_client.ts b/x-pack/plugins/infra/public/services/log_views/log_views_client.ts index 65bb031d3407b..fc3d59e8f10a3 100644 --- a/x-pack/plugins/infra/public/services/log_views/log_views_client.ts +++ b/x-pack/plugins/infra/public/services/log_views/log_views_client.ts @@ -20,6 +20,8 @@ import { FetchLogViewStatusError, LogView, LogViewAttributes, + logViewAttributesRT, + LogViewReference, LogViewsStaticConfig, LogViewStatus, PutLogViewError, @@ -37,7 +39,15 @@ export class LogViewsClient implements ILogViewsClient { private readonly config: LogViewsStaticConfig ) {} - public async getLogView(logViewId: string): Promise { + public async getLogView(logViewReference: LogViewReference): Promise { + if (logViewReference.type === 'log-view-inline') { + return { + ...logViewReference, + origin: 'inline', + }; + } + + const { logViewId } = logViewReference; const response = await this.http.get(getLogViewUrl(logViewId)).catch((error) => { throw new FetchLogViewError(`Failed to fetch log view "${logViewId}": ${error}`); }); @@ -51,8 +61,8 @@ export class LogViewsClient implements ILogViewsClient { return data; } - public async getResolvedLogView(logViewId: string): Promise { - const logView = await this.getLogView(logViewId); + public async getResolvedLogView(logViewReference: LogViewReference): Promise { + const logView = await this.getLogView(logViewReference); const resolvedLogView = await this.resolveLogView(logView.id, logView.attributes); return resolvedLogView; } @@ -98,24 +108,44 @@ export class LogViewsClient implements ILogViewsClient { } public async putLogView( - logViewId: string, + logViewReference: LogViewReference, logViewAttributes: Partial ): Promise { - const response = await this.http - .put(getLogViewUrl(logViewId), { - body: JSON.stringify(putLogViewRequestPayloadRT.encode({ attributes: logViewAttributes })), - }) - .catch((error) => { - throw new PutLogViewError(`Failed to write log view "${logViewId}": ${error}`); - }); + if (logViewReference.type === 'log-view-inline') { + const { id } = logViewReference; + const attributes = decodeOrThrow( + rt.partial(logViewAttributesRT.type.props), + (message: string) => + new PutLogViewError(`Failed to decode inline log view "${id}": ${message}"`) + )(logViewAttributes); + return { + id, + attributes: { + ...logViewReference.attributes, + ...attributes, + }, + origin: 'inline', + }; + } else { + const { logViewId } = logViewReference; + const response = await this.http + .put(getLogViewUrl(logViewId), { + body: JSON.stringify( + putLogViewRequestPayloadRT.encode({ attributes: logViewAttributes }) + ), + }) + .catch((error) => { + throw new PutLogViewError(`Failed to write log view "${logViewId}": ${error}`); + }); - const { data } = decodeOrThrow( - getLogViewResponsePayloadRT, - (message: string) => - new PutLogViewError(`Failed to decode written log view "${logViewId}": ${message}"`) - )(response); + const { data } = decodeOrThrow( + getLogViewResponsePayloadRT, + (message: string) => + new PutLogViewError(`Failed to decode written log view "${logViewId}": ${message}"`) + )(response); - return data; + return data; + } } public async resolveLogView( diff --git a/x-pack/plugins/infra/public/services/log_views/types.ts b/x-pack/plugins/infra/public/services/log_views/types.ts index 9054ef79b4a4c..6fd7a4d208b3c 100644 --- a/x-pack/plugins/infra/public/services/log_views/types.ts +++ b/x-pack/plugins/infra/public/services/log_views/types.ts @@ -11,6 +11,7 @@ import { DataViewsContract } from '@kbn/data-views-plugin/public'; import { LogView, LogViewAttributes, + LogViewReference, LogViewStatus, ResolvedLogView, } from '../../../common/log_views'; @@ -28,9 +29,12 @@ export interface LogViewsServiceStartDeps { } export interface ILogViewsClient { - getLogView(logViewId: string): Promise; + getLogView(logViewReference: LogViewReference): Promise; getResolvedLogViewStatus(resolvedLogView: ResolvedLogView): Promise; - getResolvedLogView(logViewId: string): Promise; - putLogView(logViewId: string, logViewAttributes: Partial): Promise; + getResolvedLogView(logViewReference: LogViewReference): Promise; + putLogView( + logViewReference: LogViewReference, + logViewAttributes: Partial + ): Promise; resolveLogView(logViewId: string, logViewAttributes: LogViewAttributes): Promise; } diff --git a/x-pack/plugins/infra/public/utils/logs_overview_fetchers.ts b/x-pack/plugins/infra/public/utils/logs_overview_fetchers.ts index 825a070ed15dc..511ef829553b3 100644 --- a/x-pack/plugins/infra/public/utils/logs_overview_fetchers.ts +++ b/x-pack/plugins/infra/public/utils/logs_overview_fetchers.ts @@ -12,8 +12,9 @@ import { FetchDataParams, LogsFetchDataResponse, } from '@kbn/observability-plugin/public'; -import { DEFAULT_SOURCE_ID, TIMESTAMP_FIELD } from '../../common/constants'; +import { TIMESTAMP_FIELD } from '../../common/constants'; import { InfraClientStartDeps, InfraClientStartServicesAccessor } from '../types'; +import { DEFAULT_LOG_VIEW } from '../observability_logs/log_view_state/src/defaults'; interface StatsAggregation { buckets: Array<{ @@ -38,7 +39,7 @@ type StatsAndSeries = Pick; export function getLogsHasDataFetcher(getStartServices: InfraClientStartServicesAccessor) { return async () => { const [, , { logViews }] = await getStartServices(); - const resolvedLogView = await logViews.client.getResolvedLogView(DEFAULT_SOURCE_ID); + const resolvedLogView = await logViews.client.getResolvedLogView(DEFAULT_LOG_VIEW); const logViewStatus = await logViews.client.getResolvedLogViewStatus(resolvedLogView); const hasData = logViewStatus.index === 'available'; @@ -56,7 +57,7 @@ export function getLogsOverviewDataFetcher( ): FetchData { return async (params) => { const [, { data }, { logViews }] = await getStartServices(); - const resolvedLogView = await logViews.client.getResolvedLogView(DEFAULT_SOURCE_ID); + const resolvedLogView = await logViews.client.getResolvedLogView(DEFAULT_LOG_VIEW); const { stats, series } = await fetchLogsOverview( { diff --git a/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts index 63b0c81108a47..de3ef3cf68d0c 100644 --- a/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.test.ts @@ -75,6 +75,7 @@ const mockOptions = { throttle: null, notifyWhen: null, producer: '', + revision: 0, ruleTypeId: '', ruleTypeName: '', muteAll: false, diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index f363b5baeabf1..a24a02b2df5e8 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -113,6 +113,7 @@ const mockOptions = { throttle: null, notifyWhen: null, producer: '', + revision: 0, ruleTypeId: '', ruleTypeName: '', muteAll: false, diff --git a/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.ts b/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.ts index dd809258ef0c0..9bdbfdb9b3b2e 100644 --- a/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.ts +++ b/x-pack/plugins/maps/common/descriptor_types/data_request_descriptor_types.ts @@ -37,21 +37,21 @@ export type DataFilters = { executionContext: KibanaExecutionContext; }; -export type VectorSourceRequestMeta = DataFilters & { +export type SourceRequestMeta = DataFilters & { applyGlobalQuery: boolean; applyGlobalTime: boolean; applyForceRefresh: boolean; + sourceQuery?: Query; + isForceRefresh: boolean; +}; + +export type VectorSourceRequestMeta = SourceRequestMeta & { fieldNames: string[]; - geogridPrecision?: number; timesliceMaskField?: string; - sourceQuery?: Query; sourceMeta: object | null; - isForceRefresh: boolean; isFeatureEditorOpenForLayer: boolean; }; -export type VectorJoinSourceRequestMeta = Omit; - export type VectorStyleRequestMeta = DataFilters & { dynamicStyleFields: string[]; isTimeAware: boolean; @@ -89,8 +89,8 @@ export type DataRequestMeta = { // request stop time in milliseconds since epoch requestStopTime?: number; } & Partial< - VectorSourceRequestMeta & - VectorJoinSourceRequestMeta & + SourceRequestMeta & + VectorSourceRequestMeta & VectorStyleRequestMeta & ESSearchSourceResponseMeta & ESGeoLineSourceResponseMeta & diff --git a/x-pack/plugins/maps/public/classes/layers/build_vector_request_meta.ts b/x-pack/plugins/maps/public/classes/layers/build_vector_request_meta.ts index e8d74003c6790..e0df7ab8d6dd5 100644 --- a/x-pack/plugins/maps/public/classes/layers/build_vector_request_meta.ts +++ b/x-pack/plugins/maps/public/classes/layers/build_vector_request_meta.ts @@ -22,11 +22,10 @@ export function buildVectorRequestMeta( return { ...dataFilters, fieldNames: _.uniq(fieldNames).sort(), - geogridPrecision: source.getGeoGridPrecision(dataFilters.zoom), sourceQuery: sourceQuery ? sourceQuery : undefined, applyGlobalQuery: source.getApplyGlobalQuery(), applyGlobalTime: source.getApplyGlobalTime(), - sourceMeta: source.getSyncMeta(), + sourceMeta: source.getSyncMeta(dataFilters), applyForceRefresh: source.isESSource() ? source.getApplyForceRefresh() : false, isForceRefresh, isFeatureEditorOpenForLayer, diff --git a/x-pack/plugins/maps/public/classes/layers/raster_tile_layer/raster_tile_layer.ts b/x-pack/plugins/maps/public/classes/layers/raster_tile_layer/raster_tile_layer.ts index bd1b266d34881..cb12d047cbccb 100644 --- a/x-pack/plugins/maps/public/classes/layers/raster_tile_layer/raster_tile_layer.ts +++ b/x-pack/plugins/maps/public/classes/layers/raster_tile_layer/raster_tile_layer.ts @@ -65,11 +65,21 @@ export class RasterTileLayer extends AbstractLayer { return this._style; } - async syncData({ startLoading, stopLoading, onLoadError, dataFilters }: DataRequestContext) { + async syncData({ + startLoading, + stopLoading, + onLoadError, + dataFilters, + isForceRefresh, + }: DataRequestContext) { const source = this.getSource(); const nextMeta = { ...dataFilters, + applyGlobalQuery: source.getApplyGlobalQuery(), applyGlobalTime: source.getApplyGlobalTime(), + applyForceRefresh: source.isESSource() ? source.getApplyForceRefresh() : false, + sourceQuery: this.getQuery() || undefined, + isForceRefresh, }; const prevDataRequest = this.getSourceDataRequest(); if (prevDataRequest) { @@ -80,7 +90,7 @@ export class RasterTileLayer extends AbstractLayer { try { startLoading(SOURCE_DATA_REQUEST_ID, requestToken, nextMeta); const data: RasterTileSourceData = { - url: await source.getUrlTemplate(dataFilters), + url: await source.getUrlTemplate(nextMeta), }; stopLoading(SOURCE_DATA_REQUEST_ID, requestToken, data, {}); } catch (error) { diff --git a/x-pack/plugins/maps/public/classes/layers/vector_layer/bounds_data.ts b/x-pack/plugins/maps/public/classes/layers/vector_layer/bounds_data.ts index b46353fcef933..de8d20669c8be 100644 --- a/x-pack/plugins/maps/public/classes/layers/vector_layer/bounds_data.ts +++ b/x-pack/plugins/maps/public/classes/layers/vector_layer/bounds_data.ts @@ -32,7 +32,7 @@ export async function syncBoundsData({ const requestToken = Symbol(`${SOURCE_BOUNDS_DATA_REQUEST_ID}-${layerId}`); - // Do not pass all searchFilters to source.getBoundsForFilters(). + // Do not pass all requestMeta to source.getBoundsForFilters(). // For example, do not want to filter bounds request by extent and buffer. const boundsFilters = { sourceQuery: sourceQuery ? sourceQuery : undefined, diff --git a/x-pack/plugins/maps/public/classes/layers/vector_layer/vector_layer.tsx b/x-pack/plugins/maps/public/classes/layers/vector_layer/vector_layer.tsx index bff6a297fcd74..f8931b4a5755d 100644 --- a/x-pack/plugins/maps/public/classes/layers/vector_layer/vector_layer.tsx +++ b/x-pack/plugins/maps/public/classes/layers/vector_layer/vector_layer.tsx @@ -45,7 +45,6 @@ import { ESTermSourceDescriptor, JoinDescriptor, StyleMetaDescriptor, - VectorJoinSourceRequestMeta, VectorLayerDescriptor, VectorSourceRequestMeta, VectorStyleRequestMeta, @@ -566,14 +565,14 @@ export class AbstractVectorLayer extends AbstractLayer implements IVectorLayer { const sourceDataId = join.getSourceDataRequestId(); const requestToken = Symbol(`layer-join-refresh:${this.getId()} - ${sourceDataId}`); - const joinRequestMeta: VectorJoinSourceRequestMeta = buildVectorRequestMeta( + const joinRequestMeta = buildVectorRequestMeta( joinSource, joinSource.getFieldNames(), dataFilters, joinSource.getWhereQuery(), isForceRefresh, isFeatureEditorOpenForLayer - ) as VectorJoinSourceRequestMeta; + ); const prevDataRequest = this.getDataRequest(sourceDataId); const canSkipFetch = await canSkipSourceUpdate({ diff --git a/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts b/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts index 42b9c0ed73c77..fa7f329beb97a 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { GeoJsonProperties } from 'geojson'; import { DataView } from '@kbn/data-plugin/common'; -import { IESSource } from '../es_source'; +import type { IESAggSource } from './types'; import { AbstractESSource } from '../es_source'; import { esAggFieldsFactory, IESAggField } from '../../fields/agg'; import { AGG_TYPE, COUNT_PROP_LABEL, FIELD_ORIGIN } from '../../../../common/constants'; @@ -19,14 +19,6 @@ import { ITooltipProperty } from '../../tooltips/tooltip_property'; export const DEFAULT_METRIC = { type: AGG_TYPE.COUNT }; -export interface IESAggSource extends IESSource { - getAggKey(aggType: AGG_TYPE, fieldName: string): string; - getAggLabel(aggType: AGG_TYPE, fieldLabel: string): Promise; - getMetricFields(): IESAggField[]; - getMetricFieldForName(fieldName: string): IESAggField | null; - getValueAggsDsl(indexPattern: DataView): { [key: string]: unknown }; -} - export abstract class AbstractESAggSource extends AbstractESSource implements IESAggSource { private readonly _metricFields: IESAggField[]; @@ -139,4 +131,12 @@ export abstract class AbstractESAggSource extends AbstractESSource implements IE return await Promise.all(promises); } + + isGeoGridPrecisionAware(): boolean { + return false; + } + + getGeoGridPrecision(zoom: number): number { + return 0; + } } diff --git a/x-pack/plugins/maps/public/classes/sources/es_agg_source/index.ts b/x-pack/plugins/maps/public/classes/sources/es_agg_source/index.ts index 52ae53597acb1..033d937aa9391 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_agg_source/index.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_agg_source/index.ts @@ -5,4 +5,5 @@ * 2.0. */ -export * from './es_agg_source'; +export type { IESAggSource } from './types'; +export { AbstractESAggSource, DEFAULT_METRIC } from './es_agg_source'; diff --git a/x-pack/plugins/maps/public/classes/sources/es_agg_source/types.ts b/x-pack/plugins/maps/public/classes/sources/es_agg_source/types.ts new file mode 100644 index 0000000000000..d9cb6fcd95a10 --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/es_agg_source/types.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DataView } from '@kbn/data-plugin/common'; +import { AGG_TYPE } from '../../../../common/constants'; +import type { IESSource } from '../es_source'; +import { IESAggField } from '../../fields/agg'; + +export interface IESAggSource extends IESSource { + getAggKey(aggType: AGG_TYPE, fieldName: string): string; + getAggLabel(aggType: AGG_TYPE, fieldLabel: string): Promise; + getMetricFields(): IESAggField[]; + getMetricFieldForName(fieldName: string): IESAggField | null; + getValueAggsDsl(indexPattern: DataView): { [key: string]: unknown }; + isGeoGridPrecisionAware(): boolean; + getGeoGridPrecision(zoom: number): number; +} diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.test.ts b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.test.ts index 65325fed5d957..6709ef3ab5144 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.test.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.test.ts @@ -157,7 +157,6 @@ describe('ESGeoGridSource', () => { const vectorSourceRequestMeta: VectorSourceRequestMeta = { isReadOnly: false, - geogridPrecision: 4, filters: [], timeFilters: { from: 'now', @@ -175,7 +174,7 @@ describe('ESGeoGridSource', () => { language: 'KQL', }, sourceMeta: null, - zoom: 0, + zoom: 2, // returns 4 precision isForceRefresh: false, isFeatureEditorOpenForLayer: false, executionContext: { name: APP_ID }, @@ -290,7 +289,7 @@ describe('ESGeoGridSource', () => { type: SOURCE_TYPES.ES_GEO_GRID, requestType: RENDER_AS.HEATMAP, }); - expect(superFineSource.getGeoGridPrecision(10)).toBe(NaN); + expect(superFineSource.getGeoGridPrecision(10)).toBe(0); }); }); diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.tsx b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.tsx index c19e715326bc3..c1ad49619aa70 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.tsx @@ -43,6 +43,7 @@ import { LICENSED_FEATURES } from '../../../licensed_features'; import { getHttp } from '../../../kibana_services'; import { GetFeatureActionsArgs, GeoJsonWithMeta, IMvtVectorSource } from '../vector_source'; import { + DataFilters, ESGeoGridSourceDescriptor, MapExtent, SizeDynamicOptions, @@ -56,7 +57,11 @@ import { isMvt } from './is_mvt'; import { VectorStyle } from '../../styles/vector/vector_style'; import { getIconSize } from './get_icon_size'; -type ESGeoGridSourceSyncMeta = Pick; +interface ESGeoGridSourceSyncMeta { + geogridPrecision: number; + requestType: RENDER_AS; + resolution: GRID_RESOLUTION; +} const MAX_GEOTILE_LEVEL = 29; @@ -135,8 +140,9 @@ export class ESGeoGridSource extends AbstractESAggSource implements IMvtVectorSo ); } - getSyncMeta(): ESGeoGridSourceSyncMeta { + getSyncMeta(dataFilters: DataFilters): ESGeoGridSourceSyncMeta { return { + geogridPrecision: this.getGeoGridPrecision(dataFilters.zoom), requestType: this._descriptor.requestType, resolution: this._descriptor.resolution, }; @@ -189,9 +195,9 @@ export class ESGeoGridSource extends AbstractESAggSource implements IMvtVectorSo } getGeoGridPrecision(zoom: number): number { - if (this._descriptor.resolution === GRID_RESOLUTION.SUPER_FINE) { + if (this.isMvt()) { // The target-precision needs to be determined server side. - return NaN; + return 0; } const targetGeotileLevel = Math.ceil(zoom) + this._getGeoGridPrecisionResolutionDelta(); @@ -441,17 +447,17 @@ export class ESGeoGridSource extends AbstractESAggSource implements IMvtVectorSo async getGeoJsonWithMeta( layerName: string, - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void, isRequestStillActive: () => boolean, inspectorAdapters: Adapters ): Promise { - if (!searchFilters.buffer) { + if (!requestMeta.buffer) { throw new Error('Cannot get GeoJson without searchFilter.buffer'); } const indexPattern: DataView = await this.getIndexPattern(); - const searchSource: ISearchSource = await this.makeSearchSource(searchFilters, 0); + const searchSource: ISearchSource = await this.makeSearchSource(requestMeta, 0); searchSource.setField('trackTotalHits', false); let bucketsPerGrid = 1; @@ -469,32 +475,33 @@ export class ESGeoGridSource extends AbstractESAggSource implements IMvtVectorSo // https://github.com/elastic/elasticsearch/issues/60626 const supportsCompositeAgg = !(await this._isGeoShape()); + const precision = this.getGeoGridPrecision(requestMeta.zoom); const features: Feature[] = supportsCompositeAgg && tooManyBuckets ? await this._compositeAggRequest({ searchSource, - searchSessionId: searchFilters.searchSessionId, + searchSessionId: requestMeta.searchSessionId, indexPattern, - precision: searchFilters.geogridPrecision || 0, + precision, layerName, registerCancelCallback, bucketsPerGrid, isRequestStillActive, - bufferedExtent: searchFilters.buffer, + bufferedExtent: requestMeta.buffer, inspectorAdapters, - executionContext: searchFilters.executionContext, + executionContext: requestMeta.executionContext, }) : await this._nonCompositeAggRequest({ searchSource, - searchSessionId: searchFilters.searchSessionId, + searchSessionId: requestMeta.searchSessionId, indexPattern, - precision: searchFilters.geogridPrecision || 0, + precision, layerName, registerCancelCallback, - bufferedExtent: searchFilters.buffer, + bufferedExtent: requestMeta.buffer, tooManyBuckets, inspectorAdapters, - executionContext: searchFilters.executionContext, + executionContext: requestMeta.executionContext, }); return { @@ -513,13 +520,13 @@ export class ESGeoGridSource extends AbstractESAggSource implements IMvtVectorSo } async getTileUrl( - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, refreshToken: string, hasLabels: boolean, buffer: number ): Promise { const dataView = await this.getIndexPattern(); - const searchSource = await this.makeSearchSource(searchFilters, 0); + const searchSource = await this.makeSearchSource(requestMeta, 0); searchSource.setField('aggs', this.getValueAggsDsl(dataView)); const mvtUrlServicePath = getHttp().basePath.prepend( @@ -535,7 +542,7 @@ export class ESGeoGridSource extends AbstractESAggSource implements IMvtVectorSo params.set('requestBody', encodeMvtResponseBody(searchSource.getSearchRequestBody())); params.set('renderAs', this._descriptor.requestType); params.set('token', refreshToken); - const executionContextId = getExecutionContextId(searchFilters.executionContext); + const executionContextId = getExecutionContextId(requestMeta.executionContext); if (executionContextId) { params.set('executionContextId', executionContextId); } diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_line_source/es_geo_line_source.tsx b/x-pack/plugins/maps/public/classes/sources/es_geo_line_source/es_geo_line_source.tsx index 33b2b2e38317b..3711252094160 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_geo_line_source/es_geo_line_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_line_source/es_geo_line_source.tsx @@ -163,7 +163,7 @@ export class ESGeoLineSource extends AbstractESAggSource { async getGeoJsonWithMeta( layerName: string, - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void, isRequestStillActive: () => boolean, inspectorAdapters: Adapters @@ -182,7 +182,7 @@ export class ESGeoLineSource extends AbstractESAggSource { // // Fetch entities // - const entitySearchSource = await this.makeSearchSource(searchFilters, 0); + const entitySearchSource = await this.makeSearchSource(requestMeta, 0); entitySearchSource.setField('trackTotalHits', false); const splitField = getField(indexPattern, this._descriptor.splitField); const cardinalityAgg = { precision_threshold: 1 }; @@ -217,10 +217,10 @@ export class ESGeoLineSource extends AbstractESAggSource { requestDescription: i18n.translate('xpack.maps.source.esGeoLine.entityRequestDescription', { defaultMessage: 'Elasticsearch terms request to fetch entities within map buffer.', }), - searchSessionId: searchFilters.searchSessionId, + searchSessionId: requestMeta.searchSessionId, executionContext: mergeExecutionContext( { description: 'es_geo_line:entities' }, - searchFilters.executionContext + requestMeta.executionContext ), requestsAdapter: inspectorAdapters.requests, }); @@ -255,7 +255,7 @@ export class ESGeoLineSource extends AbstractESAggSource { indexPattern ).query; } - const tracksSearchFilters = { ...searchFilters }; + const tracksSearchFilters = { ...requestMeta }; delete tracksSearchFilters.buffer; const tracksSearchSource = await this.makeSearchSource(tracksSearchFilters, 0); tracksSearchSource.setField('trackTotalHits', false); @@ -293,10 +293,10 @@ export class ESGeoLineSource extends AbstractESAggSource { defaultMessage: 'Elasticsearch geo_line request to fetch tracks for entities. Tracks are not filtered by map buffer.', }), - searchSessionId: searchFilters.searchSessionId, + searchSessionId: requestMeta.searchSessionId, executionContext: mergeExecutionContext( { description: 'es_geo_line:tracks' }, - searchFilters.executionContext + requestMeta.executionContext ), requestsAdapter: inspectorAdapters.requests, }); diff --git a/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/es_pew_pew_source.tsx b/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/es_pew_pew_source.tsx index ae00e00e58ae6..0b3bd3f77625f 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/es_pew_pew_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/es_pew_pew_source.tsx @@ -29,6 +29,7 @@ import { DataRequestAbortError } from '../../util/data_request'; import { mergeExecutionContext } from '../execution_context_utils'; import { SourceEditorArgs } from '../source'; import { + DataFilters, ESPewPewSourceDescriptor, MapExtent, VectorSourceRequestMeta, @@ -85,6 +86,12 @@ export class ESPewPewSource extends AbstractESAggSource { return false; } + getSyncMeta(dataFilters: DataFilters) { + return { + geogridPrecision: this.getGeoGridPrecision(dataFilters.zoom), + }; + } + isGeoGridPrecisionAware() { return true; } @@ -125,13 +132,13 @@ export class ESPewPewSource extends AbstractESAggSource { async getGeoJsonWithMeta( layerName: string, - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void, isRequestStillActive: () => boolean, inspectorAdapters: Adapters ): Promise { const indexPattern = await this.getIndexPattern(); - const searchSource = await this.makeSearchSource(searchFilters, 0); + const searchSource = await this.makeSearchSource(requestMeta, 0); searchSource.setField('trackTotalHits', false); searchSource.setField('aggs', { destSplit: { @@ -149,7 +156,7 @@ export class ESPewPewSource extends AbstractESAggSource { sourceGrid: { geotile_grid: { field: this._descriptor.sourceGeoField, - precision: searchFilters.geogridPrecision, + precision: this.getGeoGridPrecision(requestMeta.zoom), size: 500, }, aggs: { @@ -183,10 +190,10 @@ export class ESPewPewSource extends AbstractESAggSource { requestDescription: i18n.translate('xpack.maps.source.pewPew.inspectorDescription', { defaultMessage: 'Source-destination connections request', }), - searchSessionId: searchFilters.searchSessionId, + searchSessionId: requestMeta.searchSessionId, executionContext: mergeExecutionContext( { description: 'es_pew_pew_source:connections' }, - searchFilters.executionContext + requestMeta.executionContext ), requestsAdapter: inspectorAdapters.requests, }); diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.test.ts b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.test.ts index 5157848cc5765..15bcee33e0463 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.test.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.test.ts @@ -88,7 +88,7 @@ describe('ESSearchSource', () => { }); }); - const searchFilters: VectorSourceRequestMeta = { + const requestMeta: VectorSourceRequestMeta = { isReadOnly: false, filters: [], zoom: 0, @@ -116,7 +116,7 @@ describe('ESSearchSource', () => { geoField: geoFieldName, indexPatternId: 'ipId', }); - const tileUrl = await esSearchSource.getTileUrl(searchFilters, '1234', false, 5); + const tileUrl = await esSearchSource.getTileUrl(requestMeta, '1234', false, 5); const urlParts = tileUrl.split('?'); expect(urlParts[0]).toEqual('rootdir/api/maps/mvt/getTile/{z}/{x}/{y}.pbf'); @@ -140,7 +140,7 @@ describe('ESSearchSource', () => { }); const tileUrl = await esSearchSource.getTileUrl( { - ...searchFilters, + ...requestMeta, executionContext: { name: APP_ID, id: 'map1234' }, }, '1234', diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx index 3b8ab273fbbc6..6a422df54782f 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.tsx @@ -271,7 +271,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource async _getTopHits( layerName: string, - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void, inspectorAdapters: Adapters ) { @@ -283,7 +283,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource const indexPattern: DataView = await this.getIndexPattern(); - const fieldNames = searchFilters.fieldNames.filter( + const fieldNames = requestMeta.fieldNames.filter( (fieldName) => fieldName !== this._descriptor.geoField ); const { docValueFields, sourceOnlyFields, scriptFields } = getDocValueAndSourceFields( @@ -324,7 +324,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource shard_size: DEFAULT_MAX_BUCKETS_LIMIT, }; - const searchSource = await this.makeSearchSource(searchFilters, 0); + const searchSource = await this.makeSearchSource(requestMeta, 0); searchSource.setField('trackTotalHits', false); searchSource.setField('aggs', { totalEntities: { @@ -354,10 +354,10 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource searchSource, registerCancelCallback, requestDescription: 'Elasticsearch document top hits request', - searchSessionId: searchFilters.searchSessionId, + searchSessionId: requestMeta.searchSessionId, executionContext: mergeExecutionContext( { description: 'es_search_source:top_hits' }, - searchFilters.executionContext + requestMeta.executionContext ), requestsAdapter: inspectorAdapters.requests, }); @@ -388,17 +388,17 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource }; } - // searchFilters.fieldNames contains geo field and any fields needed for styling features + // requestMeta.fieldNames contains geo field and any fields needed for styling features // Performs Elasticsearch search request being careful to pull back only required fields to minimize response size async _getSearchHits( layerName: string, - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void, inspectorAdapters: Adapters ) { const indexPattern = await this.getIndexPattern(); - const fieldNames = searchFilters.fieldNames.filter( + const fieldNames = requestMeta.fieldNames.filter( (fieldName) => fieldName !== this._descriptor.geoField ); const { docValueFields, sourceOnlyFields } = getDocValueAndSourceFields( @@ -411,20 +411,20 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource // Use Kibana global time extent instead of timeslice extent when all documents for global time extent can be loaded // to allow for client-side masking of timeslice - const searchFiltersWithoutTimeslice = { ...searchFilters }; - delete searchFiltersWithoutTimeslice.timeslice; - const useSearchFiltersWithoutTimeslice = - searchFilters.timeslice !== undefined && - (await this.canLoadAllDocuments(searchFiltersWithoutTimeslice, registerCancelCallback)); + const requestMetaWithoutTimeslice = { ...requestMeta }; + delete requestMetaWithoutTimeslice.timeslice; + const useRequestMetaWithoutTimeslice = + requestMeta.timeslice !== undefined && + (await this.canLoadAllDocuments(requestMetaWithoutTimeslice, registerCancelCallback)); const maxResultWindow = await this.getMaxResultWindow(); const searchSource = await this.makeSearchSource( - useSearchFiltersWithoutTimeslice ? searchFiltersWithoutTimeslice : searchFilters, + useRequestMetaWithoutTimeslice ? requestMetaWithoutTimeslice : requestMeta, maxResultWindow, initialSearchContext ); searchSource.setField('trackTotalHits', maxResultWindow + 1); - searchSource.setField('fieldsFromSource', searchFilters.fieldNames); // Setting "fields" filters out unused scripted fields + searchSource.setField('fieldsFromSource', requestMeta.fieldNames); // Setting "fields" filters out unused scripted fields if (sourceOnlyFields.length === 0) { searchSource.setField('source', false); // do not need anything from _source } else { @@ -441,24 +441,24 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource searchSource, registerCancelCallback, requestDescription: 'Elasticsearch document request', - searchSessionId: searchFilters.searchSessionId, + searchSessionId: requestMeta.searchSessionId, executionContext: mergeExecutionContext( { description: 'es_search_source:doc_search' }, - searchFilters.executionContext + requestMeta.executionContext ), requestsAdapter: inspectorAdapters.requests, }); const isTimeExtentForTimeslice = - searchFilters.timeslice !== undefined && !useSearchFiltersWithoutTimeslice; + requestMeta.timeslice !== undefined && !useRequestMetaWithoutTimeslice; return { hits: resp.hits.hits.reverse(), // Reverse hits so top documents by sort are drawn on top meta: { resultsCount: resp.hits.hits.length, areResultsTrimmed: isTotalHitsGreaterThan(resp.hits.total, resp.hits.hits.length), timeExtent: isTimeExtentForTimeslice - ? searchFilters.timeslice - : timerangeToTimeextent(searchFilters.timeFilters), + ? requestMeta.timeslice + : timerangeToTimeextent(requestMeta.timeFilters), isTimeExtentForTimeslice, }, }; @@ -519,7 +519,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource async getGeoJsonWithMeta( layerName: string, - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void, isRequestStillActive: () => boolean, inspectorAdapters: Adapters @@ -527,10 +527,10 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource const indexPattern = await this.getIndexPattern(); const { hits, meta } = this._isTopHits() - ? await this._getTopHits(layerName, searchFilters, registerCancelCallback, inspectorAdapters) + ? await this._getTopHits(layerName, requestMeta, registerCancelCallback, inspectorAdapters) : await this._getSearchHits( layerName, - searchFilters, + requestMeta, registerCancelCallback, inspectorAdapters ); @@ -546,7 +546,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource }); return properties; }; - const epochMillisFields = searchFilters.fieldNames.filter((fieldName) => { + const epochMillisFields = requestMeta.fieldNames.filter((fieldName) => { const field = getField(indexPattern, fieldName); return field.readFromDocValues && field.type === 'date'; }); @@ -841,7 +841,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource } async getTileUrl( - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, refreshToken: string, hasLabels: boolean, buffer: number @@ -849,7 +849,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource const dataView = await this.getIndexPattern(); const indexSettings = await loadIndexSettings(dataView.getIndexPattern()); - const searchSource = await this.makeSearchSource(searchFilters, indexSettings.maxResultWindow); + const searchSource = await this.makeSearchSource(requestMeta, indexSettings.maxResultWindow); // searchSource calls dataView.getComputedFields to seed docvalueFields // dataView.getComputedFields adds each date field in the dataView to docvalueFields to ensure standardized date format across kibana // we don't need these as they request unneeded fields and bloat responses @@ -864,7 +864,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource // use fields API searchSource.setField( 'fields', - searchFilters.fieldNames + requestMeta.fieldNames .filter((fieldName) => { return fieldName !== this._descriptor.geoField; }) @@ -895,7 +895,7 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource params.set('buffer', buffer.toString()); params.set('requestBody', encodeMvtResponseBody(requestBody)); params.set('token', refreshToken); - const executionContextId = getExecutionContextId(searchFilters.executionContext); + const executionContextId = getExecutionContextId(requestMeta.executionContext); if (executionContextId) { params.set('executionContextId', executionContextId); } @@ -947,22 +947,22 @@ export class ESSearchSource extends AbstractESSource implements IMvtVectorSource } async canLoadAllDocuments( - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void ) { const abortController = new AbortController(); registerCancelCallback(() => abortController.abort()); const maxResultWindow = await this.getMaxResultWindow(); - const searchSource = await this.makeSearchSource(searchFilters, 0); + const searchSource = await this.makeSearchSource(requestMeta, 0); searchSource.setField('trackTotalHits', maxResultWindow + 1); const { rawResponse: resp } = await lastValueFrom( searchSource.fetch$({ abortSignal: abortController.signal, - sessionId: searchFilters.searchSessionId, + sessionId: requestMeta.searchSessionId, legacyHitsTotal: false, executionContext: mergeExecutionContext( { description: 'es_search_source:all_doc_counts' }, - searchFilters.executionContext + requestMeta.executionContext ), }) ); diff --git a/x-pack/plugins/maps/public/classes/sources/es_source/es_source.ts b/x-pack/plugins/maps/public/classes/sources/es_source/es_source.ts index f941c610962d2..d37f02a079a2d 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_source/es_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_source/es_source.ts @@ -15,6 +15,7 @@ import type { KibanaExecutionContext } from '@kbn/core/public'; import { RequestAdapter } from '@kbn/inspector-plugin/common/adapters/request'; import { lastValueFrom } from 'rxjs'; import type { TimeRange } from '@kbn/es-query'; +import type { IESAggSource } from '../es_agg_source'; import { AbstractVectorSource, BoundsRequestMeta } from '../vector_source'; import { getAutocompleteService, @@ -33,7 +34,6 @@ import { AbstractSourceDescriptor, DynamicStylePropertyOptions, MapExtent, - VectorJoinSourceRequestMeta, VectorSourceRequestMeta, } from '../../../../common/descriptor_types'; import { IVectorStyle } from '../../styles/vector/vector_style'; @@ -207,47 +207,46 @@ export class AbstractESSource extends AbstractVectorSource implements IESSource } async makeSearchSource( - searchFilters: VectorSourceRequestMeta | VectorJoinSourceRequestMeta | BoundsRequestMeta, + requestMeta: VectorSourceRequestMeta | BoundsRequestMeta, limit: number, initialSearchContext?: object ): Promise { const indexPattern = await this.getIndexPattern(); - const globalFilters: Filter[] = searchFilters.applyGlobalQuery ? searchFilters.filters : []; + const globalFilters: Filter[] = requestMeta.applyGlobalQuery ? requestMeta.filters : []; const allFilters: Filter[] = [...globalFilters]; - if (searchFilters.joinKeyFilter) { - allFilters.push(searchFilters.joinKeyFilter); + if (requestMeta.joinKeyFilter) { + allFilters.push(requestMeta.joinKeyFilter); } - if (this.isFilterByMapBounds() && 'buffer' in searchFilters && searchFilters.buffer) { + if (this.isFilterByMapBounds() && 'buffer' in requestMeta && requestMeta.buffer) { // buffer can be empty const geoField = await this._getGeoField(); const buffer: MapExtent = - this.isGeoGridPrecisionAware() && - 'geogridPrecision' in searchFilters && - typeof searchFilters.geogridPrecision === 'number' - ? expandToTileBoundaries(searchFilters.buffer, searchFilters.geogridPrecision) - : searchFilters.buffer; + 'isGeoGridPrecisionAware' in this && + 'getGeoGridPrecision' in this && + (this as IESAggSource).isGeoGridPrecisionAware() + ? expandToTileBoundaries( + requestMeta.buffer, + (this as IESAggSource).getGeoGridPrecision(requestMeta.zoom) + ) + : requestMeta.buffer; const extentFilter = createExtentFilter(buffer, [geoField.name]); allFilters.push(extentFilter); } let isFeatureEditorOpenForLayer = false; - if ('isFeatureEditorOpenForLayer' in searchFilters) { - isFeatureEditorOpenForLayer = searchFilters.isFeatureEditorOpenForLayer; + if ('isFeatureEditorOpenForLayer' in requestMeta) { + isFeatureEditorOpenForLayer = requestMeta.isFeatureEditorOpenForLayer; } - if ( - searchFilters.applyGlobalTime && - (await this.isTimeAware()) && - !isFeatureEditorOpenForLayer - ) { - const timeRange = searchFilters.timeslice + if (requestMeta.applyGlobalTime && (await this.isTimeAware()) && !isFeatureEditorOpenForLayer) { + const timeRange = requestMeta.timeslice ? { - from: new Date(searchFilters.timeslice.from).toISOString(), - to: new Date(searchFilters.timeslice.to).toISOString(), + from: new Date(requestMeta.timeslice.from).toISOString(), + to: new Date(requestMeta.timeslice.to).toISOString(), mode: 'absolute' as 'absolute', } - : searchFilters.timeFilters; + : requestMeta.timeFilters; const filter = getTimeFilter().createFilter(indexPattern, timeRange); if (filter) { allFilters.push(filter); @@ -260,23 +259,23 @@ export class AbstractESSource extends AbstractVectorSource implements IESSource searchSource.setField('index', indexPattern); searchSource.setField('size', limit); searchSource.setField('filter', allFilters); - if (searchFilters.applyGlobalQuery && !isFeatureEditorOpenForLayer) { - searchSource.setField('query', searchFilters.query); + if (requestMeta.applyGlobalQuery && !isFeatureEditorOpenForLayer) { + searchSource.setField('query', requestMeta.query); } const parents = []; - if (searchFilters.sourceQuery && !isFeatureEditorOpenForLayer) { + if (requestMeta.sourceQuery && !isFeatureEditorOpenForLayer) { const layerSearchSource = searchService.searchSource.createEmpty(); layerSearchSource.setField('index', indexPattern); - layerSearchSource.setField('query', searchFilters.sourceQuery); + layerSearchSource.setField('query', requestMeta.sourceQuery); parents.push(layerSearchSource); } - if (searchFilters.embeddableSearchContext && !isFeatureEditorOpenForLayer) { + if (requestMeta.embeddableSearchContext && !isFeatureEditorOpenForLayer) { const embeddableSearchSource = searchService.searchSource.createEmpty(); embeddableSearchSource.setField('index', indexPattern); - embeddableSearchSource.setField('query', searchFilters.embeddableSearchContext.query); - embeddableSearchSource.setField('filter', searchFilters.embeddableSearchContext.filters); + embeddableSearchSource.setField('query', requestMeta.embeddableSearchContext.query); + embeddableSearchSource.setField('filter', requestMeta.embeddableSearchContext.filters); parents.push(embeddableSearchSource); } diff --git a/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts b/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts index ce4f70c635612..5540454702114 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts @@ -26,7 +26,7 @@ import { } from '../../../../common/elasticsearch_util'; import { ESTermSourceDescriptor, - VectorJoinSourceRequestMeta, + VectorSourceRequestMeta, } from '../../../../common/descriptor_types'; import { PropertiesMap } from '../../../../common/elasticsearch_util'; import { isValidStringConfig } from '../../util/valid_string_config'; @@ -122,7 +122,7 @@ export class ESTermSource extends AbstractESAggSource implements ITermJoinSource } async getPropertiesMap( - searchFilters: VectorJoinSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, leftSourceName: string, leftFieldName: string, registerCancelCallback: (callback: () => void) => void, @@ -133,7 +133,7 @@ export class ESTermSource extends AbstractESAggSource implements ITermJoinSource } const indexPattern = await this.getIndexPattern(); - const searchSource: ISearchSource = await this.makeSearchSource(searchFilters, 0); + const searchSource: ISearchSource = await this.makeSearchSource(requestMeta, 0); searchSource.setField('trackTotalHits', false); const termsField = getField(indexPattern, this._termField.getName()); const termsAgg = { @@ -158,10 +158,10 @@ export class ESTermSource extends AbstractESAggSource implements ITermJoinSource rightSource: `${indexPattern.getName()}:${this._termField.getName()}`, }, }), - searchSessionId: searchFilters.searchSessionId, + searchSessionId: requestMeta.searchSessionId, executionContext: mergeExecutionContext( { description: 'es_term_source:terms' }, - searchFilters.executionContext + requestMeta.executionContext ), requestsAdapter: inspectorAdapters.requests, }); diff --git a/x-pack/plugins/maps/public/classes/sources/source.ts b/x-pack/plugins/maps/public/classes/sources/source.ts index 030cbd0c49393..7ccf15bfed2f3 100644 --- a/x-pack/plugins/maps/public/classes/sources/source.ts +++ b/x-pack/plugins/maps/public/classes/sources/source.ts @@ -46,7 +46,6 @@ export interface ISource { getType(): string; isFieldAware(): boolean; isFilterByMapBounds(): boolean; - isGeoGridPrecisionAware(): boolean; isQueryAware(): boolean; isTimeAware(): Promise; getImmutableProperties(): Promise; @@ -61,7 +60,6 @@ export interface ISource { getApplyForceRefresh(): boolean; getIndexPatternIds(): string[]; getQueryableIndexPatternIds(): string[]; - getGeoGridPrecision(zoom: number): number; createFieldFormatter(field: IField): Promise; getValueSuggestions(field: IField, query: string): Promise; getMinZoom(): number; @@ -109,10 +107,6 @@ export class AbstractSource implements ISource { return false; } - isGeoGridPrecisionAware(): boolean { - return false; - } - isQueryAware(): boolean { return false; } @@ -145,10 +139,6 @@ export class AbstractSource implements ISource { return []; } - getGeoGridPrecision(zoom: number): number { - return 0; - } - isESSource(): boolean { return false; } diff --git a/x-pack/plugins/maps/public/classes/sources/table_source/table_source.test.ts b/x-pack/plugins/maps/public/classes/sources/table_source/table_source.test.ts index 30aa2e3ed258c..e43d3de268d31 100644 --- a/x-pack/plugins/maps/public/classes/sources/table_source/table_source.test.ts +++ b/x-pack/plugins/maps/public/classes/sources/table_source/table_source.test.ts @@ -7,10 +7,7 @@ import { TableSource } from './table_source'; import { FIELD_ORIGIN } from '../../../../common/constants'; -import { - VectorJoinSourceRequestMeta, - VectorSourceRequestMeta, -} from '../../../../common/descriptor_types'; +import { VectorSourceRequestMeta } from '../../../../common/descriptor_types'; describe('TableSource', () => { describe('getName', () => { @@ -57,7 +54,7 @@ describe('TableSource', () => { }); const propertiesMap = await tableSource.getPropertiesMap( - {} as unknown as VectorJoinSourceRequestMeta, + {} as unknown as VectorSourceRequestMeta, 'a', 'b', () => {} diff --git a/x-pack/plugins/maps/public/classes/sources/table_source/table_source.ts b/x-pack/plugins/maps/public/classes/sources/table_source/table_source.ts index bfb143ef8b831..0bfdbc90be847 100644 --- a/x-pack/plugins/maps/public/classes/sources/table_source/table_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/table_source/table_source.ts @@ -12,7 +12,6 @@ import { FIELD_ORIGIN, SOURCE_TYPES, VECTOR_SHAPE_TYPE } from '../../../../commo import { MapExtent, TableSourceDescriptor, - VectorJoinSourceRequestMeta, VectorSourceRequestMeta, } from '../../../../common/descriptor_types'; import { ITermJoinSource } from '../term_join_source'; @@ -60,7 +59,7 @@ export class TableSource extends AbstractVectorSource implements ITermJoinSource } async getPropertiesMap( - searchFilters: VectorJoinSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, leftSourceName: string, leftFieldName: string, registerCancelCallback: (callback: () => void) => void @@ -189,7 +188,7 @@ export class TableSource extends AbstractVectorSource implements ITermJoinSource // Could be useful to implement, e.g. to preview raw csv data async getGeoJsonWithMeta( layerName: string, - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void, isRequestStillActive: () => boolean ): Promise { diff --git a/x-pack/plugins/maps/public/classes/sources/term_join_source/term_join_source.ts b/x-pack/plugins/maps/public/classes/sources/term_join_source/term_join_source.ts index 6e3b12be53aaf..30e834fdf11f5 100644 --- a/x-pack/plugins/maps/public/classes/sources/term_join_source/term_join_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/term_join_source/term_join_source.ts @@ -10,7 +10,7 @@ import type { KibanaExecutionContext } from '@kbn/core/public'; import { Query } from '@kbn/data-plugin/common/query'; import { Adapters } from '@kbn/inspector-plugin/common/adapters'; import { IField } from '../../fields/field'; -import { VectorJoinSourceRequestMeta } from '../../../../common/descriptor_types'; +import { VectorSourceRequestMeta } from '../../../../common/descriptor_types'; import { PropertiesMap } from '../../../../common/elasticsearch_util'; import { ITooltipProperty } from '../../tooltips/tooltip_property'; import { ISource } from '../source'; @@ -20,7 +20,7 @@ export interface ITermJoinSource extends ISource { getTermField(): IField; getWhereQuery(): Query | undefined; getPropertiesMap( - searchFilters: VectorJoinSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, leftSourceName: string, leftFieldName: string, registerCancelCallback: (callback: () => void) => void, diff --git a/x-pack/plugins/maps/public/classes/sources/tms_source/index.ts b/x-pack/plugins/maps/public/classes/sources/tms_source/index.ts index d18a00df34f07..4c8ca304f83b0 100644 --- a/x-pack/plugins/maps/public/classes/sources/tms_source/index.ts +++ b/x-pack/plugins/maps/public/classes/sources/tms_source/index.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { DataFilters } from '../../../../common/descriptor_types'; +import { SourceRequestMeta } from '../../../../common/descriptor_types'; import { ISource } from '../source'; export interface ITMSSource extends ISource { - getUrlTemplate(dataFilters: DataFilters): Promise; + getUrlTemplate(requestMeta: SourceRequestMeta): Promise; } diff --git a/x-pack/plugins/maps/public/classes/sources/vector_source/mvt_vector_source.ts b/x-pack/plugins/maps/public/classes/sources/vector_source/mvt_vector_source.ts index 8842d96fdeb51..829afe5917cd5 100644 --- a/x-pack/plugins/maps/public/classes/sources/vector_source/mvt_vector_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/vector_source/mvt_vector_source.ts @@ -14,7 +14,7 @@ export interface IMvtVectorSource extends IVectorSource { * Append refreshToken as a URL parameter to force tile re-fetch on refresh (not required) */ getTileUrl( - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, refreshToken: string, hasLabels: boolean, buffer: number diff --git a/x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx b/x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx index 020b99fc429e2..f56785b0f6f53 100644 --- a/x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/vector_source/vector_source.tsx @@ -28,6 +28,7 @@ import { ITooltipProperty, TooltipProperty } from '../../tooltips/tooltip_proper import { AbstractSource, ISource } from '../source'; import { IField } from '../../fields/field'; import { + DataFilters, ESSearchSourceResponseMeta, MapExtent, Timeslice, @@ -96,7 +97,7 @@ export interface IVectorSource extends ISource { ): Promise; getGeoJsonWithMeta( layerName: string, - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void, isRequestStillActive: () => boolean, inspectorAdapters: Adapters @@ -112,7 +113,7 @@ export interface IVectorSource extends ISource { * Vector layer avoids unnecessarily re-fetching source data. * Use getSyncMeta to expose fields that require source data re-fetch when changed. */ - getSyncMeta(): object | null; + getSyncMeta(dataFilters: DataFilters): object | null; getFieldNames(): string[]; createField({ fieldName }: { fieldName: string }): IField; @@ -194,7 +195,7 @@ export class AbstractVectorSource extends AbstractSource implements IVectorSourc async getGeoJsonWithMeta( layerName: string, - searchFilters: VectorSourceRequestMeta, + requestMeta: VectorSourceRequestMeta, registerCancelCallback: (callback: () => void) => void, isRequestStillActive: () => boolean, inspectorAdapters: Adapters @@ -238,7 +239,7 @@ export class AbstractVectorSource extends AbstractSource implements IVectorSourc return { tooltipContent: null, areResultsTrimmed: false }; } - getSyncMeta(): object | null { + getSyncMeta(dataFilters: DataFilters): object | null { return null; } diff --git a/x-pack/plugins/maps/public/classes/util/can_skip_fetch.ts b/x-pack/plugins/maps/public/classes/util/can_skip_fetch.ts index 71d4730880b96..963a0cf4d08ad 100644 --- a/x-pack/plugins/maps/public/classes/util/can_skip_fetch.ts +++ b/x-pack/plugins/maps/public/classes/util/can_skip_fetch.ts @@ -72,9 +72,8 @@ export async function canSkipSourceUpdate({ const timeAware = await source.isTimeAware(); const isFieldAware = source.isFieldAware(); const isQueryAware = source.isQueryAware(); - const isGeoGridPrecisionAware = source.isGeoGridPrecisionAware(); - if (!timeAware && !extentAware && !isFieldAware && !isQueryAware && !isGeoGridPrecisionAware) { + if (!timeAware && !extentAware && !isFieldAware && !isQueryAware) { return !!prevDataRequest && prevDataRequest.hasDataOrRequestInProgress(); } @@ -128,16 +127,7 @@ export async function canSkipSourceUpdate({ updateDueToSearchSessionId = prevMeta.searchSessionId !== nextRequestMeta.searchSessionId; } - let updateDueToPrecisionChange = false; let updateDueToExtentChange = false; - - if (isGeoGridPrecisionAware) { - updateDueToPrecisionChange = !_.isEqual( - prevMeta.geogridPrecision, - nextRequestMeta.geogridPrecision - ); - } - if (extentAware) { updateDueToExtentChange = updateDueToExtent(prevMeta, nextRequestMeta); } @@ -154,7 +144,6 @@ export async function canSkipSourceUpdate({ !updateDueToFilters && !updateDueToSourceQuery && !updateDueToApplyGlobalQuery && - !updateDueToPrecisionChange && !updateDueToSourceMetaChange && !updateDueToSearchSessionId ); diff --git a/x-pack/plugins/ml/public/application/contexts/kibana/use_cases_modal.ts b/x-pack/plugins/ml/public/application/contexts/kibana/use_cases_modal.ts index 0d7811822593e..7691b2560ce05 100644 --- a/x-pack/plugins/ml/public/application/contexts/kibana/use_cases_modal.ts +++ b/x-pack/plugins/ml/public/application/contexts/kibana/use_cases_modal.ts @@ -21,7 +21,7 @@ export const useCasesModal = ( services: { cases }, } = useMlKibana(); - const selectCaseModal = cases?.hooks.getUseCasesAddToExistingCaseModal(); + const selectCaseModal = cases?.hooks.useCasesAddToExistingCaseModal(); return useCallback( (persistableState: Partial, 'id'>>) => { diff --git a/x-pack/plugins/ml/public/application/explorer/anomaly_timeline.tsx b/x-pack/plugins/ml/public/application/explorer/anomaly_timeline.tsx index e9cbf84c090df..55564f2f65189 100644 --- a/x-pack/plugins/ml/public/application/explorer/anomaly_timeline.tsx +++ b/x-pack/plugins/ml/public/application/explorer/anomaly_timeline.tsx @@ -78,7 +78,7 @@ export const AnomalyTimeline: FC = React.memo( const globalTimeRange = useTimeRangeUpdates(true); - const selectCaseModal = cases?.hooks.getUseCasesAddToExistingCaseModal(); + const selectCaseModal = cases?.hooks.useCasesAddToExistingCaseModal(); const { anomalyExplorerCommonStateService, anomalyTimelineStateService } = useAnomalyExplorerContext(); diff --git a/x-pack/plugins/observability/e2e/README.md b/x-pack/plugins/observability/e2e/README.md deleted file mode 100644 index 292e38a208d2d..0000000000000 --- a/x-pack/plugins/observability/e2e/README.md +++ /dev/null @@ -1,15 +0,0 @@ -## How to run these tests - -These tests rely on the Kibana functional test runner. There is a Kibana config in this directory, and a dedicated -script for standing up the test server. - -### Start the server - -From `~/x-pack/plugins/observability/scripts`, run `node e2e.js --server`. Wait for the server to startup. It will provide you -with an example run command when it finishes. - -### Run the tests - -From this directory, `~/x-pack/plugins/observability/e2e`, you can now run `node ../../../../scripts/functional_test_runner --config synthetics_run.ts`. - -In addition to the usual flags like `--grep`, you can also specify `--no-headless` in order to view your tests as you debug/develop. diff --git a/x-pack/plugins/observability/e2e/journeys/exploratory_view.ts b/x-pack/plugins/observability/e2e/journeys/exploratory_view.ts deleted file mode 100644 index 877c13e93c373..0000000000000 --- a/x-pack/plugins/observability/e2e/journeys/exploratory_view.ts +++ /dev/null @@ -1,108 +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 { journey, step, before } from '@elastic/synthetics'; -import { recordVideo } from '../record_video'; -import { createExploratoryViewUrl } from '../../public/components/shared/exploratory_view/configurations/exploratory_view_url'; -import { loginToKibana, TIMEOUT_60_SEC, waitForLoadingToFinish } from '../utils'; - -journey('Exploratory view', async ({ page, params }) => { - recordVideo(page); - - before(async () => { - await waitForLoadingToFinish({ page }); - }); - - const expUrl = createExploratoryViewUrl({ - reportType: 'kpi-over-time', - allSeries: [ - { - name: 'Elastic page views', - time: { - from: '2021-01-18T12:20:01.682Z', - to: '2021-01-18T12:25:27.484Z', - }, - selectedMetricField: '___records___', - reportDefinitions: { 'service.name': [] }, - dataType: 'ux', - }, - ], - }); - - const baseUrl = `${params.kibanaUrl}${expUrl}`; - - step('Go to Exploratory view', async () => { - await page.goto(baseUrl, { - waitUntil: 'networkidle', - }); - await loginToKibana({ - page, - user: { username: 'elastic', password: 'changeme' }, - }); - }); - - step('renders as expected', async () => { - await Promise.all([page.waitForNavigation(TIMEOUT_60_SEC), page.click('text=Explore data')]); - await page.click('text=User experience (RUM)'); - await page.click('[aria-label="Toggle series information"] >> text=Page views', TIMEOUT_60_SEC); - await page.click('[aria-label="Edit series"]', TIMEOUT_60_SEC); - await page.click('button:has-text("No breakdown")'); - await page.click('button[role="option"]:has-text("Operating system")', TIMEOUT_60_SEC); - await page.click('button:has-text("Apply changes")'); - - await page.click('text=Chrome OS'); - await page.click('text=iOS'); - await page.click('text=iOS'); - await page.click('text=Chrome OS'); - await page.click('text=Ubuntu'); - await page.click('text=Android'); - await page.click('text=Linux'); - await page.click('text=Mac OS X'); - await page.click('text=Windows'); - await page.click('h1:has-text("Explore data")'); - }); - - step('Edit and change the series to distribution', async () => { - await page.click('[aria-label="View series actions"]'); - await page.click('[aria-label="Remove series"]'); - await page.click('button:has-text("KPI over time")'); - await page.click('button[role="option"]:has-text("Performance distribution")'); - await page.click('button:has-text("Add series")'); - await page.click('button:has-text("Select data type")'); - await page.click('button:has-text("User experience (RUM)")'); - await page.click('button:has-text("Select report metric")'); - await page.click('button:has-text("Page load time")'); - await page.click('.euiComboBox__inputWrap'); - await page.click('[aria-label="Date quick select"]'); - await page.click('text=Last 1 year'); - await page.click('[aria-label="Date quick select"]'); - await page.click('[aria-label="Time value"]'); - await page.fill('[aria-label="Time value"]', '010'); - await page.selectOption('[aria-label="Time unit"]', 'y'); - - await page.click('div[role="dialog"] button:has-text("Apply")'); - await page.click('.euiComboBox__inputWrap'); - await page.click('button[role="option"]:has-text("elastic-co-frontend")'); - await page.click('button:has-text("Apply changes")'); - await page.click('text=ux-series-1'); - await page.click('text=User experience (RUM)'); - await page.click('text=Page load time'); - await page.click('text=Pages loaded'); - await page.click('button:has-text("95th")'); - await page.click('button:has-text("90th")'); - await page.click('button:has-text("99th")'); - await page.click('[aria-label="Edit series"]'); - await page.click('button:has-text("No breakdown")'); - await page.click('button[role="option"]:has-text("Browser family")'); - await page.click('button:has-text("Apply changes")'); - await page.click('text=Edge'); - await page.click('text=Opera'); - await page.click('text=Safari'); - await page.click('text=HeadlessChrome'); - await page.click('[aria-label="Firefox; Activate to hide series in graph"]'); - }); -}); diff --git a/x-pack/plugins/observability/e2e/journeys/single_metric.journey.ts b/x-pack/plugins/observability/e2e/journeys/single_metric.journey.ts deleted file mode 100644 index 6fcdb71ccffa2..0000000000000 --- a/x-pack/plugins/observability/e2e/journeys/single_metric.journey.ts +++ /dev/null @@ -1,65 +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 { journey, step, before } from '@elastic/synthetics'; -import { recordVideo } from '../record_video'; -import { createExploratoryViewUrl } from '../../public/components/shared/exploratory_view/configurations/exploratory_view_url'; -import { loginToKibana, TIMEOUT_60_SEC, waitForLoadingToFinish } from '../utils'; - -journey('SingleMetric', async ({ page, params }) => { - recordVideo(page); - - before(async () => { - await waitForLoadingToFinish({ page }); - }); - - const expUrl = createExploratoryViewUrl({ - reportType: 'single-metric', - allSeries: [ - { - dataType: 'synthetics', - time: { - from: 'now-1y/d', - to: 'now', - }, - name: 'synthetics-series-1', - selectedMetricField: 'monitor_availability', - reportDefinitions: { - 'monitor.name': ['test-monitor - inline'], - 'url.full': ['https://www.elastic.co/'], - }, - }, - ], - }); - - const baseUrl = `${params.kibanaUrl}${expUrl}`; - - step('Go to Exploratory view', async () => { - await page.goto(baseUrl, { - waitUntil: 'networkidle', - }); - await loginToKibana({ - page, - user: { username: 'elastic', password: 'changeme' }, - }); - }); - - step('Open exploratory view with single metric', async () => { - await Promise.all([ - page.waitForNavigation(TIMEOUT_60_SEC), - page.click('text=Explore data', TIMEOUT_60_SEC), - ]); - - await waitForLoadingToFinish({ page }); - - await page.click('text=0.0%', TIMEOUT_60_SEC); - await page.click('text=0.0%Availability'); - await page.click( - 'text=Explore data Last Updated: a few seconds agoRefreshHide chart0.0%AvailabilityRep' - ); - }); -}); diff --git a/x-pack/plugins/observability/e2e/journeys/step_duration.journey.ts b/x-pack/plugins/observability/e2e/journeys/step_duration.journey.ts deleted file mode 100644 index 10cc98fa2da6a..0000000000000 --- a/x-pack/plugins/observability/e2e/journeys/step_duration.journey.ts +++ /dev/null @@ -1,96 +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 { journey, step, before, after } from '@elastic/synthetics'; -import moment from 'moment'; -import { recordVideo } from '../record_video'; -import { createExploratoryViewUrl } from '../../public/components/shared/exploratory_view/configurations/exploratory_view_url'; -import { loginToKibana, TIMEOUT_60_SEC, waitForLoadingToFinish } from '../utils'; - -journey('Exploratory view', async ({ page, params }) => { - recordVideo(page); - - before(async () => { - await waitForLoadingToFinish({ page }); - }); - - after(async () => { - // eslint-disable-next-line no-console - console.log(await page.video()?.path()); - }); - - const expUrl = createExploratoryViewUrl({ - reportType: 'kpi-over-time', - allSeries: [ - { - dataType: 'uptime', - time: { - from: moment().subtract(10, 'y').toISOString(), - to: moment().toISOString(), - }, - name: 'synthetics-series-1', - breakdown: 'monitor.type', - selectedMetricField: 'monitor.duration.us', - reportDefinitions: { - 'url.full': ['ALL_VALUES'], - }, - }, - ], - }); - - const baseUrl = `${params.kibanaUrl}${expUrl}`; - - step('Go to Exploratory view', async () => { - await page.goto(baseUrl, { - waitUntil: 'networkidle', - }); - await loginToKibana({ - page, - user: { username: 'elastic', password: 'changeme' }, - }); - }); - - step('Open exploratory view with monitor duration', async () => { - await page.waitForNavigation(TIMEOUT_60_SEC); - - await waitForLoadingToFinish({ page }); - await page.click('text=browser', TIMEOUT_60_SEC); - await page.click('text=http'); - await page.click('[aria-label="Remove report metric"]'); - await page.click('button:has-text("Select report metric")'); - await page.click('button:has-text("Step duration")'); - await page.click('button[data-test-subj="seriesBreakdown"]:has-text("Monitor type")'); - await page.click('button[role="option"]:has-text("Step name")'); - await page.click('.euiComboBox__inputWrap'); - await page.click( - 'text=Search Monitor nameCombo box. Selected. Combo box input. Search Monitor name. Ty' - ); - await page.click('button[role="option"]:has-text("test-monitor - inline")'); - await page.click('button:has-text("Apply changes")'); - - await waitForLoadingToFinish({ page }); - - await page.click('[aria-label="series color: #54b399"]'); - await page.click('[aria-label="series color: #6092c0"]'); - await page.click('[aria-label="series color: #d36086"] path'); - await page.click('[aria-label="series color: #9170b8"]'); - await page.click('[aria-label="series color: #ca8eae"]'); - await page.click('[aria-label="series color: #d6bf57"]'); - await page.click('text=load homepage'); - await page.click('text=load homepage'); - await page.click('text=load github'); - await page.click('text=load github'); - await page.click('text=load google'); - await page.click('text=load google'); - await page.click('text=hover over products menu'); - await page.click('text=hover over products menu'); - await page.click('text=load homepage 1'); - await page.click('text=load homepage 1'); - await page.click('text=load homepage 2'); - await page.click('text=load homepage 2'); - }); -}); diff --git a/x-pack/plugins/observability/e2e/synthetics_run.ts b/x-pack/plugins/observability/e2e/synthetics_run.ts deleted file mode 100644 index eadb62dc44a72..0000000000000 --- a/x-pack/plugins/observability/e2e/synthetics_run.ts +++ /dev/null @@ -1,45 +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 { FtrConfigProviderContext } from '@kbn/test'; -import path from 'path'; -import { SyntheticsRunner } from './synthetics_runner'; -import { argv } from './parse_args_params'; - -const { headless, grep, bail: pauseOnError } = argv; - -async function runE2ETests({ readConfigFile }: FtrConfigProviderContext) { - const kibanaConfig = await readConfigFile(require.resolve('@kbn/synthetics-plugin/e2e/config')); - - return { - ...kibanaConfig.getAll(), - testRunner: async ({ getService }: any) => { - const syntheticsRunner = new SyntheticsRunner(getService, { - headless, - match: grep, - pauseOnError, - }); - - await syntheticsRunner.setup(); - - await syntheticsRunner.loadTestData(path.join(__dirname, '../../ux/e2e/fixtures/'), [ - 'rum_8.0.0', - 'rum_test_data', - ]); - await syntheticsRunner.loadTestData( - path.join(__dirname, '../../synthetics/e2e/fixtures/es_archiver/'), - ['full_heartbeat', 'browser'] - ); - await syntheticsRunner.loadTestFiles(async () => { - require(path.join(__dirname, './journeys')); - }); - await syntheticsRunner.run(); - }, - }; -} - -// eslint-disable-next-line import/no-default-export -export default runE2ETests; diff --git a/x-pack/plugins/observability/e2e/tsconfig.json b/x-pack/plugins/observability/e2e/tsconfig.json deleted file mode 100644 index df3428e1aa0bf..0000000000000 --- a/x-pack/plugins/observability/e2e/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../../../tsconfig.base.json", - "exclude": ["tmp", "target/**/*"], - "include": ["./**/*"], - "compilerOptions": { - "outDir": "target/types", - "types": [ "node"], - }, -} diff --git a/x-pack/plugins/observability/public/components/alerts_flyout.test.tsx b/x-pack/plugins/observability/public/components/alerts_flyout.test.tsx index 96716ab593200..84d3046d40b3c 100644 --- a/x-pack/plugins/observability/public/components/alerts_flyout.test.tsx +++ b/x-pack/plugins/observability/public/components/alerts_flyout.test.tsx @@ -67,6 +67,7 @@ const activeAlert: TopAlert = { 'kibana.alert.rule.producer': 'logs', 'kibana.alert.rule.consumer': 'logs', 'kibana.alert.rule.category': 'Log threshold', + 'kibana.alert.rule.revision': 0, 'kibana.alert.start': '2021-09-02T12:54:09.674Z', 'kibana.alert.rule.rule_type_id': 'logs.alert.document.count', 'event.action': 'active', @@ -97,6 +98,7 @@ const recoveredAlert: TopAlert = { 'kibana.alert.rule.producer': 'infrastructure', 'kibana.alert.rule.consumer': 'infrastructure', 'kibana.alert.rule.category': 'Inventory', + 'kibana.alert.rule.revision': 0, 'kibana.alert.start': '2021-09-02T13:05:36.699Z', 'kibana.alert.rule.rule_type_id': 'metrics.alert.inventory.threshold', 'event.action': 'close', diff --git a/x-pack/plugins/observability/public/components/alerts_table/get_alerts_table_configuration.tsx b/x-pack/plugins/observability/public/components/alerts_table/get_alerts_table_configuration.tsx index bc7faa02f5a23..2127794b6070e 100644 --- a/x-pack/plugins/observability/public/components/alerts_table/get_alerts_table_configuration.tsx +++ b/x-pack/plugins/observability/public/components/alerts_table/get_alerts_table_configuration.tsx @@ -14,7 +14,6 @@ import { RenderCustomActionsRowArgs, } from '@kbn/triggers-actions-ui-plugin/public/types'; import { casesFeatureId, observabilityFeatureId } from '../../../common'; -import { useBulkAddToCaseTriggerActions } from '../../hooks/use_alert_bulk_case_actions'; import { getRenderCellValue } from './render_cell_value'; import { columns } from './default_columns'; import { @@ -31,7 +30,7 @@ export const getAlertsTableConfiguration = ( config: ConfigSchema ): AlertsTableConfigurationRegistry => ({ id: observabilityFeatureId, - casesFeatureId, + cases: { featureId: casesFeatureId, owner: [observabilityFeatureId] }, columns, getRenderCellValue: (({ setFlyoutAlert }: { setFlyoutAlert: (data: TopAlert) => void }) => { return getRenderCellValue({ observabilityRuleTypeRegistry, setFlyoutAlert }); @@ -44,7 +43,12 @@ export const getAlertsTableConfiguration = ( }, ], useActionsColumn: () => ({ - renderCustomActionsRow: ({ alert, id, setFlyoutAlert }: RenderCustomActionsRowArgs) => { + renderCustomActionsRow: ({ + alert, + id, + setFlyoutAlert, + refresh, + }: RenderCustomActionsRowArgs) => { return ( ); }, }), - useBulkActions: useBulkAddToCaseTriggerActions, useInternalFlyout: () => { const { header, body, footer } = useGetAlertFlyoutComponents(observabilityRuleTypeRegistry); return { header, body, footer }; diff --git a/x-pack/plugins/observability/public/hooks/slo/use_clone_slo.ts b/x-pack/plugins/observability/public/hooks/slo/use_clone_slo.ts index e304b97144142..d2fcc25eb2c34 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_clone_slo.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_clone_slo.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { v1 as uuidv1 } from 'uuid'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import type { CreateSLOInput, CreateSLOResponse, FindSLOResponse } from '@kbn/slo-schema'; @@ -40,7 +41,7 @@ export function useCloneSlo() { const optimisticUpdate = { ...data, - results: [...(data?.results || []), { ...sloUsedToClone, name: slo.name }], + results: [...(data?.results || []), { ...sloUsedToClone, name: slo.name, id: uuidv1() }], total: data?.total && data.total + 1, }; diff --git a/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_details.ts b/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_details.ts index b706add340801..be90446a94736 100644 --- a/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_details.ts +++ b/x-pack/plugins/observability/public/hooks/slo/use_fetch_slo_details.ts @@ -24,7 +24,7 @@ export interface UseFetchSloDetailsResponse { ) => Promise>; } -export function useFetchSloDetails(sloId: string): UseFetchSloDetailsResponse { +export function useFetchSloDetails(sloId?: string): UseFetchSloDetailsResponse { const { http } = useKibana().services; const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data, refetch } = useQuery( diff --git a/x-pack/plugins/observability/public/hooks/use_alert_bulk_case_actions.ts b/x-pack/plugins/observability/public/hooks/use_alert_bulk_case_actions.ts deleted file mode 100644 index 95fa5d793dd76..0000000000000 --- a/x-pack/plugins/observability/public/hooks/use_alert_bulk_case_actions.ts +++ /dev/null @@ -1,85 +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 { useMemo } from 'react'; -import { i18n } from '@kbn/i18n'; -import type { TimelineItem } from '@kbn/timelines-plugin/common'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { useGetUserCasesPermissions } from './use_get_user_cases_permissions'; -import type { ObservabilityAppServices } from '../application/types'; - -export interface UseAddToCaseActions { - onClose?: () => void; - onSuccess?: () => Promise; -} - -export const useBulkAddToCaseActions = ({ onClose, onSuccess }: UseAddToCaseActions = {}) => { - const { cases: casesUi } = useKibana().services; - - const userCasesPermissions = useGetUserCasesPermissions(); - - const createCaseFlyout = casesUi.hooks.getUseCasesAddToNewCaseFlyout({ - onClose, - onSuccess, - }); - const selectCaseModal = casesUi.hooks.getUseCasesAddToExistingCaseModal({ - onClose, - onRowClick: onSuccess, - }); - - return useMemo(() => { - return userCasesPermissions.create && userCasesPermissions.read - ? [ - { - label: i18n.translate('xpack.observability.alerts.actions.addToNewCase', { - defaultMessage: 'Add to new case', - }), - key: 'attach-new-case', - 'data-test-subj': 'attach-new-case', - disableOnQuery: true, - disabledLabel: i18n.translate('xpack.observability.alerts.actions.addToCaseDisabled', { - defaultMessage: 'Add to case is not supported for this selection', - }), - onClick: (items?: TimelineItem[]) => { - const caseAttachments = items ? casesUi.helpers.groupAlertsByRule(items) : []; - createCaseFlyout.open({ attachments: caseAttachments }); - }, - }, - { - label: i18n.translate('xpack.observability.alerts.actions.addToCase', { - defaultMessage: 'Add to existing case', - }), - key: 'attach-existing-case', - disableOnQuery: true, - disabledLabel: i18n.translate('xpack.observability.alerts.actions.addToCaseDisabled', { - defaultMessage: 'Add to case is not supported for this selection', - }), - 'data-test-subj': 'attach-existing-case', - onClick: (items?: TimelineItem[]) => { - const caseAttachments = items ? casesUi.helpers.groupAlertsByRule(items) : []; - selectCaseModal.open({ attachments: caseAttachments }); - }, - }, - ] - : []; - }, [ - casesUi.helpers, - createCaseFlyout, - userCasesPermissions.create, - userCasesPermissions.read, - selectCaseModal, - ]); -}; - -/* - * Wrapper hook to support trigger actions - * registry props for the alert table - * - * */ -export const useBulkAddToCaseTriggerActions = () => { - return useBulkAddToCaseActions({}); -}; 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 bcf851e32c4d3..479a77f7e5bc6 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 @@ -27,6 +27,7 @@ describe('useFetchAlertDetail', () => { '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.uuid': '69411af0-82a2-11ec-8139-c1568734434e', 'kibana.space_ids': ['default'], @@ -124,6 +125,7 @@ describe('useFetchAlertDetail', () => { "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", diff --git a/x-pack/plugins/observability/public/pages/alert_details/components/header_actions.tsx b/x-pack/plugins/observability/public/pages/alert_details/components/header_actions.tsx index a5054af6ec4f9..d411388d6a9ad 100644 --- a/x-pack/plugins/observability/public/pages/alert_details/components/header_actions.tsx +++ b/x-pack/plugins/observability/public/pages/alert_details/components/header_actions.tsx @@ -26,7 +26,7 @@ export function HeaderActions({ alert }: HeaderActionsProps) { const { http, cases: { - hooks: { getUseCasesAddToExistingCaseModal }, + hooks: { useCasesAddToExistingCaseModal }, }, triggersActionsUi: { getEditRuleFlyout: EditRuleFlyout, getRuleSnoozeModal: RuleSnoozeModal }, } = useKibana().services; @@ -40,7 +40,7 @@ export function HeaderActions({ alert }: HeaderActionsProps) { const [ruleConditionsFlyoutOpen, setRuleConditionsFlyoutOpen] = useState(false); const [snoozeModalOpen, setSnoozeModalOpen] = useState(false); - const selectCaseModal = getUseCasesAddToExistingCaseModal(); + const selectCaseModal = useCasesAddToExistingCaseModal(); const handleTogglePopover = () => setIsPopoverOpen(!isPopoverOpen); const handleClosePopover = () => setIsPopoverOpen(false); diff --git a/x-pack/plugins/observability/public/pages/alert_details/mock/alert.ts b/x-pack/plugins/observability/public/pages/alert_details/mock/alert.ts index 91dfb68c7f641..e35c888d46fc9 100644 --- a/x-pack/plugins/observability/public/pages/alert_details/mock/alert.ts +++ b/x-pack/plugins/observability/public/pages/alert_details/mock/alert.ts @@ -15,6 +15,7 @@ import { ALERT_RULE_CONSUMER, ALERT_RULE_NAME, ALERT_RULE_PRODUCER, + ALERT_RULE_REVISION, ALERT_RULE_TAGS, ALERT_RULE_TYPE_ID, ALERT_RULE_UUID, @@ -46,6 +47,7 @@ export const alert: TopAlert = { [ALERT_RULE_PRODUCER]: 'logs', [ALERT_RULE_CONSUMER]: 'logs', [ALERT_RULE_CATEGORY]: 'Log threshold', + [ALERT_RULE_REVISION]: 0, [ALERT_START]: '2021-09-02T12:54:09.674Z', [ALERT_RULE_TYPE_ID]: 'logs.alert.document.count', [EVENT_ACTION]: 'active', diff --git a/x-pack/plugins/observability/public/pages/alerts/alerts.tsx b/x-pack/plugins/observability/public/pages/alerts/alerts.tsx index 0f816ebfffeeb..9225c2afd72f8 100644 --- a/x-pack/plugins/observability/public/pages/alerts/alerts.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/alerts.tsx @@ -16,7 +16,6 @@ import { AlertConsumers } from '@kbn/rule-data-utils'; import { useHasData } from '../../hooks/use_has_data'; import { usePluginContext } from '../../hooks/use_plugin_context'; -import { useGetUserCasesPermissions } from '../../hooks/use_get_user_cases_permissions'; import { useBreadcrumbs } from '../../hooks/use_breadcrumbs'; import { useTimeBuckets } from '../../hooks/use_time_buckets'; import { useToasts } from '../../hooks/use_toast'; @@ -31,7 +30,6 @@ import { import { calculateTimeRangeBucketSize } from '../overview/helpers/calculate_bucket_size'; import { getNoDataConfig } from '../../utils/no_data_config'; import { getAlertSummaryTimeRange } from '../../utils/alert_summary_widget'; -import { observabilityFeatureId } from '../../../common'; import { observabilityAlertFeatureIds } from '../../config/alert_feature_ids'; import type { ObservabilityAppServices } from '../../application/types'; @@ -45,7 +43,6 @@ const DEFAULT_DATE_FORMAT = 'YYYY-MM-DD HH:mm'; function InternalAlertsPage() { const { - cases, charts, data: { query: { @@ -168,9 +165,6 @@ function InternalAlertsPage() { // If there is any data, set hasData to true otherwise we need to wait till all the data is loaded before setting hasData to true or false; undefined indicates the data is still loading. const hasData = hasAnyData === true || (isAllRequestsComplete === false ? undefined : false); - const CasesContext = cases.ui.getCasesContext(); - const userCasesPermissions = useGetUserCasesPermissions(); - if (!hasAnyData && !isAllRequestsComplete) { return ; } @@ -213,25 +207,19 @@ function InternalAlertsPage() { />
- - {esQuery && ( - - )} - + {esQuery && ( + + )} 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 72608e310d190..4a92143943f26 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 @@ -18,7 +18,22 @@ import { ConfigSchema, ObservabilityPublicPluginsStart } from '../../../plugin'; import { AppMountParameters, CoreStart } from '@kbn/core/public'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; +const refresh = jest.fn(); +const caseHooksReturnedValue = { + open: () => { + refresh(); + }, + close: jest.fn(), +}; + const mockUseKibanaReturnValue = kibanaStartMock.startContract(); +mockUseKibanaReturnValue.services.cases.hooks.useCasesAddToNewCaseFlyout.mockReturnValue( + caseHooksReturnedValue +); + +mockUseKibanaReturnValue.services.cases.hooks.useCasesAddToExistingCaseModal.mockReturnValue( + caseHooksReturnedValue +); jest.mock('../../../utils/kibana_react', () => ({ __esModule: true, @@ -26,7 +41,7 @@ jest.mock('../../../utils/kibana_react', () => ({ })); jest.mock('../../../hooks/use_get_user_cases_permissions', () => ({ - useGetUserCasesPermissions: jest.fn(() => ({})), + useGetUserCasesPermissions: jest.fn(() => ({ create: true, read: true })), })); const config = { @@ -49,6 +64,10 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ })); describe('ObservabilityActions component', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + const setup = async (pageId: string) => { const props: Props = { config, @@ -60,6 +79,7 @@ describe('ObservabilityActions component', () => { id: pageId, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), setFlyoutAlert: jest.fn(), + refresh, }; const wrapper = mountWithIntl(); @@ -93,4 +113,42 @@ describe('ObservabilityActions component', () => { '/app/observability/alerts/rules/06f53080-0f91-11ed-9d86-013908b232ef' ); }); + + it('should refresh when adding an alert to a new case', async () => { + const wrapper = await setup('nothing'); + wrapper.find('[data-test-subj="alertsTableRowActionMore"]').hostNodes().simulate('click'); + expect(wrapper.find('[data-test-subj="add-to-new-case-action"]').hostNodes().length).toBe(1); + + wrapper.find('[data-test-subj="add-to-new-case-action"]').hostNodes().simulate('click'); + expect(refresh).toHaveBeenCalled(); + }); + + it('should refresh when when calling onSuccess of useCasesAddToNewCaseFlyout', async () => { + await setup('nothing'); + + // @ts-expect-error: The object will always be defined + mockUseKibanaReturnValue.services.cases.hooks.useCasesAddToNewCaseFlyout.mock.calls[0][0].onSuccess(); + + expect(refresh).toHaveBeenCalled(); + }); + + it('should refresh when adding an alert to an existing case', async () => { + const wrapper = await setup('nothing'); + wrapper.find('[data-test-subj="alertsTableRowActionMore"]').hostNodes().simulate('click'); + expect(wrapper.find('[data-test-subj="add-to-existing-case-action"]').hostNodes().length).toBe( + 1 + ); + + wrapper.find('[data-test-subj="add-to-existing-case-action"]').hostNodes().simulate('click'); + expect(refresh).toHaveBeenCalled(); + }); + + it('should refresh when when calling onSuccess of useCasesAddToExistingCaseModal', async () => { + await setup('nothing'); + + // @ts-expect-error: The object will always be defined + mockUseKibanaReturnValue.services.cases.hooks.useCasesAddToExistingCaseModal.mock.calls[0][0].onSuccess(); + + expect(refresh).toHaveBeenCalled(); + }); }); 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 b99e18819b97c..0fcfbe22a31f2 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 @@ -14,7 +14,7 @@ import { EuiToolTip, } from '@elastic/eui'; -import React, { useMemo, useState } from 'react'; +import React, { useMemo, useState, useCallback } from 'react'; import { i18n } from '@kbn/i18n'; import { CaseAttachmentsWithoutOwner } from '@kbn/cases-plugin/public'; import { CommentType } from '@kbn/cases-plugin/common'; @@ -39,6 +39,7 @@ export interface Props { ecsData: Ecs; id?: string; observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry; + refresh: () => void; setFlyoutAlert: React.Dispatch>; } @@ -48,20 +49,19 @@ export function AlertActions({ ecsData, id: pageId, observabilityRuleTypeRegistry, + refresh, setFlyoutAlert, }: Props) { const { cases: { helpers: { getRuleIdFromEvent }, - hooks: { getUseCasesAddToNewCaseFlyout, getUseCasesAddToExistingCaseModal }, + hooks: { useCasesAddToNewCaseFlyout, useCasesAddToExistingCaseModal }, }, http: { basePath: { prepend }, }, } = useKibana().services; const userCasesPermissions = useGetUserCasesPermissions(); - const createCaseFlyout = getUseCasesAddToNewCaseFlyout(); - const selectCaseModal = getUseCasesAddToExistingCaseModal(); const parseObservabilityAlert = useMemo( () => parseAlert(observabilityRuleTypeRegistry), @@ -98,6 +98,13 @@ export function AlertActions({ : []; }, [ecsData, getRuleIdFromEvent, data]); + const onSuccess = useCallback(() => { + refresh(); + }, [refresh]); + + const createCaseFlyout = useCasesAddToNewCaseFlyout({ onSuccess }); + const selectCaseModal = useCasesAddToExistingCaseModal({ onSuccess }); + const closeActionsPopover = () => { setIsPopoverOpen(false); }; diff --git a/x-pack/plugins/observability/public/pages/overview/overview.tsx b/x-pack/plugins/observability/public/pages/overview/overview.tsx index 9eaf72d431c19..e4df5f3ae14f3 100644 --- a/x-pack/plugins/observability/public/pages/overview/overview.tsx +++ b/x-pack/plugins/observability/public/pages/overview/overview.tsx @@ -12,7 +12,6 @@ import { useKibana } from '@kbn/kibana-react-plugin/public'; import { AlertConsumers } from '@kbn/rule-data-utils'; import React, { useEffect, useMemo, useCallback, useState } from 'react'; -import { observabilityFeatureId } from '../../../common'; import type { ObservabilityAppServices } from '../../application/types'; import { LoadingObservability } from '../../components/loading_observability'; import { HeaderActions } from './components/header_actions'; @@ -27,7 +26,6 @@ import { paths } from '../../config/paths'; import { useBreadcrumbs } from '../../hooks/use_breadcrumbs'; import { useDatePickerContext } from '../../hooks/use_date_picker_context'; import { useFetcher } from '../../hooks/use_fetcher'; -import { useGetUserCasesPermissions } from '../../hooks/use_get_user_cases_permissions'; import { useGuidedSetupProgress } from '../../hooks/use_guided_setup_progress'; import { useHasData } from '../../hooks/use_has_data'; import { usePluginContext } from '../../hooks/use_plugin_context'; @@ -47,9 +45,6 @@ const ALERTS_TABLE_ID = 'xpack.observability.overview.alert.table'; export function OverviewPage() { const { - cases: { - ui: { getCasesContext }, - }, charts, http, triggersActionsUi: { @@ -78,9 +73,6 @@ export function OverviewPage() { const { trackMetric } = useOverviewMetrics({ hasAnyData }); - const CasesContext = getCasesContext(); - const userCasesPermissions = useGetUserCasesPermissions(); - const [isDataAssistantFlyoutVisible, setIsDataAssistantFlyoutVisible] = useState(false); const { isGuidedSetupProgressDismissed } = useGuidedSetupProgress(); @@ -201,31 +193,25 @@ export function OverviewPage() { initialIsOpen={hasAnyData} hasError={false} > - - - - + + diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx index d8a27dadf240f..23a3a15aa0573 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx @@ -103,9 +103,11 @@ export function ApmLatencyIndicatorTypeForm() { required: true, min: 0, }} - render={({ field: { ref, ...field } }) => ( + render={({ field: { ref, ...field }, fieldState }) => ( { + const isValid = await trigger(); + if (!isValid) { + return; + } + const values = getValues(); if (isEditMode) { @@ -107,82 +118,66 @@ export function SloEditForm({ slo }: Props) { } }; - const getIconColor = (isSectionValid: boolean) => - isSectionValid ? euiThemeVars.euiColorSuccess : euiThemeVars.euiColorPrimary; - return ( - - - } - > - - - - - } - verticalAlign="top" - > - - - - - } - > - - - - - {isEditMode - ? i18n.translate('xpack.observability.slo.sloEdit.editSloButton', { - defaultMessage: 'Update SLO', - }) - : i18n.translate('xpack.observability.slo.sloEdit.createSloButton', { - defaultMessage: 'Create SLO', - })} - - - navigateToUrl(basePath.prepend(paths.observability.slos))} - > - {i18n.translate('xpack.observability.slo.sloEdit.cancelButton', { - defaultMessage: 'Cancel', - })} - - - - + + , + status: isIndicatorSectionValid ? 'complete' : 'incomplete', + }, + { + title: i18n.translate('xpack.observability.slo.sloEdit.objectives.title', { + defaultMessage: 'Set objectives', + }), + children: showObjectiveSection ? : null, + status: showObjectiveSection && isObjectiveSectionValid ? 'complete' : 'incomplete', + }, + { + title: i18n.translate('xpack.observability.slo.sloEdit.description.title', { + defaultMessage: 'Describe SLO', + }), + children: showDescriptionSection ? : null, + status: + showDescriptionSection && isDescriptionSectionValid ? 'complete' : 'incomplete', + }, + ]} + /> + + + + {isEditMode + ? i18n.translate('xpack.observability.slo.sloEdit.editSloButton', { + defaultMessage: 'Update SLO', + }) + : i18n.translate('xpack.observability.slo.sloEdit.createSloButton', { + defaultMessage: 'Create SLO', + })} + + + navigateToUrl(basePath.prepend(paths.observability.slos))} + > + {i18n.translate('xpack.observability.slo.sloEdit.cancelButton', { + defaultMessage: 'Cancel', + })} + + + ); } diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_description_section.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_description_section.tsx index f558514acde74..6588a8e2ab278 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_description_section.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_description_section.tsx @@ -13,9 +13,7 @@ import { EuiFlexItem, EuiFormLabel, EuiPanel, - EuiSpacer, EuiTextArea, - EuiTitle, useGeneratedHtmlId, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -32,17 +30,13 @@ export function SloEditFormDescriptionSection() { const tagsId = useGeneratedHtmlId({ prefix: 'tags' }); return ( - - -

- {i18n.translate('xpack.observability.slo.sloEdit.description.title', { - defaultMessage: 'Describe SLO', - })} -

-
- - - + @@ -159,8 +153,6 @@ export function SloEditFormDescriptionSection() { /> - - ); } diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_indicator_section.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_indicator_section.tsx index fcec1c1add423..a3be5498009fe 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_indicator_section.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_indicator_section.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiFormLabel, EuiPanel, EuiSelect, EuiSpacer, EuiTitle } from '@elastic/eui'; +import { EuiFormLabel, EuiPanel, EuiSelect, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { CreateSLOInput } from '@kbn/slo-schema'; import React from 'react'; @@ -33,17 +33,13 @@ export function SloEditFormIndicatorSection() { }; return ( - - -

- {i18n.translate('xpack.observability.slo.sloEdit.definition.title', { - defaultMessage: 'Define SLI', - })} -

-
- - - + {i18n.translate('xpack.observability.slo.sloEdit.definition.sliType', { defaultMessage: 'Choose the SLI type', @@ -67,8 +63,6 @@ export function SloEditFormIndicatorSection() { {getIndicatorTypeForm()} - - ); } diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_objective_section.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_objective_section.tsx index 163c38f96bdc3..5460b48746909 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_objective_section.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_objective_section.tsx @@ -14,7 +14,6 @@ import { EuiPanel, EuiSelect, EuiSpacer, - EuiTitle, useGeneratedHtmlId, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -31,16 +30,13 @@ export function SloEditFormObjectiveSection() { const timeWindowSelect = useGeneratedHtmlId({ prefix: 'timeWindowSelect' }); return ( - - -

- {i18n.translate('xpack.observability.slo.sloEdit.objectives.title', { - defaultMessage: 'Set objectives', - })} -

-
- - + @@ -127,7 +123,6 @@ export function SloEditFormObjectiveSection() { ) : null} - ); } diff --git a/x-pack/plugins/observability/public/pages/slo_edit/constants.ts b/x-pack/plugins/observability/public/pages/slo_edit/constants.ts index 904950b709f5f..c3c1c0afb03a7 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/constants.ts +++ b/x-pack/plugins/observability/public/pages/slo_edit/constants.ts @@ -72,6 +72,6 @@ export const SLO_EDIT_FORM_DEFAULT_VALUES: CreateSLOInput = { tags: [], budgetingMethod: BUDGETING_METHOD_OPTIONS[0].value, objective: { - target: 99.5, + target: 99, }, }; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts b/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts index e79ea23464ece..9fd4ae2e8611e 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts +++ b/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts @@ -16,7 +16,8 @@ interface Props { } export function useSectionFormValidation({ getFieldState, getValues, formState, watch }: Props) { - let isIndicatorSectionValid: boolean; + let isIndicatorSectionValid: boolean = false; + switch (watch('indicator.type')) { case 'sli.kql.custom': isIndicatorSectionValid = @@ -27,8 +28,7 @@ export function useSectionFormValidation({ getFieldState, getValues, formState, 'indicator.params.good', 'indicator.params.total', ] as const - ).every((field) => !getFieldState(field, formState).invalid) && - getValues('indicator.params.index') !== ''; + ).every((field) => !getFieldState(field).invalid) && !!getValues('indicator.params.index'); break; case 'sli.apm.transactionDuration': isIndicatorSectionValid = @@ -41,9 +41,7 @@ export function useSectionFormValidation({ getFieldState, getValues, formState, 'indicator.params.threshold', ] as const ).every((field) => !getFieldState(field, formState).invalid && getValues(field) !== '') && - (['indicator.params.index'] as const).every( - (field) => !getFieldState(field, formState).invalid - ); + !getFieldState('indicator.params.index', formState).invalid; break; case 'sli.apm.transactionErrorRate': isIndicatorSectionValid = @@ -72,12 +70,12 @@ export function useSectionFormValidation({ getFieldState, getValues, formState, 'objective.timesliceTarget', 'objective.timesliceWindow', ] as const - ).every((field) => getFieldState(field, formState).error === undefined); + ).every((field) => getFieldState(field).error === undefined); const isDescriptionSectionValid = - !getFieldState('name', formState).invalid && + !getFieldState('name').invalid && getValues('name') !== '' && - !getFieldState('description', formState).invalid; + !getFieldState('description').invalid; return { isIndicatorSectionValid, diff --git a/x-pack/plugins/observability/public/pages/slo_edit/hooks/use_show_sections.test.tsx b/x-pack/plugins/observability/public/pages/slo_edit/hooks/use_show_sections.test.tsx new file mode 100644 index 0000000000000..d7b485e56b34d --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/hooks/use_show_sections.test.tsx @@ -0,0 +1,43 @@ +/* + * 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 { renderHook } from '@testing-library/react-hooks'; +import { useShowSections } from './use_show_sections'; + +describe('useShowSections', () => { + describe('in edit mode', () => { + it('shows both sections', () => { + const { result } = renderHook(() => useShowSections(true, false, true, true)); + + expect(result.current.showObjectiveSection).toBe(true); + expect(result.current.showDescriptionSection).toBe(true); + }); + }); + + describe('in create mode', () => { + it('shows no sections when indicator section is invalid', () => { + const { result } = renderHook(() => useShowSections(false, false, false, false)); + + expect(result.current.showObjectiveSection).toBe(false); + expect(result.current.showDescriptionSection).toBe(false); + }); + + it('shows the objective section when the indicator section is valid', () => { + const { result } = renderHook(() => useShowSections(false, false, true, false)); + + expect(result.current.showObjectiveSection).toBe(true); + expect(result.current.showDescriptionSection).toBe(false); + }); + + it('shows the description section when the indicator section and objective is valid', () => { + const { result } = renderHook(() => useShowSections(false, false, true, true)); + + expect(result.current.showObjectiveSection).toBe(true); + expect(result.current.showDescriptionSection).toBe(true); + }); + }); +}); diff --git a/x-pack/plugins/observability/public/pages/slo_edit/hooks/use_show_sections.ts b/x-pack/plugins/observability/public/pages/slo_edit/hooks/use_show_sections.ts new file mode 100644 index 0000000000000..c934b2c51ffbd --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/hooks/use_show_sections.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEffect, useState } from 'react'; + +export function useShowSections( + isEditMode: boolean, + isFormValidating: boolean, + isIndicatorSectionValid: boolean, + isObjectiveSectionValid: boolean +) { + const [showDescriptionSection, setShowDescriptionSection] = useState(isEditMode); + const [showObjectiveSection, setShowObjectiveSection] = useState(isEditMode); + + useEffect(() => { + if (!isFormValidating && !showObjectiveSection && isIndicatorSectionValid) { + setShowObjectiveSection(true); + } + }, [showObjectiveSection, isIndicatorSectionValid, isFormValidating]); + + useEffect(() => { + if ( + !isFormValidating && + !showDescriptionSection && + isIndicatorSectionValid && + isObjectiveSectionValid + ) { + setShowDescriptionSection(true); + } + }, [showDescriptionSection, isIndicatorSectionValid, isObjectiveSectionValid, isFormValidating]); + + return { showDescriptionSection, showObjectiveSection }; +} diff --git a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx index 26799288dea45..747929ae0994f 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.test.tsx @@ -19,7 +19,6 @@ import { useFetchSloDetails } from '../../hooks/slo/use_fetch_slo_details'; import { useCreateSlo } from '../../hooks/slo/use_create_slo'; import { useUpdateSlo } from '../../hooks/slo/use_update_slo'; import { kibanaStartMock } from '../../utils/kibana_react.mock'; -import { SLO_EDIT_FORM_DEFAULT_VALUES } from './constants'; import { buildSlo } from '../../data/slo/slo'; import { paths } from '../../config/paths'; import { SloEditPage } from './slo_edit'; @@ -183,44 +182,17 @@ describe('SLO Edit Page', () => { expect(screen.queryByTestId('slosEditPage')).toBeTruthy(); expect(screen.queryByTestId('sloForm')).toBeTruthy(); - expect(screen.queryByTestId('sloFormIndicatorTypeSelect')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.indicator.type - ); - + expect(screen.queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); + // Show default values from the kql indicator + expect(screen.queryByTestId('sloFormIndicatorTypeSelect')).toHaveValue('sli.kql.custom'); expect(screen.queryByTestId('indexSelectionSelectedValue')).toBeNull(); + expect(screen.queryByTestId('customKqlIndicatorFormQueryFilterInput')).toHaveValue(''); + expect(screen.queryByTestId('customKqlIndicatorFormGoodQueryInput')).toHaveValue(''); + expect(screen.queryByTestId('customKqlIndicatorFormTotalQueryInput')).toHaveValue(''); - expect(screen.queryByTestId('customKqlIndicatorFormQueryFilterInput')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.indicator.type === 'sli.kql.custom' - ? SLO_EDIT_FORM_DEFAULT_VALUES.indicator.params.filter - : '' - ); - expect(screen.queryByTestId('customKqlIndicatorFormGoodQueryInput')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.indicator.type === 'sli.kql.custom' - ? SLO_EDIT_FORM_DEFAULT_VALUES.indicator.params.good - : '' - ); - expect(screen.queryByTestId('customKqlIndicatorFormTotalQueryInput')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.indicator.type === 'sli.kql.custom' - ? SLO_EDIT_FORM_DEFAULT_VALUES.indicator.params.total - : '' - ); - - expect(screen.queryByTestId('sloFormBudgetingMethodSelect')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.budgetingMethod - ); - expect(screen.queryByTestId('sloFormTimeWindowDurationSelect')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.timeWindow.duration as any - ); - expect(screen.queryByTestId('sloFormObjectiveTargetInput')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.objective.target - ); - - expect(screen.queryByTestId('sloFormNameInput')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.name - ); - expect(screen.queryByTestId('sloFormDescriptionTextArea')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.description - ); + // other sections are hidden + expect(screen.queryByTestId('sloEditFormObjectiveSection')).toBeNull(); + expect(screen.queryByTestId('sloEditFormDescriptionSection')).toBeNull(); }); it.skip('calls the createSlo hook if all required values are filled in', async () => { @@ -262,9 +234,12 @@ describe('SLO Edit Page', () => { userEvent.type(screen.getByTestId('sloFormNameInput'), 'irrelevant'); userEvent.type(screen.getByTestId('sloFormDescriptionTextArea'), 'irrelevant'); - const t = Date.now(); - await waitFor(() => expect(screen.getByTestId('sloFormSubmitButton')).toBeEnabled()); - console.log('end waiting for submit button: ', Math.ceil(Date.now() - t)); + // all sections are visible + expect(screen.queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); + expect(screen.queryByTestId('sloEditFormObjectiveSection')).toBeTruthy(); + expect(screen.queryByTestId('sloEditFormDescriptionSection')).toBeTruthy(); + + expect(screen.getByTestId('sloFormSubmitButton')).toBeEnabled(); fireEvent.click(screen.getByTestId('sloFormSubmitButton')!); @@ -337,12 +312,15 @@ describe('SLO Edit Page', () => { expect(screen.queryByTestId('slosEditPage')).toBeTruthy(); expect(screen.queryByTestId('sloForm')).toBeTruthy(); - expect(screen.queryByTestId('sloFormIndicatorTypeSelect')).toHaveValue(slo.indicator.type); + // all sections are visible + expect(screen.queryByTestId('sloEditFormIndicatorSection')).toBeTruthy(); + expect(screen.queryByTestId('sloEditFormObjectiveSection')).toBeTruthy(); + expect(screen.queryByTestId('sloEditFormDescriptionSection')).toBeTruthy(); + expect(screen.queryByTestId('sloFormIndicatorTypeSelect')).toHaveValue(slo.indicator.type); expect(screen.queryByTestId('indexSelectionSelectedValue')).toHaveTextContent( slo.indicator.params.index! ); - expect(screen.queryByTestId('customKqlIndicatorFormQueryFilterInput')).toHaveValue( slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.filter : '' ); @@ -398,77 +376,10 @@ describe('SLO Edit Page', () => { render(); - await waitFor(() => expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled()); - + expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); fireEvent.click(screen.queryByTestId('sloFormSubmitButton')!); - expect(mockUpdate).toMatchInlineSnapshot(` - [MockFunction] { - "calls": Array [ - Array [ - Object { - "slo": Object { - "budgetingMethod": "occurrences", - "description": "some description useful", - "indicator": Object { - "params": Object { - "filter": "baz: foo and bar > 2", - "good": "http_status: 2xx", - "index": "some-index", - "timestampField": "custom_timestamp", - "total": "a query", - }, - "type": "sli.kql.custom", - }, - "name": "super important level service", - "objective": Object { - "target": 0.98, - }, - "settings": Object { - "frequency": "1m", - "syncDelay": "1m", - }, - "tags": Array [ - "k8s", - "production", - "critical", - ], - "timeWindow": Object { - "duration": "30d", - "isRolling": true, - }, - }, - "sloId": "123", - }, - ], - ], - "results": Array [ - Object { - "type": "return", - "value": undefined, - }, - ], - } - `); - }); - - it('blocks submitting if not all required values are filled in', async () => { - const slo = buildSlo(); - - jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); - - useFetchIndicesMock.mockReturnValue({ - isLoading: false, - indices: [], - }); - - useFetchSloMock.mockReturnValue({ isLoading: false, slo: { ...slo, name: '' } }); - - render(); - - await waitFor(() => { - expect(screen.queryByTestId('sloFormSubmitButton')).toBeDisabled(); - }); + expect(mockUpdate).toMatchInlineSnapshot(`[MockFunction]`); }); }); @@ -501,8 +412,9 @@ describe('SLO Edit Page', () => { render(); + expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); + await waitFor(() => { - expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); fireEvent.click(screen.getByTestId('sloFormSubmitButton')); }); @@ -537,8 +449,9 @@ describe('SLO Edit Page', () => { render(); + expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); + await waitFor(() => { - expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); fireEvent.click(screen.getByTestId('sloFormSubmitButton')); }); @@ -575,8 +488,9 @@ describe('SLO Edit Page', () => { render(); + expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); + await waitFor(() => { - expect(screen.queryByTestId('sloFormSubmitButton')).toBeEnabled(); fireEvent.click(screen.getByTestId('sloFormSubmitButton')); }); diff --git a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.tsx b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.tsx index 238ec6c29a576..438e6a78ded54 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/slo_edit.tsx @@ -38,7 +38,7 @@ export function SloEditPage() { }, ]); - const { slo, isLoading } = useFetchSloDetails(sloId || ''); + const { slo, isLoading } = useFetchSloDetails(sloId); if (hasRightLicense === false) { navigateToUrl(basePath.prepend(paths.observability.slos)); diff --git a/x-pack/plugins/observability/public/utils/kibana_react.mock.ts b/x-pack/plugins/observability/public/utils/kibana_react.mock.ts index 54de7f25f12d7..34721c988a2b2 100644 --- a/x-pack/plugins/observability/public/utils/kibana_react.mock.ts +++ b/x-pack/plugins/observability/public/utils/kibana_react.mock.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { casesPluginMock } from '@kbn/cases-plugin/public/mocks'; import { coreMock, notificationServiceMock, overlayServiceMock } from '@kbn/core/public/mocks'; import { observabilityPublicPluginsStartMock } from '../observability_public_plugins_start.mock'; @@ -17,6 +18,7 @@ export const kibanaStartMock = { ...coreMock.createStart(), ...observabilityPublicPluginsStartMock.createStart(), storage: coreMock.createStorage(), + cases: { ...casesPluginMock.createStartContract() }, }, }; }, 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 a5202fe9339b4..b15ac2c44a6dc 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 @@ -110,7 +110,7 @@ describe('ALL - Live Query', () => { cy.contains('ECS field is required.').should('not.exist'); checkResults(); - cy.react('Cell', { props: { columnIndex: 0 } }) + cy.react('Cell', { props: { colIndex: 0 } }) .should('exist') .first() .click(); diff --git a/x-pack/plugins/osquery/cypress/tasks/response_actions.ts b/x-pack/plugins/osquery/cypress/tasks/response_actions.ts index 4a5567238c8fd..5f8500b89837c 100644 --- a/x-pack/plugins/osquery/cypress/tasks/response_actions.ts +++ b/x-pack/plugins/osquery/cypress/tasks/response_actions.ts @@ -10,4 +10,4 @@ export const RESPONSE_ACTIONS_ITEM_1 = 'response-actions-list-item-1'; export const RESPONSE_ACTIONS_ITEM_2 = 'response-actions-list-item-2'; export const RESPONSE_ACTIONS_ITEM_3 = 'response-actions-list-item-3'; -export const OSQUERY_RESPONSE_ACTION_ADD_BUTTON = 'osquery-response-action-type-selection-option'; +export const OSQUERY_RESPONSE_ACTION_ADD_BUTTON = 'Osquery-response-action-type-selection-option'; diff --git a/x-pack/plugins/osquery/public/cases/add_to_cases_button.tsx b/x-pack/plugins/osquery/public/cases/add_to_cases_button.tsx index cbc3589df597c..0f06027af4325 100644 --- a/x-pack/plugins/osquery/public/cases/add_to_cases_button.tsx +++ b/x-pack/plugins/osquery/public/cases/add_to_cases_button.tsx @@ -60,7 +60,7 @@ export const AddToCaseButton: React.FC = ({ const casePermissions = cases.helpers.canUseCases(); const hasCasesPermissions = casePermissions.read && casePermissions.update && casePermissions.push; - const selectCaseModal = cases.hooks.getUseCasesAddToExistingCaseModal({}); + const selectCaseModal = cases.hooks.useCasesAddToExistingCaseModal(); const handleClick = useCallback(() => { const attachments: CaseAttachmentsWithoutOwner = [ diff --git a/x-pack/plugins/osquery/public/shared_components/osquery_results/test_utils.tsx b/x-pack/plugins/osquery/public/shared_components/osquery_results/test_utils.tsx index 262a68a0b259c..32a33055ba50a 100644 --- a/x-pack/plugins/osquery/public/shared_components/osquery_results/test_utils.tsx +++ b/x-pack/plugins/osquery/public/shared_components/osquery_results/test_utils.tsx @@ -58,7 +58,7 @@ export const getMockedKibanaConfig = (permissionType: unknown) => getCasesContext: jest.fn().mockImplementation(() => mockCasesContext), }, hooks: { - getUseCasesAddToExistingCaseModal: jest.fn(), + useCasesAddToExistingCaseModal: jest.fn(), }, }, data: { diff --git a/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts b/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts index 7c2cc7c2a02af..581c77670a153 100644 --- a/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts +++ b/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts @@ -163,6 +163,11 @@ it('matches snapshot', () => { "required": false, "type": "keyword", }, + "kibana.alert.rule.revision": Object { + "array": false, + "required": true, + "type": "long", + }, "kibana.alert.rule.rule_id": Object { "array": false, "required": false, diff --git a/x-pack/plugins/rule_registry/common/parse_technical_fields.test.ts b/x-pack/plugins/rule_registry/common/parse_technical_fields.test.ts index c7a90cb57ead5..faa1747cc2a9b 100644 --- a/x-pack/plugins/rule_registry/common/parse_technical_fields.test.ts +++ b/x-pack/plugins/rule_registry/common/parse_technical_fields.test.ts @@ -24,6 +24,7 @@ describe('parseTechnicalFields', () => { 'kibana.alert.rule.rule_type_id': ['metrics.alert.threshold'], 'event.action': ['active'], 'kibana.alert.rule.name': ['Uptime'], + 'kibana.alert.rule.revision': 0, 'kibana.alert.uuid': ['f31f5726-3c47-4c88-bc42-4e1fbde17e34'], 'kibana.space_ids': ['default'], 'kibana.version': ['8.1.0'], @@ -102,6 +103,7 @@ describe('parseTechnicalFields', () => { 'kibana.alert.rule.category': ['Metric threshold'], 'kibana.alert.rule.rule_type_id': ['metrics.alert.threshold'], 'kibana.alert.rule.name': ['Uptime'], + 'kibana.alert.rule.revision': 0, 'kibana.alert.uuid': ['f31f5726-3c47-4c88-bc42-4e1fbde17e34'], 'kibana.space_ids': ['default'], }; diff --git a/x-pack/plugins/rule_registry/common/schemas/8.8.0/index.ts b/x-pack/plugins/rule_registry/common/schemas/8.8.0/index.ts new file mode 100644 index 0000000000000..6ed240f589113 --- /dev/null +++ b/x-pack/plugins/rule_registry/common/schemas/8.8.0/index.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ALERT_RULE_REVISION } from '@kbn/rule-data-utils'; +import { CommonAlertFields870 } from '../8.7.0'; + +/* DO NOT MODIFY THIS SCHEMA TO ADD NEW FIELDS. These types represent the alerts that shipped in 8.8.0. +Any changes to these types should be bug fixes so the types more accurately represent the alerts from 8.8.0. + +If you are adding new fields for a new release of Kibana, create a new sibling folder to this one +for the version to be released and add the field(s) to the schema in that folder. + +Then, update `../index.ts` to import from the new folder that has the latest schemas, add the +new schemas to the union of all alert schemas, and re-export the new schemas as the `*Latest` schemas. +*/ + +export interface RevisionField880 { + [ALERT_RULE_REVISION]: number; +} + +export type CommonAlertFields880 = CommonAlertFields870 & RevisionField880; + +export type CommonAlertFieldName880 = keyof CommonAlertFields880; + +export type AlertWithCommonFields880 = T & CommonAlertFields880; diff --git a/x-pack/plugins/rule_registry/common/schemas/index.ts b/x-pack/plugins/rule_registry/common/schemas/index.ts index 9a19794b6c4ce..95b0bf6914aaf 100644 --- a/x-pack/plugins/rule_registry/common/schemas/index.ts +++ b/x-pack/plugins/rule_registry/common/schemas/index.ts @@ -6,19 +6,22 @@ */ import type { - CommonAlertFieldName870, + AlertWithSuppressionFields870, + SuppressionFields870, CommonAlertIdFieldName870, - CommonAlertFields870, - AlertWithCommonFields870, } from './8.7.0'; -import type { AlertWithSuppressionFields870, SuppressionFields870 } from './8.7.0'; +import type { + AlertWithCommonFields880, + CommonAlertFieldName880, + CommonAlertFields880, +} from './8.8.0'; export type { AlertWithSuppressionFields870 as AlertWithSuppressionFieldsLatest, SuppressionFields870 as SuppressionFieldsLatest, - CommonAlertFieldName870 as CommonAlertFieldNameLatest, + CommonAlertFieldName880 as CommonAlertFieldNameLatest, CommonAlertIdFieldName870 as CommonAlertIdFieldNameLatest, - CommonAlertFields870 as CommonAlertFieldsLatest, - AlertWithCommonFields870 as AlertWithCommonFieldsLatest, + CommonAlertFields880 as CommonAlertFieldsLatest, + AlertWithCommonFields880 as AlertWithCommonFieldsLatest, }; diff --git a/x-pack/plugins/rule_registry/server/routes/get_alert_by_id.test.ts b/x-pack/plugins/rule_registry/server/routes/get_alert_by_id.test.ts index d6485eea8e89d..809a5167870a1 100644 --- a/x-pack/plugins/rule_registry/server/routes/get_alert_by_id.test.ts +++ b/x-pack/plugins/rule_registry/server/routes/get_alert_by_id.test.ts @@ -11,6 +11,7 @@ import { ALERT_RULE_CONSUMER, ALERT_RULE_NAME, ALERT_RULE_PRODUCER, + ALERT_RULE_REVISION, ALERT_RISK_SCORE, ALERT_RULE_TYPE_ID, ALERT_RULE_UUID, @@ -36,6 +37,7 @@ const getMockAlert = (): ParsedTechnicalFields & ParsedExperimentalFields => ({ [ALERT_RULE_CONSUMER]: 'apm', [ALERT_RULE_NAME]: 'Check error rate', [ALERT_RULE_PRODUCER]: 'apm', + [ALERT_RULE_REVISION]: 0, [ALERT_RISK_SCORE]: 20, [ALERT_RULE_TYPE_ID]: 'fake-rule-type-id', [ALERT_RULE_UUID]: 'fake-rule-uuid', diff --git a/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.test.ts b/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.test.ts index e8e6fb3426559..6fff547ea4d1b 100644 --- a/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.test.ts +++ b/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.test.ts @@ -100,10 +100,33 @@ describe('RuleDataClient', () => { expect(scopedClusterClient.search).toHaveBeenCalledWith({ body: query, + ignore_unavailable: true, index: `.alerts-observability.apm.alerts*`, }); }); + test('getReader searchs an index pattern without a wildcard when the namespace is provided', async () => { + const ruleDataClient = new RuleDataClient( + getRuleDataClientOptions({ + waitUntilReadyForReading: new Promise((resolve) => + setTimeout(resolve, 3000, right(scopedClusterClient)) + ), + }) + ); + + const query = { query: { bool: { filter: { range: { '@timestamp': { gte: 0 } } } } } }; + const reader = ruleDataClient.getReader({ namespace: 'test' }); + await reader.search({ + body: query, + }); + + expect(scopedClusterClient.search).toHaveBeenCalledWith({ + body: query, + ignore_unavailable: true, + index: `.alerts-observability.apm.alerts-test`, + }); + }); + test('re-throws error when search throws error', async () => { scopedClusterClient.search.mockRejectedValueOnce(new Error('something went wrong!')); const ruleDataClient = new RuleDataClient(getRuleDataClientOptions({})); diff --git a/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.ts b/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.ts index 09f14fffeafb2..5a652a316cc10 100644 --- a/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.ts +++ b/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.ts @@ -117,6 +117,7 @@ export class RuleDataClient implements IRuleDataClient { return (await clusterClient.search({ ...request, index: indexPattern, + ignore_unavailable: true, })) as unknown as ESSearchResponse; } catch (err) { this.options.logger.error(`Error performing search in RuleDataClient - ${err.message}`); diff --git a/x-pack/plugins/rule_registry/server/rule_data_plugin_service/index_info.ts b/x-pack/plugins/rule_registry/server/rule_data_plugin_service/index_info.ts index eca44c550411f..5258c9b6fdb02 100644 --- a/x-pack/plugins/rule_registry/server/rule_data_plugin_service/index_info.ts +++ b/x-pack/plugins/rule_registry/server/rule_data_plugin_service/index_info.ts @@ -114,10 +114,10 @@ export class IndexInfo { * - include nested registration contexts eagerly * - e.g. if baseName='.alerts-observability', include '.alerts-observability.apm' * - * @example '.alerts-security.alerts-default*', '.alerts-security.alerts*' + * @example '.alerts-security.alerts-default', '.alerts-security.alerts*' */ public getPatternForReading(namespace?: string): string { - return `${joinWithDash(this.baseName, namespace)}*`; + return namespace ? `${joinWithDash(this.baseName, namespace)}` : `${this.baseName}*`; } /** diff --git a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts index 7b312ccf5cef2..787fd17c3d74f 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts @@ -115,6 +115,7 @@ function createRule(shouldWriteAlerts: boolean = true) { name: 'name', notifyWhen: 'onActionGroupChange', producer: 'producer', + revision: 0, ruleTypeId: 'ruleTypeId', ruleTypeName: 'ruleTypeName', schedule: { @@ -255,6 +256,7 @@ describe('createLifecycleRuleTypeFactory', () => { "threshold": 1, }, "kibana.alert.rule.producer": "producer", + "kibana.alert.rule.revision": 0, "kibana.alert.rule.rule_type_id": "ruleTypeId", "kibana.alert.rule.tags": Array [ "tags", @@ -291,6 +293,7 @@ describe('createLifecycleRuleTypeFactory', () => { "threshold": 1, }, "kibana.alert.rule.producer": "producer", + "kibana.alert.rule.revision": 0, "kibana.alert.rule.rule_type_id": "ruleTypeId", "kibana.alert.rule.tags": Array [ "tags", diff --git a/x-pack/plugins/rule_registry/server/utils/get_common_alert_fields.ts b/x-pack/plugins/rule_registry/server/utils/get_common_alert_fields.ts index 5d7d105571c84..477fe83352693 100644 --- a/x-pack/plugins/rule_registry/server/utils/get_common_alert_fields.ts +++ b/x-pack/plugins/rule_registry/server/utils/get_common_alert_fields.ts @@ -17,6 +17,7 @@ import { ALERT_RULE_TAGS, TIMESTAMP, ALERT_RULE_PARAMETERS, + ALERT_RULE_REVISION, } from '@kbn/rule-data-utils'; import { RuleExecutorOptions } from '@kbn/alerting-plugin/server'; @@ -32,6 +33,7 @@ export const getCommonAlertFields = ( [ALERT_RULE_EXECUTION_UUID]: options.executionId, [ALERT_RULE_NAME]: options.rule.name, [ALERT_RULE_PRODUCER]: options.rule.producer, + [ALERT_RULE_REVISION]: options.rule.revision, [ALERT_RULE_TYPE_ID]: options.rule.ruleTypeId, [ALERT_RULE_UUID]: options.rule.id, [SPACE_IDS]: [options.spaceId], diff --git a/x-pack/plugins/rule_registry/server/utils/rule_executor.test_helpers.ts b/x-pack/plugins/rule_registry/server/utils/rule_executor.test_helpers.ts index 9e22d49ef135b..58b370847de5f 100644 --- a/x-pack/plugins/rule_registry/server/utils/rule_executor.test_helpers.ts +++ b/x-pack/plugins/rule_registry/server/utils/rule_executor.test_helpers.ts @@ -66,6 +66,7 @@ export const createDefaultAlertExecutorOptions = < createdAt, updatedAt, notifyWhen: null, + revision: 0, ruleTypeId: 'RULE_TYPE_ID', ruleTypeName: 'RULE_TYPE_NAME', muteAll: false, diff --git a/x-pack/plugins/security_solution/common/endpoint/data_loaders/setup_fleet_for_endpoint.ts b/x-pack/plugins/security_solution/common/endpoint/data_loaders/setup_fleet_for_endpoint.ts index 3495212a31f00..02372aa25b114 100644 --- a/x-pack/plugins/security_solution/common/endpoint/data_loaders/setup_fleet_for_endpoint.ts +++ b/x-pack/plugins/security_solution/common/endpoint/data_loaders/setup_fleet_for_endpoint.ts @@ -24,9 +24,7 @@ export interface SetupFleetForEndpointResponse { * Calls the fleet setup APIs and then installs the latest Endpoint package * @param kbnClient */ -export const setupFleetForEndpoint = async ( - kbnClient: KbnClient -): Promise => { +export const setupFleetForEndpoint = async (kbnClient: KbnClient): Promise => { // We try to use the kbnClient **private** logger, bug if unable to access it, then just use console // @ts-expect-error TS2341 const log = kbnClient.log ? kbnClient.log : console; @@ -66,18 +64,6 @@ export const setupFleetForEndpoint = async ( log.error(error); throw error; } - - // Install/upgrade the endpoint package - let endpointPackage: BulkInstallPackageInfo; - - try { - endpointPackage = await installOrUpgradeEndpointFleetPackage(kbnClient); - } catch (error) { - log.error(error); - throw error; - } - - return { endpointPackage }; }; /** diff --git a/x-pack/plugins/security_solution/common/endpoint/index_data.ts b/x-pack/plugins/security_solution/common/endpoint/index_data.ts index 454f945ca656a..24431871c09e6 100644 --- a/x-pack/plugins/security_solution/common/endpoint/index_data.ts +++ b/x-pack/plugins/security_solution/common/endpoint/index_data.ts @@ -8,9 +8,7 @@ import type { Client } from '@elastic/elasticsearch'; import seedrandom from 'seedrandom'; import type { KbnClient } from '@kbn/test'; -import type { AxiosResponse } from 'axios'; -import type { CreatePackagePolicyResponse, GetInfoResponse } from '@kbn/fleet-plugin/common'; -import { epmRouteService } from '@kbn/fleet-plugin/common'; +import type { CreatePackagePolicyResponse } from '@kbn/fleet-plugin/common'; import type { TreeOptions } from './generate_data'; import { EndpointDocGenerator } from './generate_data'; import type { @@ -25,6 +23,12 @@ import { enableFleetServerIfNecessary } from './data_loaders/index_fleet_server' import { indexAlerts } from './data_loaders/index_alerts'; import { setupFleetForEndpoint } from './data_loaders/setup_fleet_for_endpoint'; import { mergeAndAppendArrays } from './data_loaders/utils'; +import { + waitForMetadataTransformsReady, + stopMetadataTransforms, + startMetadataTransforms, +} from './utils/transforms'; +import { getEndpointPackageInfo } from './utils/package'; export type IndexedHostsAndAlertsResponse = IndexedHostsResponse; @@ -58,7 +62,8 @@ export async function indexHostsAndAlerts( alertsPerHost: number, fleet: boolean, options: TreeOptions = {}, - DocGenerator: typeof EndpointDocGenerator = EndpointDocGenerator + DocGenerator: typeof EndpointDocGenerator = EndpointDocGenerator, + startTransform = true ): Promise { const random = seedrandom(seed); const epmEndpointPackage = await getEndpointPackageInfo(kbnClient); @@ -92,6 +97,9 @@ export async function indexHostsAndAlerts( // Keep a map of host applied policy ids (fake) to real ingest package configs (policy record) const realPolicies: Record = {}; + await waitForMetadataTransformsReady(client); + await stopMetadataTransforms(client); + for (let i = 0; i < numHosts; i++) { const generator = new DocGenerator(random); const indexedHosts = await indexEndpointHostDocs({ @@ -118,26 +126,15 @@ export async function indexHostsAndAlerts( }); } - return response; -} - -export const getEndpointPackageInfo = async ( - kbnClient: KbnClient -): Promise => { - const path = epmRouteService.getInfoPath('endpoint'); - const endpointPackage = ( - (await kbnClient.request({ - path, - method: 'GET', - })) as AxiosResponse - ).data.item; - - if (!endpointPackage) { - throw new Error('EPM Endpoint package was not found!'); + if (startTransform) { + await startMetadataTransforms( + client, + response.agents.map((agent) => agent.id) + ); } - return endpointPackage; -}; + return response; +} export type DeleteIndexedHostsAndAlertsResponse = DeleteIndexedEndpointHostsResponse; diff --git a/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts b/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts index bc58af2ae011e..b304dcd819d8b 100644 --- a/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts +++ b/x-pack/plugins/security_solution/common/endpoint/service/response_actions/constants.ts @@ -76,6 +76,6 @@ export const commandToRBACMap: Record => { + const path = epmRouteService.getInfoPath('endpoint'); + const endpointPackage = ( + (await kbnClient.request({ + path, + method: 'GET', + })) as AxiosResponse + ).data.item; + + if (!endpointPackage) { + throw new Error('EPM Endpoint package was not found!'); + } + + return endpointPackage; +}; diff --git a/x-pack/plugins/security_solution/common/endpoint/utils/transforms.ts b/x-pack/plugins/security_solution/common/endpoint/utils/transforms.ts new file mode 100644 index 0000000000000..32a36ee7c5593 --- /dev/null +++ b/x-pack/plugins/security_solution/common/endpoint/utils/transforms.ts @@ -0,0 +1,157 @@ +/* + * 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 { Client } from '@elastic/elasticsearch'; +import type { TransformGetTransformStatsTransformStats } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +import { + metadataCurrentIndexPattern, + metadataTransformPrefix, + METADATA_TRANSFORMS_PATTERN, + METADATA_UNITED_TRANSFORM, +} from '../constants'; + +export async function waitForMetadataTransformsReady(esClient: Client): Promise { + await waitFor( + () => areMetadataTransformsReady(esClient), + 'failed while waiting for transform to start' + ); +} + +export async function stopMetadataTransforms(esClient: Client): Promise { + const transformIds = await getMetadataTransformIds(esClient); + + await Promise.all( + transformIds.map((transformId) => + esClient.transform.stopTransform({ + transform_id: transformId, + force: true, + wait_for_completion: true, + allow_no_match: true, + }) + ) + ); +} + +export async function startMetadataTransforms( + esClient: Client, + // agentIds to wait for + agentIds?: string[] +): Promise { + const transformIds = await getMetadataTransformIds(esClient); + const currentTransformId = transformIds.find((transformId) => + transformId.startsWith(metadataTransformPrefix) + ); + const unitedTransformId = transformIds.find((transformId) => + transformId.startsWith(METADATA_UNITED_TRANSFORM) + ); + if (!currentTransformId || !unitedTransformId) { + throw new Error('failed to start metadata transforms, transforms not found'); + } + + try { + await esClient.transform.startTransform({ + transform_id: currentTransformId, + }); + } catch (err) { + // ignore if transform already started + if (err.statusCode !== 409) { + throw err; + } + } + + await waitForCurrentMetdataDocs(esClient, agentIds); + + try { + await esClient.transform.startTransform({ + transform_id: unitedTransformId, + }); + } catch (err) { + // ignore if transform already started + if (err.statusCode !== 409) { + throw err; + } + } +} + +async function getMetadataTransformStats( + esClient: Client +): Promise { + return ( + await esClient.transform.getTransformStats({ + transform_id: METADATA_TRANSFORMS_PATTERN, + allow_no_match: true, + }) + ).transforms; +} + +async function getMetadataTransformIds(esClient: Client): Promise { + return (await getMetadataTransformStats(esClient)).map((transform) => transform.id); +} + +async function areMetadataTransformsReady(esClient: Client): Promise { + const transforms = await getMetadataTransformStats(esClient); + return !transforms.some( + // TODO TransformGetTransformStatsTransformStats type needs to be updated to include health + (transform: TransformGetTransformStatsTransformStats & { health?: { status: string } }) => + transform?.health?.status !== 'green' + ); +} + +async function waitForCurrentMetdataDocs(esClient: Client, agentIds?: string[]) { + const query = agentIds?.length + ? { + bool: { + filter: [ + { + terms: { + 'agent.id': agentIds, + }, + }, + ], + }, + } + : { + size: 1, + query: { + match_all: {}, + }, + }; + const size = agentIds?.length ? agentIds.length : 1; + await waitFor( + async () => + ( + await esClient.search({ + index: metadataCurrentIndexPattern, + query, + size, + rest_total_hits_as_int: true, + }) + ).hits.total === size, + 'failed while waiting for current metadata docs to populate' + ); +} + +async function waitFor( + cb: () => Promise, + errorMessage: string, + interval: number = 20000, + maxAttempts = 5 +): Promise { + let attempts = 0; + let isReady = false; + + while (!isReady) { + await new Promise((res) => setTimeout(() => res(''), interval)); + isReady = await cb(); + attempts++; + + if (attempts > maxAttempts) { + throw new Error(errorMessage); + } + } +} diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.cy.ts new file mode 100644 index 0000000000000..d73ae98dacd70 --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_left_panel_analyzer_graph_tab.cy.ts @@ -0,0 +1,44 @@ +/* + * 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 { ANALYZER_NODE } from '../../../screens/alerts'; +import { DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_GRAPH_ANALYZER_CONTENT } from '../../../screens/document_expandable_flyout'; +import { + expandFirstAlertExpandableFlyout, + openGraphAnalyzer, + expandDocumentDetailsExpandableFlyoutLeftSection, +} from '../../../tasks/document_expandable_flyout'; +import { cleanKibana } from '../../../tasks/common'; +import { login, visit } from '../../../tasks/login'; +import { createRule } from '../../../tasks/api_calls/rules'; +import { getNewRule } from '../../../objects/rule'; +import { ALERTS_URL } from '../../../urls/navigation'; +import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; + +// Skipping these for now as the feature is protected behind a feature flag set to false by default +// To run the tests locally, add 'securityFlyoutEnabled' in the Cypress config.ts here https://github.com/elastic/kibana/blob/main/x-pack/test/security_solution_cypress/config.ts#L50 +describe.skip( + 'Alert details expandable flyout left panel analyzer graph', + { testIsolation: false }, + () => { + before(() => { + cleanKibana(); + login(); + createRule(getNewRule()); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + expandFirstAlertExpandableFlyout(); + expandDocumentDetailsExpandableFlyoutLeftSection(); + openGraphAnalyzer(); + }); + + it('should display analyzer graph and node list', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_VISUALIZE_TAB_GRAPH_ANALYZER_CONTENT).should('be.visible'); + cy.get(ANALYZER_NODE).first().should('be.visible'); + }); + } +); diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_right_panel_header.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_right_panel_header.cy.ts new file mode 100644 index 0000000000000..bf790b15ecd8e --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_right_panel_header.cy.ts @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { upperFirst } from 'lodash'; +import { + DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_RISK_SCORE, + DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_RISK_SCORE_VALUE, + DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_SEVERITY, + DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_SEVERITY_VALUE, + DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_TITLE, +} from '../../../screens/document_expandable_flyout'; +import { expandFirstAlertExpandableFlyout } from '../../../tasks/document_expandable_flyout'; +import { cleanKibana } from '../../../tasks/common'; +import { login, visit } from '../../../tasks/login'; +import { createRule } from '../../../tasks/api_calls/rules'; +import { getNewRule } from '../../../objects/rule'; +import { ALERTS_URL } from '../../../urls/navigation'; +import { waitForAlertsToPopulate } from '../../../tasks/create_new_rule'; + +// Skipping these for now as the feature is protected behind a feature flag set to false by default +// To run the tests locally, add 'securityFlyoutEnabled' in the Cypress config.ts here https://github.com/elastic/kibana/blob/main/x-pack/test/security_solution_cypress/config.ts#L50 +describe.skip( + 'Alert details expandable flyout right panel header', + { testIsolation: false }, + () => { + const rule = getNewRule(); + + before(() => { + cleanKibana(); + login(); + createRule(rule); + visit(ALERTS_URL); + waitForAlertsToPopulate(); + expandFirstAlertExpandableFlyout(); + }); + + it('should display correct title in header', () => { + cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_TITLE) + .should('be.visible') + .and('have.text', rule.name); + }); + + it('should display risk score in header', () => { + cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_RISK_SCORE).should('be.visible'); + cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_RISK_SCORE_VALUE) + .should('be.visible') + .and('have.text', rule.risk_score); + }); + + it('should display severity in header', () => { + cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_SEVERITY).should('be.visible'); + cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_SEVERITY_VALUE) + .should('be.visible') + .and('have.text', upperFirst(rule.severity)); + }); + } +); diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts index 1fc306b3d4ad4..06242709b52cc 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/expandable_flyout/alert_details_right_panel_overview_tab.cy.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { upperFirst } from 'lodash'; import { DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_DETAILS, DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_TITLE, @@ -16,15 +15,18 @@ import { DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS, DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_EXPAND_ICON, DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_TITLE, - DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_RISK_SCORE, - DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_RISK_SCORE_VALUE, - DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_SEVERITY, - DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_SEVERITY_VALUE, - DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_TITLE, + DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_SECTION_HEADER, + DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_SECTION_CONTENT, + DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_TITLE, + DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_TITLE, + DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_DETAILS, + DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_EXPAND_BUTTON, + DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_DETAILS, } from '../../../screens/document_expandable_flyout'; import { expandFirstAlertExpandableFlyout, openOverviewTab, + toggleOverviewTabDescriptionSection, } from '../../../tasks/document_expandable_flyout'; import { cleanKibana } from '../../../tasks/common'; import { login, visit } from '../../../tasks/login'; @@ -51,74 +53,105 @@ describe.skip( openOverviewTab(); }); - it('should display correct title in header', () => { - cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_TITLE) - .should('be.visible') - .and('have.text', rule.name); - }); - - it('should display risk score in header', () => { - cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_RISK_SCORE).should('be.visible'); - cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_RISK_SCORE_VALUE) - .should('be.visible') - .and('have.text', rule.risk_score); - }); - - it('should display severity in header', () => { - cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_SEVERITY).should('be.visible'); - cy.get(DOCUMENT_DETAILS_OVERVIEW_TAB_HEADER_SEVERITY_VALUE) - .should('be.visible') - .and('have.text', upperFirst(rule.severity)); - }); - - it('should display mitre attack', () => { - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_TITLE) - .should('be.visible') - // @ts-ignore - .and('contain.text', rule.threat[0].framework); - - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_DETAILS) - .should('be.visible') - // @ts-ignore - .and('contain.text', rule.threat[0].technique[0].name) - // @ts-ignore - .and('contain.text', rule.threat[0].tactic.name); - }); + describe('description section', () => { + it('should display description section header and content', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_SECTION_HEADER) + .should('be.visible') + .and('have.text', 'Description'); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_SECTION_CONTENT).should( + 'be.visible' + ); + }); - it('should display highlighted fields', () => { - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS).within(() => { - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_EXPAND_ICON) + it('should display document description and expand button', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_TITLE) .should('be.visible') - .click(); - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_TITLE) + .and('have.text', 'Rule description'); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_DETAILS) .should('be.visible') - .and('have.text', 'Highlighted fields'); - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_DETAILS).should( - 'be.visible' + .and('have.text', rule.description); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_EXPAND_BUTTON) + .should('be.visible') + .and('have.text', 'Expand'); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_EXPAND_BUTTON).click(); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_EXPAND_BUTTON).should( + 'have.text', + 'Collapse' ); + }); - // close highlighted fields to reset the view for next test - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_EXPAND_ICON) + it('should display reason', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_TITLE) + .should('be.visible') + .and('have.text', 'Alert reason'); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_DETAILS) .should('be.visible') - .click(); + .and('contain.text', rule.name); }); - }); - it('should navigate to table tab when clicking on highlighted fields view button', () => { - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS).within(() => { - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_EXPAND_ICON) + it('should display mitre attack', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_TITLE).should('be.visible'); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_DETAILS).should('be.visible'); + }); + + it('should display mitre attack', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_TITLE) .should('be.visible') - .click(); - cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_GO_TO_TABLE_LINK) + // @ts-ignore + .and('contain.text', rule.threat[0].framework); + + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_DETAILS) .should('be.visible') - .click(); + // @ts-ignore + .and('contain.text', rule.threat[0].technique[0].name) + // @ts-ignore + .and('contain.text', rule.threat[0].tactic.name); }); + }); - // the table component is rendered within a dom element with overflow, so Cypress isn't finding it - // this next line is a hack that scrolls to a specific element in the table - // (in the middle of it vertically) to ensure Cypress finds it - cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_EVENT_TYPE_ROW).scrollIntoView(); - cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_CONTENT).should('be.visible'); + describe('investigation section', () => { + before(() => { + toggleOverviewTabDescriptionSection(); + }); + + it('should display highlighted fields', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS) + .scrollIntoView() + .within(() => { + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_EXPAND_ICON) + .should('be.visible') + .click(); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_TITLE) + .should('be.visible') + .and('have.text', 'Highlighted fields'); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_DETAILS).should( + 'be.visible' + ); + + // close highlighted fields to reset the view for next test + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_EXPAND_ICON) + .should('be.visible') + .click(); + }); + }); + it('should navigate to table tab when clicking on highlighted fields view button', () => { + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS) + .scrollIntoView() + .within(() => { + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_HEADER_EXPAND_ICON) + .should('be.visible') + .click(); + cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_HIGHLIGHTED_FIELDS_GO_TO_TABLE_LINK) + .should('be.visible') + .click(); + }); + + // the table component is rendered within a dom element with overflow, so Cypress isn't finding it + // this next line is a hack that scrolls to a specific element in the table + // (in the middle of it vertically) to ensure Cypress finds it + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_EVENT_TYPE_ROW).scrollIntoView(); + cy.get(DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_CONTENT).should('be.visible'); + }); }); } ); diff --git a/x-pack/plugins/security_solution/cypress/screens/document_expandable_flyout.ts b/x-pack/plugins/security_solution/cypress/screens/document_expandable_flyout.ts index e9936a88e6e04..6c567e109bb40 100644 --- a/x-pack/plugins/security_solution/cypress/screens/document_expandable_flyout.ts +++ b/x-pack/plugins/security_solution/cypress/screens/document_expandable_flyout.ts @@ -35,6 +35,11 @@ import { } from '../../public/flyout/right/tabs/test_ids'; import { COLLAPSE_DETAILS_BUTTON_TEST_ID, + DESCRIPTION_DETAILS_TEST_ID, + DESCRIPTION_EXPAND_BUTTON_TEST_ID, + DESCRIPTION_SECTION_CONTENT_TEST_ID, + DESCRIPTION_SECTION_HEADER_TEST_ID, + DESCRIPTION_TITLE_TEST_ID, EXPAND_DETAILS_BUTTON_TEST_ID, FLYOUT_HEADER_RISK_SCORE_TITLE_TEST_ID, FLYOUT_HEADER_RISK_SCORE_VALUE_TEST_ID, @@ -48,6 +53,8 @@ import { HIGHLIGHTED_FIELDS_TEST_ID, MITRE_ATTACK_DETAILS_TEST_ID, MITRE_ATTACK_TITLE_TEST_ID, + REASON_DETAILS_TEST_ID, + REASON_TITLE_TEST_ID, } from '../../public/flyout/right/components/test_ids'; import { getClassSelector, getDataTestSubjectSelector } from '../helpers/common'; @@ -106,6 +113,21 @@ export const DOCUMENT_DETAILS_FLYOUT_HISTORY_TAB_CONTENT = getDataTestSubjectSel /* Overview tab */ +export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_SECTION_HEADER = + getDataTestSubjectSelector(DESCRIPTION_SECTION_HEADER_TEST_ID); +export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_SECTION_CONTENT = + getDataTestSubjectSelector(DESCRIPTION_SECTION_CONTENT_TEST_ID); +export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_TITLE = + getDataTestSubjectSelector(DESCRIPTION_TITLE_TEST_ID); +export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_DETAILS = getDataTestSubjectSelector( + DESCRIPTION_DETAILS_TEST_ID +); +export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_EXPAND_BUTTON = + getDataTestSubjectSelector(DESCRIPTION_EXPAND_BUTTON_TEST_ID); +export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_TITLE = + getDataTestSubjectSelector(REASON_TITLE_TEST_ID); +export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_REASON_DETAILS = + getDataTestSubjectSelector(REASON_DETAILS_TEST_ID); export const DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_MITRE_ATTACK_TITLE = getDataTestSubjectSelector( MITRE_ATTACK_TITLE_TEST_ID ); diff --git a/x-pack/plugins/security_solution/cypress/tasks/document_expandable_flyout.ts b/x-pack/plugins/security_solution/cypress/tasks/document_expandable_flyout.ts index e66d1117c6603..7c25557fea42a 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/document_expandable_flyout.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/document_expandable_flyout.ts @@ -14,6 +14,7 @@ import { DOCUMENT_DETAILS_FLYOUT_INVESTIGATIONS_TAB, DOCUMENT_DETAILS_FLYOUT_JSON_TAB, DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB, + DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_SECTION_HEADER, DOCUMENT_DETAILS_FLYOUT_TABLE_TAB, DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_CLEAR_FILTER, DOCUMENT_DETAILS_FLYOUT_TABLE_TAB_FILTER, @@ -60,6 +61,15 @@ export const scrollWithinDocumentDetailsExpandableFlyoutRightSection = (x: numbe export const openOverviewTab = () => cy.get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB).should('be.visible').click(); +/** + * Toggle the Overview tab description section in the document details expandable flyout right section + */ +export const toggleOverviewTabDescriptionSection = () => + cy + .get(DOCUMENT_DETAILS_FLYOUT_OVERVIEW_TAB_DESCRIPTION_SECTION_HEADER) + .should('be.visible') + .click(); + /** * Open the Table tab in the document details expandable flyout right section */ diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/actions.test.tsx b/x-pack/plugins/security_solution/public/common/components/visualization_actions/actions.test.tsx index 51bcef5b17051..924f3ea80dcca 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/actions.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/actions.test.tsx @@ -87,10 +87,10 @@ describe('VisualizationActions', () => { cases: { ...mockCasesContract(), hooks: { - getUseCasesAddToExistingCaseModal: jest + useCasesAddToExistingCaseModal: jest .fn() .mockReturnValue({ open: mockGetAllCasesSelectorModalOpen }), - getUseCasesAddToNewCaseFlyout: jest + useCasesAddToNewCaseFlyout: jest .fn() .mockReturnValue({ open: mockGetCreateCaseFlyoutOpen }), }, diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_existing_case.test.tsx b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_existing_case.test.tsx index 6204f77909f65..992684f8a24b7 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_existing_case.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_existing_case.test.tsx @@ -30,7 +30,7 @@ jest.mock('../../lib/kibana', () => { ...mockedUseKibana.services, cases: { hooks: { - getUseCasesAddToExistingCaseModal: mockGetUseCasesAddToExistingCaseModal, + useCasesAddToExistingCaseModal: mockGetUseCasesAddToExistingCaseModal, }, }, }, @@ -49,7 +49,7 @@ describe('useAddToExistingCase', () => { (useGetUserCasesPermissions as jest.Mock).mockReturnValue(allCasesPermissions()); }); - it('getUseCasesAddToExistingCaseModal with attachments', () => { + it('useCasesAddToExistingCaseModal with attachments', () => { const { result } = renderHook(() => useAddToExistingCase({ lensAttributes: kpiHostMetricLensAttributes, diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_existing_case.tsx b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_existing_case.tsx index 059b1cfd660c6..9e537af194684 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_existing_case.tsx +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_existing_case.tsx @@ -35,7 +35,7 @@ export const useAddToExistingCase = ({ ]; }, [lensAttributes, timeRange]); - const selectCaseModal = cases.hooks.getUseCasesAddToExistingCaseModal({ + const selectCaseModal = cases.hooks.useCasesAddToExistingCaseModal({ onClose: onAddToCaseClicked, toastContent: ADD_TO_CASE_SUCCESS, }); diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_new_case.test.tsx b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_new_case.test.tsx index 6491a8ce911b1..d05743049d2c2 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_new_case.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_new_case.test.tsx @@ -32,7 +32,7 @@ jest.mock('../../lib/kibana', () => { ...mockedUseKibana.services, cases: { hooks: { - getUseCasesAddToNewCaseFlyout: mockGetUseCasesAddToNewCaseFlyout, + useCasesAddToNewCaseFlyout: mockGetUseCasesAddToNewCaseFlyout, }, }, }, @@ -49,7 +49,7 @@ describe('useAddToNewCase', () => { (useGetUserCasesPermissions as jest.Mock).mockReturnValue(allCasesPermissions()); }); - it('getUseCasesAddToNewCaseFlyout with attachments', () => { + it('useCasesAddToNewCaseFlyout with attachments', () => { const { result } = renderHook(() => useAddToNewCase({ lensAttributes: kpiHostMetricLensAttributes, diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_new_case.tsx b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_new_case.tsx index 36efbd55228f7..9d5b7f689831f 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_new_case.tsx +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_add_to_new_case.tsx @@ -34,7 +34,7 @@ export const useAddToNewCase = ({ onClick, timeRange, lensAttributes }: UseAddTo ]; }, [lensAttributes, timeRange]); - const createCaseFlyout = cases.hooks.getUseCasesAddToNewCaseFlyout({ + const createCaseFlyout = cases.hooks.useCasesAddToNewCaseFlyout({ toastContent: ADD_TO_CASE_SUCCESS, }); diff --git a/x-pack/plugins/security_solution/public/common/lib/triggers_actions_ui/register_alerts_table_configuration.tsx b/x-pack/plugins/security_solution/public/common/lib/triggers_actions_ui/register_alerts_table_configuration.tsx index 5e43ca54a4898..983beec75cc31 100644 --- a/x-pack/plugins/security_solution/public/common/lib/triggers_actions_ui/register_alerts_table_configuration.tsx +++ b/x-pack/plugins/security_solution/public/common/lib/triggers_actions_ui/register_alerts_table_configuration.tsx @@ -60,8 +60,7 @@ const registerAlertsTableConfiguration = ( // register Alert Table on Alert Page registerIfNotAlready(registry, { id: ALERTS_TABLE_REGISTRY_CONFIG_IDS.ALERTS_PAGE, - app_id: APP_ID, - casesFeatureId: CASES_FEATURE_ID, + cases: { featureId: CASES_FEATURE_ID, owner: [APP_ID], syncAlerts: true }, columns: alertColumns, getRenderCellValue: renderCellValueHookAlertPage, useActionsColumn: getUseActionColumnHook(TableId.alertsOnAlertsPage), @@ -77,8 +76,7 @@ const registerAlertsTableConfiguration = ( // register Alert Table on RuleDetails Page registerIfNotAlready(registry, { id: ALERTS_TABLE_REGISTRY_CONFIG_IDS.RULE_DETAILS, - app_id: APP_ID, - casesFeatureId: CASES_FEATURE_ID, + cases: { featureId: CASES_FEATURE_ID, owner: [APP_ID], syncAlerts: true }, columns: alertColumns, getRenderCellValue: renderCellValueHookAlertPage, useActionsColumn: getUseActionColumnHook(TableId.alertsOnRuleDetailsPage), @@ -93,8 +91,7 @@ const registerAlertsTableConfiguration = ( registerIfNotAlready(registry, { id: ALERTS_TABLE_REGISTRY_CONFIG_IDS.CASE, - app_id: APP_ID, - casesFeatureId: CASES_FEATURE_ID, + cases: { featureId: CASES_FEATURE_ID, owner: [APP_ID], syncAlerts: true }, columns: alertColumns, getRenderCellValue: renderCellValueHookCasePage, useInternalFlyout, diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.test.tsx index b23266e3caed8..c8d3b9923fc90 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.test.tsx @@ -156,10 +156,6 @@ jest.mock('./timeline_actions/use_add_bulk_to_timeline', () => ({ useAddBulkToTimelineAction: jest.fn(() => {}), })); -jest.mock('./timeline_actions/use_bulk_add_to_case_actions', () => ({ - useBulkAddToCaseActions: jest.fn(() => []), -})); - const sourcererDataView = { indicesExist: true, loading: false, diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx index 053a0c62f8ddf..55f91c9c3d34d 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx @@ -91,6 +91,7 @@ const AlertContextMenuComponent: React.FC ( - {children} - )); -jest.mock('@elastic/eui', () => { - const original = jest.requireActual('@elastic/eui'); - return { - ...original, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - EuiContextMenuItem: (props: any) => mockTourStep(props), - }; + +const refetch = jest.fn(); +const submit = jest.fn(); +const open = jest.fn().mockImplementation(() => { + refetch(); }); +const caseHooksReturnedValue = { + open, + close: jest.fn(), + submit, +}; + const defaultProps = { onMenuItemClick: () => null, isActiveTimelines: false, @@ -43,21 +46,35 @@ const defaultProps = { kind: ['signal'], }, }, + refetch, +}; + +const addToNewCase = jest.fn().mockReturnValue(caseHooksReturnedValue); +const addToExistingCase = jest.fn().mockReturnValue(caseHooksReturnedValue); +const useKibanaMock = useKibana as jest.Mock; + +const renderContextMenu = (items: EuiContextMenuPanelProps['items']) => { + render( + {}} + button={<>} + > + + + ); }; describe('useAddToCaseActions', () => { - const open = jest.fn(); - const submit = jest.fn(); - const addToNewCase = jest.fn().mockReturnValue({ - open, - submit, - }); beforeEach(() => { (useTourContext as jest.Mock).mockReturnValue({ activeStep: 1, incrementStep: () => null, isTourShown: () => false, }); + (useGetUserCasesPermissions as jest.Mock).mockReturnValue({ all: true, create: true, @@ -66,12 +83,13 @@ describe('useAddToCaseActions', () => { delete: true, push: true, }); - (useKibana as jest.Mock).mockReturnValue({ + + useKibanaMock.mockReturnValue({ services: { cases: { hooks: { - getUseCasesAddToNewCaseFlyout: addToNewCase, - getUseCasesAddToExistingCaseModal: () => null, + useCasesAddToNewCaseFlyout: addToNewCase, + useCasesAddToExistingCaseModal: addToExistingCase, }, helpers: { getRuleIdFromEvent: () => null, @@ -81,6 +99,7 @@ describe('useAddToCaseActions', () => { }); jest.clearAllMocks(); }); + it('should render case options when event is alert ', () => { const { result } = renderHook(() => useAddToCaseActions(defaultProps), { wrapper: TestProviders, @@ -93,6 +112,7 @@ describe('useAddToCaseActions', () => { 'add-to-new-case-action' ); }); + it('should not render case options when event is not alert ', () => { const { result } = renderHook( () => useAddToCaseActions({ ...defaultProps, ecsData: { _id: '123' } }), @@ -102,7 +122,8 @@ describe('useAddToCaseActions', () => { ); expect(result.current.addToCaseActionItems.length).toEqual(0); }); - it('should call getUseCasesAddToNewCaseFlyout with attachments only when step is not active', () => { + + it('should call useCasesAddToNewCaseFlyout with attachments only when step is not active', () => { const { result } = renderHook(() => useAddToCaseActions(defaultProps), { wrapper: TestProviders, }); @@ -113,7 +134,8 @@ describe('useAddToCaseActions', () => { attachments: [{ alertId: '123', index: '', rule: null, type: 'alert' }], }); }); - it('should call getUseCasesAddToNewCaseFlyout with tour step with step is active and increment step', () => { + + it('should call useCasesAddToNewCaseFlyout with tour step with step is active and increment step', () => { const incrementStep = jest.fn(); (useTourContext as jest.Mock).mockReturnValue({ activeStep: AlertsCasesTourSteps.addAlertToCase, @@ -132,7 +154,8 @@ describe('useAddToCaseActions', () => { }); expect(incrementStep).toHaveBeenCalled(); }); - it('should prefill getUseCasesAddToNewCaseFlyout with tour step when step is active', () => { + + it('should prefill useCasesAddToNewCaseFlyout with tour step when step is active', () => { (useTourContext as jest.Mock).mockReturnValue({ activeStep: AlertsCasesTourSteps.addAlertToCase, incrementStep: () => null, @@ -143,10 +166,65 @@ describe('useAddToCaseActions', () => { }); expect(addToNewCase.mock.calls[0][0].initialValue).toEqual(sampleCase); }); - it('should not prefill getUseCasesAddToNewCaseFlyout with tour step when step is not active', () => { + + it('should not prefill useCasesAddToNewCaseFlyout with tour step when step is not active', () => { renderHook(() => useAddToCaseActions(defaultProps), { wrapper: TestProviders, }); expect(addToNewCase.mock.calls[0][0]).not.toHaveProperty('initialValue'); }); + + it('should refetch when adding an alert to a new case', () => { + const { result } = renderHook(() => useAddToCaseActions(defaultProps), { + wrapper: TestProviders, + }); + + expect(result.current.addToCaseActionItems.length).toEqual(2); + + renderContextMenu(result.current.addToCaseActionItems); + + expect(screen.getByTestId('add-to-new-case-action')).toBeInTheDocument(); + userEvent.click(screen.getByTestId('add-to-new-case-action')); + + expect(refetch).toHaveBeenCalled(); + }); + + it('should refetch when calling onSuccess of useCasesAddToNewCaseFlyout', () => { + const { result } = renderHook(() => useAddToCaseActions(defaultProps), { + wrapper: TestProviders, + }); + + expect(result.current.addToCaseActionItems.length).toEqual(2); + + addToNewCase.mock.calls[0][0].onSuccess(); + + expect(refetch).toHaveBeenCalled(); + }); + + it('should refetch when adding an alert to an existing case', () => { + const { result } = renderHook(() => useAddToCaseActions(defaultProps), { + wrapper: TestProviders, + }); + + expect(result.current.addToCaseActionItems.length).toEqual(2); + + renderContextMenu(result.current.addToCaseActionItems); + + expect(screen.getByTestId('add-to-existing-case-action')).toBeInTheDocument(); + userEvent.click(screen.getByTestId('add-to-existing-case-action')); + + expect(refetch).toHaveBeenCalled(); + }); + + it('should refetch when calling onSuccess of useCasesAddToExistingCaseModal', () => { + const { result } = renderHook(() => useAddToCaseActions(defaultProps), { + wrapper: TestProviders, + }); + + expect(result.current.addToCaseActionItems.length).toEqual(2); + + addToExistingCase.mock.calls[0][0].onSuccess(); + + expect(refetch).toHaveBeenCalled(); + }); }); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_to_case_actions.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_to_case_actions.tsx index 79b0f43f2af4c..1aea5679481ac 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_to_case_actions.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_to_case_actions.tsx @@ -29,6 +29,7 @@ export interface UseAddToCaseActions { onSuccess?: () => Promise; isActiveTimelines: boolean; isInDetections: boolean; + refetch: (() => void) | undefined; } export const useAddToCaseActions = ({ @@ -39,6 +40,7 @@ export const useAddToCaseActions = ({ onSuccess, isActiveTimelines, isInDetections, + refetch, }: UseAddToCaseActions) => { const { cases: casesUi } = useKibana().services; const userCasesPermissions = useGetUserCasesPermissions(); @@ -62,6 +64,16 @@ export const useAddToCaseActions = ({ const { activeStep, incrementStep, setStep, isTourShown } = useTourContext(); + const onCaseSuccess = () => { + if (onSuccess) { + onSuccess(); + } + + if (refetch) { + refetch(); + } + }; + const afterCaseCreated = useCallback(async () => { if (isTourShown(SecurityStepId.alertsCases)) { setStep(SecurityStepId.alertsCases, AlertsCasesTourSteps.viewCase); @@ -79,16 +91,16 @@ export const useAddToCaseActions = ({ [activeStep, isTourShown] ); - const createCaseFlyout = casesUi.hooks.getUseCasesAddToNewCaseFlyout({ + const createCaseFlyout = casesUi.hooks.useCasesAddToNewCaseFlyout({ onClose: onMenuItemClick, - onSuccess, + onSuccess: onCaseSuccess, afterCaseCreated, ...prefillCasesValue, }); - const selectCaseModal = casesUi.hooks.getUseCasesAddToExistingCaseModal({ + const selectCaseModal = casesUi.hooks.useCasesAddToExistingCaseModal({ onClose: onMenuItemClick, - onRowClick: onSuccess, + onSuccess: onCaseSuccess, }); const handleAddToNewCaseClick = useCallback(() => { diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_bulk_add_to_case_actions.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_bulk_add_to_case_actions.tsx deleted file mode 100644 index d77a87ccf25c8..0000000000000 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_bulk_add_to_case_actions.tsx +++ /dev/null @@ -1,68 +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 { useMemo } from 'react'; -import type { TimelineItem } from '../../../../../common/search_strategy'; -import { useGetUserCasesPermissions, useKibana } from '../../../../common/lib/kibana'; -import { ADD_TO_CASE_DISABLED, ADD_TO_EXISTING_CASE, ADD_TO_NEW_CASE } from '../translations'; - -export interface UseAddToCaseActions { - onClose?: () => void; - onSuccess?: () => Promise; -} - -export const useBulkAddToCaseActions = ({ onClose, onSuccess }: UseAddToCaseActions = {}) => { - const { cases: casesUi } = useKibana().services; - - const userCasesPermissions = useGetUserCasesPermissions(); - - const addToNewCase = casesUi.hooks.getUseCasesAddToNewCaseFlyout({ - onClose, - onSuccess, - }); - - const addToExisting = casesUi.hooks.getUseCasesAddToExistingCaseModal({ - onClose, - onRowClick: onSuccess, - }); - - return useMemo(() => { - return userCasesPermissions.create && userCasesPermissions.read - ? [ - { - label: ADD_TO_NEW_CASE, - key: 'attach-new-case', - 'data-test-subj': 'attach-new-case', - disableOnQuery: true, - disabledLabel: ADD_TO_CASE_DISABLED, - onClick: (items?: TimelineItem[]) => { - const caseAttachments = items ? casesUi.helpers.groupAlertsByRule(items) : []; - addToNewCase.open({ attachments: caseAttachments }); - }, - }, - { - label: ADD_TO_EXISTING_CASE, - key: 'attach-existing-case', - disableOnQuery: true, - disabledLabel: ADD_TO_CASE_DISABLED, - 'data-test-subj': 'attach-existing-case', - onClick: (items?: TimelineItem[]) => { - const caseAttachments = items ? casesUi.helpers.groupAlertsByRule(items) : []; - - addToExisting.open({ attachments: caseAttachments }); - }, - }, - ] - : []; - }, [ - casesUi.helpers, - addToExisting, - addToNewCase, - userCasesPermissions.create, - userCasesPermissions.read, - ]); -}; diff --git a/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.tsx b/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.tsx index 4e446f76f64cc..1d8aefa4a7314 100644 --- a/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/take_action_dropdown/index.tsx @@ -234,6 +234,7 @@ export const TakeActionDropdown = React.memo( onSuccess: refetchFlyoutData, isActiveTimelines: isActiveTimeline(scopeId), isInDetections, + refetch, }); const items: React.ReactElement[] = useMemo( diff --git a/x-pack/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_bulk_actions.tsx b/x-pack/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_bulk_actions.tsx index 48072fbe0fa86..98c8548207ad3 100644 --- a/x-pack/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_bulk_actions.tsx +++ b/x-pack/plugins/security_solution/public/detections/hooks/trigger_actions_alert_table/use_bulk_actions.tsx @@ -19,7 +19,6 @@ import { SourcererScopeName } from '../../../common/store/sourcerer/model'; import { useGlobalTime } from '../../../common/containers/use_global_time'; import { useAddBulkToTimelineAction } from '../../components/alerts_table/timeline_actions/use_add_bulk_to_timeline'; import { useBulkAlertActionItems } from './use_alert_actions'; -import { useBulkAddToCaseActions } from '../../components/alerts_table/timeline_actions/use_bulk_add_to_case_actions'; // check to see if the query is a known "empty" shape export function isKnownEmptyQuery(query: QueryDslQueryContainer) { @@ -89,7 +88,5 @@ export const getBulkActionHook = refetch: refetchGlobalQuery, }); - const caseActions = useBulkAddToCaseActions(); - - return [...alertActions, ...caseActions, timelineAction]; + return [...alertActions, timelineAction]; }; diff --git a/x-pack/plugins/security_solution/public/detections/pages/alert_details/tabs/summary/cases_panel/index.tsx b/x-pack/plugins/security_solution/public/detections/pages/alert_details/tabs/summary/cases_panel/index.tsx index 951a9795bf7b6..c764eb24c1aac 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/alert_details/tabs/summary/cases_panel/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/alert_details/tabs/summary/cases_panel/index.tsx @@ -86,12 +86,12 @@ export const CasesPanel = React.memo( : []; }, [casesUi.helpers, dataAsNestedObject, detailsData, eventId]); - const createCaseFlyout = casesUi.hooks.getUseCasesAddToNewCaseFlyout({ + const createCaseFlyout = casesUi.hooks.useCasesAddToNewCaseFlyout({ onSuccess: refetchRelatedCases, }); - const selectCaseModal = casesUi.hooks.getUseCasesAddToExistingCaseModal({ - onRowClick: refetchRelatedCases, + const selectCaseModal = casesUi.hooks.useCasesAddToExistingCaseModal({ + onSuccess: refetchRelatedCases, }); const addToNewCase = useCallback(() => { diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.test.tsx b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.test.tsx index 9ccf3c6bb193b..64e489599dd05 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.test.tsx @@ -153,10 +153,6 @@ jest.mock('../../components/alerts_table/timeline_actions/use_add_bulk_to_timeli useAddBulkToTimelineAction: jest.fn(() => {}), })); -jest.mock('../../components/alerts_table/timeline_actions/use_bulk_add_to_case_actions', () => ({ - useBulkAddToCaseActions: jest.fn(() => []), -})); - jest.mock('../../../common/components/visualization_actions/lens_embeddable'); jest.mock('../../../common/components/page/use_refetch_by_session'); diff --git a/x-pack/plugins/security_solution/public/flyout/index.tsx b/x-pack/plugins/security_solution/public/flyout/index.tsx index dc1d6d09d8ee7..dec91855c2628 100644 --- a/x-pack/plugins/security_solution/public/flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/flyout/index.tsx @@ -14,6 +14,11 @@ import type { LeftPanelProps } from './left'; import { LeftPanel, LeftPanelKey } from './left'; import { LeftPanelProvider } from './left/context'; +// TODO these should be replaced by a more dynamic solution +// see https://github.com/elastic/security-team/issues/6247 +export const RIGHT_SECTION_WIDTH = 500; +export const LEFT_SECTION_WIDTH = 1000; + /** * List of all panels that will be used within the document details expandable flyout. * This needs to be passed to the expandable flyout registeredPanels property. @@ -21,7 +26,7 @@ import { LeftPanelProvider } from './left/context'; export const expandableFlyoutDocumentsPanels: ExpandableFlyoutProps['registeredPanels'] = [ { key: RightPanelKey, - width: 500, + width: RIGHT_SECTION_WIDTH, component: (props) => ( @@ -30,7 +35,7 @@ export const expandableFlyoutDocumentsPanels: ExpandableFlyoutProps['registeredP }, { key: LeftPanelKey, - width: 1000, + width: LEFT_SECTION_WIDTH, component: (props) => ( diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/analyze.stories.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/analyze.stories.tsx new file mode 100644 index 0000000000000..9caff069b96f4 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/left/components/analyze.stories.tsx @@ -0,0 +1,76 @@ +/* + * 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 type { Story } from '@storybook/react'; +import { Provider as ReduxStoreProvider } from 'react-redux'; +import { configureStore } from '@reduxjs/toolkit'; +import { MemoryRouter } from 'react-router-dom'; +import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; +import type { CoreStart } from '@kbn/core/public'; +import { sourcererReducer } from '../../../common/store/sourcerer'; +import { inputsReducer } from '../../../common/store/inputs'; +import type { LeftPanelContext } from '../context'; +import { LeftFlyoutContext } from '../context'; +import { AnalyzeGraph } from './analyze_graph'; + +export default { + component: AnalyzeGraph, + title: 'Flyout/AnalyzeGraph', +}; + +// TODO to get this working, we need to spent some time getting all the foundation items for storybook +// (ReduxStoreProvider, CellActionsProvider...) similarly to how it was done for the TestProvidersComponent +// see ticket https://github.com/elastic/security-team/issues/6223 +// export const Default: Story = () => { +// const contextValue = { +// eventId: 'some_id', +// } as unknown as LeftPanelContext; +// +// return ( +// +// +// +// ); +// }; + +export const Error: Story = () => { + const store = configureStore({ + reducer: { + inputs: inputsReducer, + sourcerer: sourcererReducer, + }, + }); + const services = { + data: {}, + notifications: { + toasts: { + addError: () => {}, + addSuccess: () => {}, + addWarning: () => {}, + remove: () => {}, + }, + }, + } as unknown as CoreStart; + const KibanaReactContext = createKibanaReactContext({ ...services }); + + const contextValue = { + eventId: null, + } as unknown as LeftPanelContext; + + return ( + + + + + + + + + + ); +}; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.test.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.test.tsx new file mode 100644 index 0000000000000..460580b098b90 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.test.tsx @@ -0,0 +1,66 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import type { LeftPanelContext } from '../context'; +import { LeftFlyoutContext } from '../context'; +import { TestProviders } from '../../../common/mock'; +import { AnalyzeGraph } from './analyze_graph'; +import { ANALYZE_GRAPH_ERROR_TEST_ID, ANALYZER_GRAPH_TEST_ID } from './test_ids'; + +jest.mock('react-router-dom', () => { + const actual = jest.requireActual('react-router-dom'); + return { ...actual, useLocation: jest.fn().mockReturnValue({ pathname: '' }) }; +}); + +jest.mock('../../../resolver/view/use_resolver_query_params_cleaner'); + +const mockDispatch = jest.fn(); +jest.mock('react-redux', () => { + const original = jest.requireActual('react-redux'); + + return { + ...original, + useDispatch: () => mockDispatch, + }; +}); + +describe('', () => { + it('renders analyzer graph correctly', () => { + const contextValue = { + eventId: 'eventId', + } as unknown as LeftPanelContext; + + const wrapper = render( + + + + + + ); + expect(wrapper.getByTestId(ANALYZER_GRAPH_TEST_ID)).toBeInTheDocument(); + }); + + it('should render error message on null eventId', () => { + const contextValue = { + eventId: null, + } as unknown as LeftPanelContext; + + const wrapper = render( + + + + + + ); + expect(wrapper.getByTestId(ANALYZE_GRAPH_ERROR_TEST_ID)).toBeInTheDocument(); + expect(wrapper.getByText('Unable to display analyzer')).toBeInTheDocument(); + expect(wrapper.getByText('There was an error displaying analyzer')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.tsx index 3e1e461520b8d..3cb908a849e4d 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/components/analyze_graph.tsx @@ -7,8 +7,15 @@ import type { FC } from 'react'; import React from 'react'; -import { EuiText } from '@elastic/eui'; -import { ANALYZER_GRAPH_TEST_ID } from './test_ids'; +import { EuiEmptyPrompt } from '@elastic/eui'; + +import { ANALYZER_ERROR_MESSAGE } from './translations'; +import { useLeftPanelContext } from '../context'; +import { ANALYZE_GRAPH_ERROR_TEST_ID, ANALYZER_GRAPH_TEST_ID } from './test_ids'; +import { Resolver } from '../../../resolver/view'; +import { useTimelineDataFilters } from '../../../timelines/containers/use_timeline_data_filters'; +import { ERROR_TITLE, ERROR_MESSAGE } from '../../shared/translations'; +import { isActiveTimeline } from '../../../helpers'; export const ANALYZE_GRAPH_ID = 'analyze_graph'; @@ -16,7 +23,35 @@ export const ANALYZE_GRAPH_ID = 'analyze_graph'; * Analyzer graph view displayed in the document details expandable flyout left section under the Visualize tab */ export const AnalyzeGraph: FC = () => { - return {'Analyzer graph'}; + const { eventId } = useLeftPanelContext(); + const scopeId = 'fly-out'; + const { from, to, shouldUpdate, selectedPatterns } = useTimelineDataFilters( + isActiveTimeline(scopeId) + ); + + if (!eventId) { + return ( + {ERROR_TITLE(ANALYZER_ERROR_MESSAGE)}} + body={

{ERROR_MESSAGE(ANALYZER_ERROR_MESSAGE)}

} + data-test-subj={ANALYZE_GRAPH_ERROR_TEST_ID} + /> + ); + } + + return ( +
+ +
+ ); }; AnalyzeGraph.displayName = 'AnalyzeGraph'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts index 2456aa4c77b4a..4adf5de724d3b 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts @@ -6,4 +6,6 @@ */ export const ANALYZER_GRAPH_TEST_ID = 'securitySolutionDocumentDetailsFlyoutAnalyzerGraph'; +export const ANALYZE_GRAPH_ERROR_TEST_ID = + 'securitySolutionDocumentDetailsFlyoutAnalyzerGraphError'; export const SESSION_VIEW_TEST_ID = 'securitySolutionDocumentDetailsFlyoutSessionView'; diff --git a/x-pack/plugins/actions/server/cleanup_failed_executions/index.ts b/x-pack/plugins/security_solution/public/flyout/left/components/translations.ts similarity index 53% rename from x-pack/plugins/actions/server/cleanup_failed_executions/index.ts rename to x-pack/plugins/security_solution/public/flyout/left/components/translations.ts index e8e93caed4f81..8c59c8a101fb0 100644 --- a/x-pack/plugins/actions/server/cleanup_failed_executions/index.ts +++ b/x-pack/plugins/security_solution/public/flyout/left/components/translations.ts @@ -5,5 +5,11 @@ * 2.0. */ -export { ensureScheduled as ensureCleanupFailedExecutionsTaskScheduled } from './ensure_scheduled'; -export { registerTaskDefinition as registerCleanupFailedExecutionsTaskDefinition } from './register_task_definition'; +import { i18n } from '@kbn/i18n'; + +export const ANALYZER_ERROR_MESSAGE = i18n.translate( + 'xpack.securitySolution.flyout.analyzerErrorTitle', + { + defaultMessage: 'analyzer', + } +); diff --git a/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx b/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx index aa96c36af0bdc..7f31d25058c1c 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx @@ -6,7 +6,7 @@ */ import type { FC } from 'react'; -import React, { memo, useState } from 'react'; +import React, { memo, useState, useCallback } from 'react'; import { EuiButtonGroup, EuiSpacer } from '@elastic/eui'; import type { EuiButtonGroupOptionProps } from '@elastic/eui/src/components/button/button_group/button_group'; import { @@ -21,6 +21,8 @@ import { VISUALIZE_BUTTONGROUP_OPTIONS, } from './translations'; import { SESSION_VIEW_ID, SessionView } from '../components/session_view'; +import { ALERTS_ACTIONS } from '../../../common/lib/apm/user_actions'; +import { useStartTransaction } from '../../../common/lib/apm/use_start_transaction'; const visualizeButtons: EuiButtonGroupOptionProps[] = [ { @@ -40,9 +42,16 @@ const visualizeButtons: EuiButtonGroupOptionProps[] = [ */ export const VisualizeTab: FC = memo(() => { const [activeVisualizationId, setActiveVisualizationId] = useState(SESSION_VIEW_ID); - const onChangeCompressed = (optionId: string) => { - setActiveVisualizationId(optionId); - }; + const { startTransaction } = useStartTransaction(); + const onChangeCompressed = useCallback( + (optionId: string) => { + setActiveVisualizationId(optionId); + if (optionId === ANALYZE_GRAPH_ID) { + startTransaction({ name: ALERTS_ACTIONS.OPEN_ANALYZER }); + } + }, + [startTransaction] + ); return ( <> diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description.stories.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/description.stories.tsx new file mode 100644 index 0000000000000..5588fcbc123bc --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/description.stories.tsx @@ -0,0 +1,141 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { css } from '@emotion/react'; +import type { Story } from '@storybook/react'; +import { RIGHT_SECTION_WIDTH } from '../..'; +import { Description } from './description'; +import { RightPanelContext } from '../context'; + +const PADDING = 24; +const WIDTH = RIGHT_SECTION_WIDTH - 2 * PADDING; + +const ruleUuid = { + category: 'kibana', + field: 'kibana.alert.rule.uuid', + values: ['123'], + originalValue: ['123'], + isObjectArray: false, +}; +const ruleDescription = { + category: 'kibana', + field: 'kibana.alert.rule.description', + values: [ + 'This is a very long description of the rule. In theory. this description is long enough that it should be cut off when displayed in collapsed mode.', + ], + originalValue: ['description'], + isObjectArray: false, +}; + +export default { + component: Description, + title: 'Flyout/Description', +}; + +export const RuleExpand: Story = () => { + const panelContextValue = { + dataFormattedForFieldBrowser: [ruleUuid, ruleDescription], + } as unknown as RightPanelContext; + + return ( + +
+ +
+
+ ); +}; + +export const RuleCollapse: Story = () => { + const panelContextValue = { + dataFormattedForFieldBrowser: [ruleUuid, ruleDescription], + } as unknown as RightPanelContext; + + return ( + +
+ +
+
+ ); +}; + +export const Document: Story = () => { + const panelContextValue = { + dataFormattedForFieldBrowser: [ + { + category: 'kibana', + field: 'kibana.alert.rule.description', + values: ['This is a description for the document.'], + originalValue: ['description'], + isObjectArray: false, + }, + ], + } as unknown as RightPanelContext; + + return ( + +
+ +
+
+ ); +}; + +export const EmptyDescription: Story = () => { + const panelContextValue = { + dataFormattedForFieldBrowser: [ + ruleUuid, + { + category: 'kibana', + field: 'kibana.alert.rule.description', + values: [''], + originalValue: ['description'], + isObjectArray: false, + }, + ], + } as unknown as RightPanelContext; + return ( + +
+ +
+
+ ); +}; + +export const Empty: Story = () => { + const panelContextValue = {} as unknown as RightPanelContext; + return ( + +
+ +
+
+ ); +}; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/description.test.tsx new file mode 100644 index 0000000000000..f378a58b14076 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/description.test.tsx @@ -0,0 +1,110 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { DESCRIPTION_EXPAND_BUTTON_TEST_ID, DESCRIPTION_TITLE_TEST_ID } from './test_ids'; +import { + DOCUMENT_DESCRIPTION_COLLAPSE_BUTTON, + DOCUMENT_DESCRIPTION_EXPAND_BUTTON, + DOCUMENT_DESCRIPTION_TITLE, + RULE_DESCRIPTION_TITLE, +} from './translations'; +import { Description } from './description'; +import { RightPanelContext } from '../context'; + +const ruleUuid = { + category: 'kibana', + field: 'kibana.alert.rule.uuid', + values: ['123'], + originalValue: ['123'], + isObjectArray: false, +}; +const ruleDescription = { + category: 'kibana', + field: 'kibana.alert.rule.description', + values: [ + 'This is a very long description of the rule. In theory. this description is long enough that it should be cut off when displayed in collapsed mode.', + ], + originalValue: ['description'], + isObjectArray: false, +}; + +describe('', () => { + it('should render the component collapsed', () => { + const panelContextValue = { + dataFormattedForFieldBrowser: [ruleUuid, ruleDescription], + } as unknown as RightPanelContext; + + const { getByTestId } = render( + + + + ); + + expect(getByTestId(DESCRIPTION_TITLE_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(DESCRIPTION_TITLE_TEST_ID)).toHaveTextContent(RULE_DESCRIPTION_TITLE); + expect(getByTestId(DESCRIPTION_EXPAND_BUTTON_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(DESCRIPTION_EXPAND_BUTTON_TEST_ID)).toHaveTextContent( + DOCUMENT_DESCRIPTION_EXPAND_BUTTON + ); + }); + + it('should render the component expanded', () => { + const panelContextValue = { + dataFormattedForFieldBrowser: [ruleUuid, ruleDescription], + } as unknown as RightPanelContext; + + const { getByTestId } = render( + + + + ); + + expect(getByTestId(DESCRIPTION_TITLE_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(DESCRIPTION_TITLE_TEST_ID)).toHaveTextContent(RULE_DESCRIPTION_TITLE); + expect(getByTestId(DESCRIPTION_EXPAND_BUTTON_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(DESCRIPTION_EXPAND_BUTTON_TEST_ID)).toHaveTextContent( + DOCUMENT_DESCRIPTION_COLLAPSE_BUTTON + ); + }); + + it('should render expand and collapse when clicking on the button', () => { + const panelContextValue = { + dataFormattedForFieldBrowser: [ruleUuid, ruleDescription], + } as unknown as RightPanelContext; + + const { getByTestId } = render( + + + + ); + + expect(getByTestId(DESCRIPTION_EXPAND_BUTTON_TEST_ID)).toHaveTextContent( + DOCUMENT_DESCRIPTION_EXPAND_BUTTON + ); + getByTestId(DESCRIPTION_EXPAND_BUTTON_TEST_ID).click(); + expect(getByTestId(DESCRIPTION_EXPAND_BUTTON_TEST_ID)).toHaveTextContent( + DOCUMENT_DESCRIPTION_COLLAPSE_BUTTON + ); + }); + + it('should render document title if document is not an alert', () => { + const panelContextValue = { + dataFormattedForFieldBrowser: [ruleDescription], + } as unknown as RightPanelContext; + + const { getByTestId } = render( + + + + ); + + expect(getByTestId(DESCRIPTION_TITLE_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(DESCRIPTION_TITLE_TEST_ID)).toHaveTextContent(DOCUMENT_DESCRIPTION_TITLE); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx new file mode 100644 index 0000000000000..b233f3b4597ce --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx @@ -0,0 +1,97 @@ +/* + * 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 { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; +import type { VFC } from 'react'; +import React, { useState } from 'react'; +import { css } from '@emotion/react'; +import { useRightPanelContext } from '../context'; +import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import { + DESCRIPTION_DETAILS_TEST_ID, + DESCRIPTION_EXPAND_BUTTON_TEST_ID, + DESCRIPTION_TITLE_TEST_ID, +} from './test_ids'; +import { + DOCUMENT_DESCRIPTION_COLLAPSE_BUTTON, + DOCUMENT_DESCRIPTION_EXPAND_BUTTON, + DOCUMENT_DESCRIPTION_TITLE, + RULE_DESCRIPTION_TITLE, +} from './translations'; + +export interface DescriptionProps { + /** + * Boolean to allow the component to be expanded or collapsed on first render + */ + expanded?: boolean; +} + +/** + * Displays the description of a document. + * If the document is an alert we show the rule description. If the document is of another type, we show -. + * By default, the text is truncated to only shows 2 lines. + * The Expand/Collapse button allows the user to see the whole description. + */ +export const Description: VFC = ({ expanded = false }) => { + const [isExpanded, setIsExpanded] = useState(expanded); + + const { dataFormattedForFieldBrowser } = useRightPanelContext(); + const { isAlert, ruleDescription } = useBasicDataFromDetailsData(dataFormattedForFieldBrowser); + + if (!dataFormattedForFieldBrowser) { + return null; + } + + const hasRuleDescription = ruleDescription && ruleDescription.length > 0; + + // TODO look into hiding the expand/collapse button if the description is short + // see https://github.com/elastic/security-team/issues/6248 + + return ( + + + +
{isAlert ? RULE_DESCRIPTION_TITLE : DOCUMENT_DESCRIPTION_TITLE}
+
+
+ + + + {hasRuleDescription ? ruleDescription : '-'} + + {hasRuleDescription ? ( + + setIsExpanded((preIsExpanded) => !preIsExpanded)} + data-test-subj={DESCRIPTION_EXPAND_BUTTON_TEST_ID} + > + {isExpanded + ? DOCUMENT_DESCRIPTION_COLLAPSE_BUTTON + : DOCUMENT_DESCRIPTION_EXPAND_BUTTON} + + + ) : null} + + +
+ ); +}; + +Description.displayName = 'Description'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description_section.stories.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/description_section.stories.tsx new file mode 100644 index 0000000000000..c38125459df43 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/description_section.stories.tsx @@ -0,0 +1,38 @@ +/* + * 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 type { Story } from '@storybook/react'; +import { mockDataFormattedForFieldBrowser, mockSearchHit } from '../mocks/mock_context'; +import { RightPanelContext } from '../context'; +import { DescriptionSection } from './description_section'; + +const panelContextValue = { + dataFormattedForFieldBrowser: mockDataFormattedForFieldBrowser, + searchHit: mockSearchHit, +} as unknown as RightPanelContext; + +export default { + component: DescriptionSection, + title: 'Flyout/DescriptionSection', +}; + +export const Expand: Story = () => { + return ( + + + + ); +}; + +export const Collapse: Story = () => { + return ( + + + + ); +}; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description_section.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/description_section.test.tsx new file mode 100644 index 0000000000000..9b3506d563816 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/description_section.test.tsx @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { + DESCRIPTION_SECTION_CONTENT_TEST_ID, + DESCRIPTION_SECTION_HEADER_TEST_ID, +} from './test_ids'; +import { DescriptionSection } from './description_section'; +import { RightPanelContext } from '../context'; + +const panelContextValue = {} as unknown as RightPanelContext; + +describe('', () => { + it('should render the component collapsed', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId(DESCRIPTION_SECTION_HEADER_TEST_ID)).toBeInTheDocument(); + }); + + it('should render the component expanded', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId(DESCRIPTION_SECTION_HEADER_TEST_ID)).toBeInTheDocument(); + expect(getByTestId(DESCRIPTION_SECTION_CONTENT_TEST_ID)).toBeInTheDocument(); + }); + + it('should expand the component when clicking on the arrow on header', () => { + const { getByTestId } = render( + + + + ); + + getByTestId(DESCRIPTION_SECTION_HEADER_TEST_ID).click(); + expect(getByTestId(DESCRIPTION_SECTION_CONTENT_TEST_ID)).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description_section.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/description_section.tsx new file mode 100644 index 0000000000000..3fd98c597e024 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/description_section.tsx @@ -0,0 +1,44 @@ +/* + * 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 { EuiSpacer } from '@elastic/eui'; +import type { VFC } from 'react'; +import React from 'react'; +import { ExpandableSection } from './expandable_section'; +import { DESCRIPTION_SECTION_TEST_ID } from './test_ids'; +import { DESCRIPTION_TITLE } from './translations'; +import { Description } from './description'; +import { Reason } from './reason'; +import { MitreAttack } from './mitre_attack'; + +export interface DescriptionSectionProps { + /** + * Boolean to allow the component to be expanded or collapsed on first render + */ + expanded?: boolean; +} + +/** + * Most top section of the overview tab. It contains the description, reason and mitre attack information (for a document of type alert). + */ +export const DescriptionSection: VFC = ({ expanded = true }) => { + return ( + + + + + + + + ); +}; + +DescriptionSection.displayName = 'DescriptionSection'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.stories.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.stories.tsx new file mode 100644 index 0000000000000..64411fbe69513 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { Story } from '@storybook/react'; +import { ExpandableSection } from './expandable_section'; + +const title = 'title'; +const children =
{'content'}
; + +export default { + component: ExpandableSection, + title: 'Flyout/ExpandableSection', +}; + +export const Expand: Story = () => { + return ( + + {children} + + ); +}; + +export const Collapse: Story = () => { + return ( + + {children} + + ); +}; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.test.tsx new file mode 100644 index 0000000000000..e0d08e260f944 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.test.tsx @@ -0,0 +1,50 @@ +/* + * 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 { CONTENT_TEST_ID, ExpandableSection, HEADER_TEST_ID } from './expandable_section'; + +const title = 'title'; +const children =
{'content'}
; +const testId = 'test'; +const headerTestId = testId + HEADER_TEST_ID; +const contentTestId = testId + CONTENT_TEST_ID; + +describe('', () => { + it('should render the component collapsed', () => { + const { getByTestId } = render( + + {children} + + ); + + expect(getByTestId(headerTestId)).toBeInTheDocument(); + }); + + it('should render the component expanded', () => { + const { getByTestId } = render( + + {children} + + ); + + expect(getByTestId(headerTestId)).toBeInTheDocument(); + expect(getByTestId(contentTestId)).toBeInTheDocument(); + }); + + it('should expand the component when clicking on the arrow on header', () => { + const { getByTestId } = render( + + {children} + + ); + + getByTestId(headerTestId).click(); + expect(getByTestId(contentTestId)).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.tsx new file mode 100644 index 0000000000000..4cb7595798fef --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/expandable_section.tsx @@ -0,0 +1,68 @@ +/* + * 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 { EuiAccordion, EuiFlexGroup, EuiSpacer, EuiTitle, useGeneratedHtmlId } from '@elastic/eui'; +import type { VFC } from 'react'; +import React from 'react'; + +export const HEADER_TEST_ID = 'Header'; +export const CONTENT_TEST_ID = 'Content'; + +export interface DescriptionSectionProps { + /** + * Boolean to allow the component to be expanded or collapsed on first render + */ + expanded: boolean; + /** + * Title value to render in the header of the accordion + */ + title: string; + /** + * React component to render in the expandable section of the accordion + */ + children: React.ReactNode; + /** + * Prefix data-test-subj to use for the header and expandable section of the accordion + */ + ['data-test-subj']?: string; +} + +/** + * Component used to render multiple sections in the Overview tab + * - Description + * - Investigation + * - Visualizations + * - Insights + */ +export const ExpandableSection: VFC = ({ + expanded, + title, + children, + 'data-test-subj': dataTestSub, +}) => { + const accordionId = useGeneratedHtmlId({ prefix: 'accordion' }); + + const headerDataTestSub = dataTestSub + HEADER_TEST_ID; + const contentDataTestSub = dataTestSub + CONTENT_TEST_ID; + + const header = ( + +

{title}

+
+ ); + + return ( + + + + {children} + + + ); +}; + +ExpandableSection.displayName = 'ExpandableSection'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.test.tsx index 5846303ff6dab..4724b6f9a9c49 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/highlighted_fields.test.tsx @@ -97,6 +97,31 @@ describe('', () => { ); + getByTestId(HIGHLIGHTED_FIELDS_HEADER_EXPAND_ICON_TEST_ID).click(); + expect(getByTestId(HIGHLIGHTED_FIELDS_DETAILS_TEST_ID)).toBeInTheDocument(); + }); + + it('should navigate to table tab when clicking on the link button', () => { + const flyoutContextValue = { + openRightPanel: jest.fn(), + } as unknown as ExpandableFlyoutContext; + const panelContextValue = { + eventId: 'eventId', + indexName: 'indexName', + dataFormattedForFieldBrowser: [], + browserFields: {}, + } as unknown as RightPanelContext; + + const { getByTestId } = render( + + + + + + + + ); + getByTestId(HIGHLIGHTED_FIELDS_HEADER_EXPAND_ICON_TEST_ID).click(); getByTestId(HIGHLIGHTED_FIELDS_GO_TO_TABLE_LINK).click(); expect(flyoutContextValue.openRightPanel).toHaveBeenCalledWith({ @@ -107,7 +132,6 @@ describe('', () => { indexName: panelContextValue.indexName, }, }); - expect(getByTestId(HIGHLIGHTED_FIELDS_DETAILS_TEST_ID)).toBeInTheDocument(); }); it('should render empty component if dataFormattedForFieldBrowser is null', () => { diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.stories.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.stories.tsx index 38e9dc6a1f122..c983b59864d7b 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.stories.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.stories.tsx @@ -7,6 +7,7 @@ import React from 'react'; import type { Story } from '@storybook/react'; +import { mockSearchHit } from '../mocks/mock_context'; import { RightPanelContext } from '../context'; import { MitreAttack } from './mitre_attack'; @@ -16,33 +17,7 @@ export default { }; export const Default: Story = () => { - const contextValue = { - searchHit: { - fields: { - 'kibana.alert.rule.parameters': [ - { - threat: [ - { - framework: 'MITRE ATT&CK', - tactic: { - id: '123', - reference: 'https://attack.mitre.org/tactics/123', - name: 'Tactic', - }, - technique: [ - { - id: '456', - reference: 'https://attack.mitre.org/techniques/456', - name: 'Technique', - }, - ], - }, - ], - }, - ], - }, - }, - } as unknown as RightPanelContext; + const contextValue = { searchHit: mockSearchHit } as unknown as RightPanelContext; return ( diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.test.tsx index c51bad7315d43..f0bc9bd993f66 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/mitre_attack.test.tsx @@ -10,36 +10,11 @@ import { render } from '@testing-library/react'; import { MitreAttack } from './mitre_attack'; import { RightPanelContext } from '../context'; import { MITRE_ATTACK_DETAILS_TEST_ID, MITRE_ATTACK_TITLE_TEST_ID } from './test_ids'; +import { mockSearchHit } from '../mocks/mock_context'; describe('', () => { it('should render mitre attack information', () => { - const contextValue = { - searchHit: { - fields: { - 'kibana.alert.rule.parameters': [ - { - threat: [ - { - framework: 'MITRE ATT&CK', - tactic: { - id: '123', - reference: 'https://attack.mitre.org/tactics/123', - name: 'Tactic', - }, - technique: [ - { - id: '456', - reference: 'https://attack.mitre.org/techniques/456', - name: 'Technique', - }, - ], - }, - ], - }, - ], - }, - }, - } as unknown as RightPanelContext; + const contextValue = { searchHit: mockSearchHit } as unknown as RightPanelContext; const { getByTestId } = render( diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/reason.stories.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/reason.stories.tsx new file mode 100644 index 0000000000000..a86b078f9f81a --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/reason.stories.tsx @@ -0,0 +1,44 @@ +/* + * 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 type { Story } from '@storybook/react'; +import { Reason } from './reason'; +import { RightPanelContext } from '../context'; + +export default { + component: Reason, + title: 'Flyout/Reason', +}; + +// TODO to get this working, we need to spent some time getting all the foundation items for storybook +// (ReduxStoreProvider, CellActionsProvider...) similarly to how it was done for the TestProvidersComponent +// see ticket https://github.com/elastic/security-team/issues/6223 +// export const Default: Story = () => { +// const panelContextValue = { +// dataAsNestedObject: mockDataAsNestedObject, +// dataFormattedForFieldBrowser: mockDataFormattedForFieldBrowser, +// } as unknown as RightPanelContext; +// +// return ( +// +// +// +// ); +// }; + +export const Empty: Story = () => { + const panelContextValue = { + dataFormattedForFieldBrowser: {}, + } as unknown as RightPanelContext; + + return ( + + + + ); +}; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/reason.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/reason.test.tsx new file mode 100644 index 0000000000000..d2a7c90011d68 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/reason.test.tsx @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { REASON_TITLE_TEST_ID } from './test_ids'; +import { Reason } from './reason'; +import { RightPanelContext } from '../context'; +import { mockDataAsNestedObject, mockDataFormattedForFieldBrowser } from '../mocks/mock_context'; +import { euiDarkVars } from '@kbn/ui-theme'; +import { ThemeProvider } from 'styled-components'; + +describe('', () => { + it('should render the component', () => { + const panelContextValue = { + dataAsNestedObject: mockDataAsNestedObject, + dataFormattedForFieldBrowser: mockDataFormattedForFieldBrowser, + } as unknown as RightPanelContext; + + const { getByTestId } = render( + ({ eui: euiDarkVars, darkMode: true })}> + + + + + ); + + expect(getByTestId(REASON_TITLE_TEST_ID)).toBeInTheDocument(); + }); + + it('should render null if dataFormattedForFieldBrowser is null', () => { + const panelContextValue = { + dataAsNestedObject: {}, + } as unknown as RightPanelContext; + + const { baseElement } = render( + + + + ); + + expect(baseElement).toMatchInlineSnapshot(` + +
+ + `); + }); + + it('should render null if dataAsNestedObject is null', () => { + const panelContextValue = { + dataFormattedForFieldBrowser: [], + } as unknown as RightPanelContext; + + const { baseElement } = render( + + + + ); + + expect(baseElement).toMatchInlineSnapshot(` + +
+ + `); + }); + it('should render null if renderer is null', () => { + const panelContextValue = { + dataAsNestedObject: {}, + dataFormattedForFieldBrowser: [], + } as unknown as RightPanelContext; + + const { baseElement } = render( + + + + ); + + expect(baseElement).toMatchInlineSnapshot(` + +
+ + `); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/reason.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/reason.tsx new file mode 100644 index 0000000000000..b6633ac42c46b --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/right/components/reason.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FC } from 'react'; +import React, { useMemo } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; +import { REASON_DETAILS_TEST_ID, REASON_TITLE_TEST_ID } from './test_ids'; +import { ALERT_REASON_TITLE, DOCUMENT_REASON_TITLE } from './translations'; +import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; +import { defaultRowRenderers } from '../../../timelines/components/timeline/body/renderers'; +import { getRowRenderer } from '../../../timelines/components/timeline/body/renderers/get_row_renderer'; +import { useRightPanelContext } from '../context'; + +/** + * Displays the information provided by the rowRenderer. Supports multiple types of documents. + */ +export const Reason: FC = () => { + const { dataAsNestedObject, dataFormattedForFieldBrowser } = useRightPanelContext(); + const { isAlert } = useBasicDataFromDetailsData(dataFormattedForFieldBrowser); + + const renderer = useMemo( + () => + dataAsNestedObject != null + ? getRowRenderer({ data: dataAsNestedObject, rowRenderers: defaultRowRenderers }) + : null, + [dataAsNestedObject] + ); + + if (!dataFormattedForFieldBrowser || !dataAsNestedObject || !renderer) { + return null; + } + + return ( + + + +
{isAlert ? ALERT_REASON_TITLE : DOCUMENT_REASON_TITLE}
+
+
+ + {renderer.renderRow({ + contextId: 'event-details', + data: dataAsNestedObject, + isDraggable: false, + scopeId: 'global', + })} + +
+ ); +}; + +Reason.displayName = 'Reason'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts index a3ca8a12265b5..4a6ceabae57e3 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/right/components/test_ids.ts @@ -5,11 +5,24 @@ * 2.0. */ +import { CONTENT_TEST_ID, HEADER_TEST_ID } from './expandable_section'; + export const FLYOUT_HEADER_TITLE_TEST_ID = 'securitySolutionDocumentDetailsFlyoutHeaderTitle'; export const EXPAND_DETAILS_BUTTON_TEST_ID = 'securitySolutionDocumentDetailsFlyoutHeaderExpandDetailButton'; export const COLLAPSE_DETAILS_BUTTON_TEST_ID = 'securitySolutionDocumentDetailsFlyoutHeaderCollapseDetailButton'; +export const DESCRIPTION_SECTION_TEST_ID = + 'securitySolutionDocumentDetailsFlyoutDescriptionSection'; +export const DESCRIPTION_SECTION_HEADER_TEST_ID = DESCRIPTION_SECTION_TEST_ID + HEADER_TEST_ID; +export const DESCRIPTION_SECTION_CONTENT_TEST_ID = DESCRIPTION_SECTION_TEST_ID + CONTENT_TEST_ID; +export const DESCRIPTION_TITLE_TEST_ID = 'securitySolutionDocumentDetailsFlyoutDescriptionTitle'; +export const DESCRIPTION_DETAILS_TEST_ID = + 'securitySolutionDocumentDetailsFlyoutDescriptionDetails'; +export const DESCRIPTION_EXPAND_BUTTON_TEST_ID = + 'securitySolutionDocumentDetailsFlyoutDescriptionExpandButton'; +export const REASON_TITLE_TEST_ID = 'securitySolutionDocumentDetailsFlyoutReasonTitle'; +export const REASON_DETAILS_TEST_ID = 'securitySolutionDocumentDetailsFlyoutReasonDetails'; export const MITRE_ATTACK_TITLE_TEST_ID = 'securitySolutionAlertDetailsFlyoutMitreAttackTitle'; export const MITRE_ATTACK_DETAILS_TEST_ID = 'securitySolutionAlertDetailsFlyoutMitreAttackDetails'; export const FLYOUT_HEADER_SEVERITY_TITLE_TEST_ID = diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/translations.ts b/x-pack/plugins/security_solution/public/flyout/right/components/translations.ts index 4ae41a5abcf4c..3d3a21b7faa0b 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/translations.ts +++ b/x-pack/plugins/security_solution/public/flyout/right/components/translations.ts @@ -36,6 +36,53 @@ export const RISK_SCORE_TITLE = i18n.translate( } ); +export const DESCRIPTION_TITLE = i18n.translate( + 'xpack.securitySolution.flyout.documentDetails.descriptionTitle', + { + defaultMessage: 'Description', + } +); + +export const RULE_DESCRIPTION_TITLE = i18n.translate( + 'xpack.securitySolution.flyout.documentDetails.ruleDescriptionTitle', + { + defaultMessage: 'Rule description', + } +); + +export const DOCUMENT_DESCRIPTION_TITLE = i18n.translate( + 'xpack.securitySolution.flyout.documentDetails.documentDescriptionTitle', + { + defaultMessage: 'Document description', + } +); +export const DOCUMENT_DESCRIPTION_EXPAND_BUTTON = i18n.translate( + 'xpack.securitySolution.flyout.documentDetails.documentDescriptionExpandButton', + { + defaultMessage: 'Expand', + } +); +export const DOCUMENT_DESCRIPTION_COLLAPSE_BUTTON = i18n.translate( + 'xpack.securitySolution.flyout.documentDetails.documentDescriptionCollapseButton', + { + defaultMessage: 'Collapse', + } +); + +export const ALERT_REASON_TITLE = i18n.translate( + 'xpack.securitySolution.flyout.documentDetails.alertReasonTitle', + { + defaultMessage: 'Alert reason', + } +); + +export const DOCUMENT_REASON_TITLE = i18n.translate( + 'xpack.securitySolution.flyout.documentDetails.documentReasonTitle', + { + defaultMessage: 'Document reason', + } +); + export const HIGHLIGHTED_FIELDS_TITLE = i18n.translate( 'xpack.securitySolution.flyout.documentDetails.highlightedFieldsTitle', { defaultMessage: 'Highlighted fields' } diff --git a/x-pack/plugins/security_solution/public/flyout/right/context.tsx b/x-pack/plugins/security_solution/public/flyout/right/context.tsx index afbb8e200c198..ce2a2df466715 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/context.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/context.tsx @@ -10,6 +10,7 @@ import { css } from '@emotion/react'; import React, { createContext, useContext, useMemo } from 'react'; import type { SearchHit } from '@kbn/es-types'; import { EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui'; +import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { useTimelineEventsDetails } from '../../timelines/containers/details'; import { getAlertIndexAlias } from '../../timelines/components/side_panel/event_details/helpers'; import { useSpaceId } from '../../common/hooks/use_space_id'; @@ -33,6 +34,10 @@ export interface RightPanelContext { * An object containing fields by type */ browserFields: BrowserFields | null; + /** + * An object with top level fields from the ECS object + */ + dataAsNestedObject: Ecs | null; /** * An array of field objects with category and value */ @@ -42,7 +47,7 @@ export interface RightPanelContext { */ searchHit: SearchHit | undefined; /** - * + * Retrieves searchHit values for the provided field */ getFieldsData: (field: string) => unknown | unknown[]; } @@ -65,12 +70,13 @@ export const RightPanelProvider = ({ id, indexName, children }: RightPanelProvid ? SourcererScopeName.detections : SourcererScopeName.default; const sourcererDataView = useSourcererDataView(sourcererScope); - const [loading, dataFormattedForFieldBrowser, searchHit] = useTimelineEventsDetails({ - indexName: eventIndex, - eventId: id ?? '', - runtimeMappings: sourcererDataView.runtimeMappings, - skip: !id, - }); + const [loading, dataFormattedForFieldBrowser, searchHit, dataAsNestedObject] = + useTimelineEventsDetails({ + indexName: eventIndex, + eventId: id ?? '', + runtimeMappings: sourcererDataView.runtimeMappings, + skip: !id, + }); const getFieldsData = useGetFieldsData(searchHit?.fields); const contextValue = useMemo( @@ -80,6 +86,7 @@ export const RightPanelProvider = ({ id, indexName, children }: RightPanelProvid eventId: id, indexName, browserFields: sourcererDataView.browserFields, + dataAsNestedObject: dataAsNestedObject as unknown as Ecs, dataFormattedForFieldBrowser, searchHit: searchHit as SearchHit, getFieldsData, @@ -89,6 +96,7 @@ export const RightPanelProvider = ({ id, indexName, children }: RightPanelProvid id, indexName, sourcererDataView.browserFields, + dataAsNestedObject, dataFormattedForFieldBrowser, searchHit, getFieldsData, diff --git a/x-pack/plugins/security_solution/public/flyout/right/mocks/mock_context.ts b/x-pack/plugins/security_solution/public/flyout/right/mocks/mock_context.ts index d87a230429fd9..6765589b668da 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/mocks/mock_context.ts +++ b/x-pack/plugins/security_solution/public/flyout/right/mocks/mock_context.ts @@ -24,23 +24,21 @@ export const mockGetFieldsData = (field: string): string[] => { }; /** - * Mock an array that will allow rendering a correct header: - * - rule name - * - timestamp + * Mock an array of fields for an alert */ export const mockDataFormattedForFieldBrowser = [ { category: 'kibana', field: 'kibana.alert.rule.uuid', - values: ['123'], - originalValue: ['123'], + values: ['rule-uuid'], + originalValue: ['rule-uuid'], isObjectArray: false, }, { category: 'kibana', field: 'kibana.alert.rule.name', - values: ['test'], - originalValue: ['test'], + values: ['rule-name'], + originalValue: ['rule-name'], isObjectArray: false, }, { @@ -50,4 +48,66 @@ export const mockDataFormattedForFieldBrowser = [ originalValue: ['2023-01-01T01:01:01.000Z'], isObjectArray: false, }, + { + category: 'kibana', + field: 'kibana.alert.rule.description', + values: ['rule-description'], + originalValue: ['rule-description'], + isObjectArray: false, + }, ]; + +/** + * Mock an object of nested properties for an alert + */ +export const mockDataAsNestedObject = { + _id: '123', + '@timestamp': ['2023-01-01T01:01:01.000Z'], + event: { + category: ['malware'], + kind: ['signal'], + }, + host: { + name: ['host-name'], + }, + kibana: { + alert: { + rule: { + name: ['rule-name'], + }, + severity: ['low'], + }, + }, + process: { + name: ['process-name'], + }, +}; + +/** + * Mock the document result of the search for an alert + */ +export const mockSearchHit = { + fields: { + 'kibana.alert.rule.parameters': [ + { + threat: [ + { + framework: 'MITRE ATT&CK', + tactic: { + id: '123', + reference: 'https://attack.mitre.org/tactics/123', + name: 'Tactic', + }, + technique: [ + { + id: '456', + reference: 'https://attack.mitre.org/techniques/456', + name: 'Technique', + }, + ], + }, + ], + }, + ], + }, +}; diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.tsx b/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.tsx index e4b974f6234fe..54322959d5326 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/tabs/json_tab.tsx @@ -8,8 +8,9 @@ import { EuiEmptyPrompt } from '@elastic/eui'; import type { FC } from 'react'; import React, { memo } from 'react'; +import { DOCUMENT_ERROR_DETAILS, DOCUMENT_ERROR_TITLE } from './translations'; import { JSON_TAB_ERROR_TEST_ID } from './test_ids'; -import { ERROR_MESSAGE, ERROR_TITLE } from './translations'; +import { ERROR_TITLE, ERROR_MESSAGE } from '../../shared/translations'; import { JsonView } from '../../../common/components/event_details/json_view'; import { useRightPanelContext } from '../context'; @@ -24,8 +25,8 @@ export const JsonTab: FC = memo(() => { {ERROR_TITLE}} - body={

{ERROR_MESSAGE}

} + title={

{ERROR_TITLE(DOCUMENT_ERROR_TITLE)}

} + body={

{ERROR_MESSAGE(DOCUMENT_ERROR_DETAILS)}

} data-test-subj={JSON_TAB_ERROR_TEST_ID} /> ); diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/overview_tab.tsx b/x-pack/plugins/security_solution/public/flyout/right/tabs/overview_tab.tsx index 0161f198f097f..d5da888c153fb 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/overview_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/tabs/overview_tab.tsx @@ -7,9 +7,9 @@ import type { FC } from 'react'; import React, { memo } from 'react'; -import { EuiPanel } from '@elastic/eui'; +import { EuiHorizontalRule, EuiPanel } from '@elastic/eui'; +import { DescriptionSection } from '../components/description_section'; import { HighlightedFields } from '../components/highlighted_fields'; -import { MitreAttack } from '../components/mitre_attack'; /** * Overview view displayed in the document details expandable flyout right section @@ -17,7 +17,8 @@ import { MitreAttack } from '../components/mitre_attack'; export const OverviewTab: FC = memo(() => { return ( <> - + + diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx b/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx index 949679d27de44..7f3d0f45d63af 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/tabs/table_tab.tsx @@ -8,7 +8,8 @@ import type { FC } from 'react'; import React, { memo } from 'react'; import { EuiEmptyPrompt } from '@elastic/eui'; -import { ERROR_MESSAGE, ERROR_TITLE } from './translations'; +import { DOCUMENT_ERROR_DETAILS, DOCUMENT_ERROR_TITLE } from './translations'; +import { ERROR_TITLE, ERROR_MESSAGE } from '../../shared/translations'; import { TimelineTabs } from '../../../../common/types'; import { EventFieldsBrowser } from '../../../common/components/event_details/event_fields_browser'; import { useRightPanelContext } from '../context'; @@ -25,8 +26,8 @@ export const TableTab: FC = memo(() => { {ERROR_TITLE}} - body={

{ERROR_MESSAGE}

} + title={

{ERROR_TITLE(DOCUMENT_ERROR_TITLE)}

} + body={

{ERROR_MESSAGE(DOCUMENT_ERROR_DETAILS)}

} data-test-subj={TABLE_TAB_ERROR_TEST_ID} /> ); diff --git a/x-pack/plugins/security_solution/public/flyout/right/tabs/translations.ts b/x-pack/plugins/security_solution/public/flyout/right/tabs/translations.ts index 0f0a4aef48dc0..741a12676a094 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/tabs/translations.ts +++ b/x-pack/plugins/security_solution/public/flyout/right/tabs/translations.ts @@ -7,14 +7,16 @@ import { i18n } from '@kbn/i18n'; -export const ERROR_TITLE = i18n.translate( - 'xpack.securitySolution.flyout.documentDetails.errorTitle', +export const DOCUMENT_ERROR_TITLE = i18n.translate( + 'xpack.securitySolution.flyout.documentErrorTitle', { - defaultMessage: 'Unable to display document information', + defaultMessage: 'document information', } ); -export const ERROR_MESSAGE = i18n.translate( - 'xpack.securitySolution.flyout.documentDetails.errorMessage', - { defaultMessage: 'There was an error displaying the document fields and values' } +export const DOCUMENT_ERROR_DETAILS = i18n.translate( + 'xpack.securitySolution.flyout.documentErrorMessage', + { + defaultMessage: 'the document fields and values', + } ); diff --git a/x-pack/plugins/security_solution/public/flyout/shared/translations.ts b/x-pack/plugins/security_solution/public/flyout/shared/translations.ts new file mode 100644 index 0000000000000..aa131a1e76a28 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/shared/translations.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 { i18n } from '@kbn/i18n'; + +export const ERROR_TITLE = (title: string) => + i18n.translate('xpack.securitySolution.flyout.errorTitle', { + values: { title }, + defaultMessage: 'Unable to display {title}', + }); + +export const ERROR_MESSAGE = (message: string) => + i18n.translate('xpack.securitySolution.flyout.errorMessage', { + values: { message }, + defaultMessage: 'There was an error displaying {message}', + }); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.test.tsx index 83c4c69b9fe1c..a0379844c2d2f 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.test.tsx @@ -17,6 +17,7 @@ import { ExecuteActionHostResponseOutput, type ExecuteActionHostResponseOutputProps, } from './execute_action_host_response_output'; +import { getEmptyValue } from '@kbn/cases-plugin/public/components/empty_value'; describe('When using the `ExecuteActionHostResponseOutput` component', () => { let render: () => ReturnType; @@ -53,6 +54,44 @@ describe('When using the `ExecuteActionHostResponseOutput` component', () => { expect(accordionOutputButton.className).toContain('isOpen'); }); + it('should show `-` when no output content', async () => { + (renderProps.action as ActionDetails).outputs = { + 'agent-a': { + type: 'json', + content: { + ...(renderProps.action as ActionDetails)?.outputs?.['agent-a'].content, + stdout: undefined, + }, + }, + }; + render(); + const accordionOutputButton = Array.from( + renderResult.getByTestId('test').querySelectorAll('.euiAccordion') + )[0]; + expect(accordionOutputButton.textContent).toContain( + `Execution output (truncated)${getEmptyValue()}` + ); + }); + + it('should show `-` when no error content', async () => { + (renderProps.action as ActionDetails).outputs = { + 'agent-a': { + type: 'json', + content: { + ...(renderProps.action as ActionDetails)?.outputs?.['agent-a'].content, + stderr: undefined, + }, + }, + }; + render(); + const accordionErrorButton = Array.from( + renderResult.getByTestId('test').querySelectorAll('.euiAccordion') + )[1]; + expect(accordionErrorButton.textContent).toContain( + `Execution error (truncated)${getEmptyValue()}` + ); + }); + it('should show nothing when no output in action details', () => { (renderProps.action as ActionDetails).outputs = {}; render(); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.tsx index f386195fd6467..f7e011f6ed120 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_execute_action/execute_action_host_response_output.tsx @@ -13,6 +13,9 @@ import type { MaybeImmutable, ResponseActionExecuteOutputContent, } from '../../../../common/endpoint/types'; +import { getEmptyValue } from '../../../common/components/empty_value'; + +const emptyValue = getEmptyValue(); const ACCORDION_BUTTON_TEXT = Object.freeze({ output: { @@ -53,7 +56,7 @@ interface ExecuteActionOutputProps { } const ExecutionActionOutputAccordion = memo( - ({ content, initialIsOpen = false, isTruncated = false, textSize, type }) => { + ({ content = emptyValue, initialIsOpen = false, isTruncated = false, textSize, type }) => { const id = useGeneratedHtmlId({ prefix: 'executeActionOutputAccordions', suffix: type, @@ -103,6 +106,7 @@ export const ExecuteActionHostResponseOutput = memo + + + + { 'Command execution was successful.' ); }); + + await waitFor(() => { + expect(renderResult.getByTestId('executeSuccess').textContent).toEqual( + 'Command execution was successful.Click here to download full output(ZIP file passcode: elastic).Files are periodically deleted to clear storage space. Download and save file locally if needed.' + ); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/status_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/status_action.tsx index 342e7654ec390..94b7aa9dd5160 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/status_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/status_action.tsx @@ -165,6 +165,16 @@ export const EndpointStatusActionResult = memo< ), description: {agentStatus()}, }, + { + title: ( + + {i18n.translate('xpack.securitySolution.endpointResponseActions.status.platform', { + defaultMessage: 'Platform', + })} + + ), + description: {endpointDetails.metadata.host.os.full}, + }, { title: ( @@ -189,6 +199,37 @@ export const EndpointStatusActionResult = memo< ), }, + { + title: ( + + {i18n.translate( + 'xpack.securitySolution.endpointResponseActions.status.appliedPolicyVersion', + { + defaultMessage: 'Policy version', + } + )} + + ), + description: ( + + {`v${endpointDetails.metadata.Endpoint.policy.applied.endpoint_policy_version}`} + + ), + }, + { + title: ( + + {i18n.translate('xpack.securitySolution.endpointResponseActions.status.policyName', { + defaultMessage: 'Policy name', + })} + + ), + description: ( + + {endpointDetails.metadata.Endpoint.policy.applied.name} + + ), + }, { title: ( @@ -205,7 +246,6 @@ export const EndpointStatusActionResult = memo< { defaultMessage: 'Last active' } )} value={endpointDetails.metadata['@timestamp']} - className="eui-textTruncate" /> ), diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_endpoint_info.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_endpoint_info.test.tsx index 78667399f04d9..4941fd59686cc 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_endpoint_info.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_endpoint_info.test.tsx @@ -62,4 +62,8 @@ describe('Responder header endpoint info', () => { const lastUpdated = await renderResult.findByTestId('responderHeaderLastSeen'); expect(lastUpdated).toBeTruthy(); }); + it('should show platform icon', async () => { + const platformIcon = await renderResult.findByTestId('responderHeaderEndpointPlatformIcon'); + expect(platformIcon).toBeTruthy(); + }); }); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_endpoint_info.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_endpoint_info.tsx index 37bfb77ce8a96..2ffcf76b8ba01 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_endpoint_info.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/header_endpoint_info.tsx @@ -10,15 +10,25 @@ import { EuiFlexGroup, EuiFlexItem, EuiText, - EuiLoadingContent, + EuiSkeletonText, EuiToolTip, EuiSpacer, } from '@elastic/eui'; +import { euiStyled } from '@kbn/kibana-react-plugin/common'; import { FormattedMessage, FormattedRelative } from '@kbn/i18n-react'; import { useGetEndpointDetails } from '../../../hooks/endpoint/use_get_endpoint_details'; import type { EndpointHostIsolationStatusProps } from '../../../../common/components/endpoint/host_isolation'; import { EndpointAgentAndIsolationStatus } from '../../endpoint_agent_and_isolation_status'; import { useGetEndpointPendingActionsSummary } from '../../../hooks/response_actions/use_get_endpoint_pending_actions_summary'; +import type { Platform } from './platforms'; +import { PlatformIcon } from './platforms'; + +const IconContainer = euiStyled.div` + height: 100%; + display: flex; + align-items: center; + justify-content: center; +`; interface HeaderEndpointInfoProps { endpointId: string; @@ -48,7 +58,7 @@ export const HeaderEndpointInfo = memo(({ endpointId }) }, [endpointPendingActions?.data]); if (isFetching && endpointPendingActions === undefined) { - return ; + return ; } if (!endpointDetails) { @@ -56,41 +66,53 @@ export const HeaderEndpointInfo = memo(({ endpointId }) } return ( - + + + + + + - - - - -
{endpointDetails.metadata.host.name}
-
-
+ + + + + + +
{endpointDetails.metadata.host.name}
+
+
+
+ + + +
- + + + , + }} + /> +
- - - - , - }} - /> - -
); }); diff --git a/x-pack/plugins/infra/public/containers/source_id/index.ts b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/index.tsx similarity index 80% rename from x-pack/plugins/infra/public/containers/source_id/index.ts rename to x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/index.tsx index 158169c82f897..7c473ddf63bdb 100644 --- a/x-pack/plugins/infra/public/containers/source_id/index.ts +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/index.tsx @@ -5,4 +5,4 @@ * 2.0. */ -export * from './source_id'; +export { PlatformIcon, type Platform } from './platform_icon'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/logos/linux.svg b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/logos/linux.svg new file mode 100644 index 0000000000000..5325e16edfa5f --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/logos/linux.svg @@ -0,0 +1 @@ + diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/logos/macos.svg b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/logos/macos.svg new file mode 100644 index 0000000000000..07c683d2d2274 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/logos/macos.svg @@ -0,0 +1 @@ + diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/logos/windows.svg b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/logos/windows.svg new file mode 100644 index 0000000000000..5f34665ffe409 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/logos/windows.svg @@ -0,0 +1 @@ + diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/platform_icon.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/platform_icon.test.tsx new file mode 100644 index 0000000000000..c528134f2f106 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/platform_icon.test.tsx @@ -0,0 +1,38 @@ +/* + * 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 type { AppContextTestRender } from '../../../../../common/mock/endpoint'; +import { createAppRootMockRenderer } from '../../../../../common/mock/endpoint'; +import { PlatformIcon, type PlatformIconProps } from './platform_icon'; + +describe('PlatformIcon', () => { + let render: (props: PlatformIconProps) => ReturnType; + let renderResult: ReturnType; + let mockedContext: AppContextTestRender; + + beforeEach(() => { + mockedContext = createAppRootMockRenderer(); + render = (props) => + (renderResult = mockedContext.render( + + )); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it.each(['linux', 'macos', 'windows', 'unknown'] as Array)( + 'should render icon for %s', + (platform) => { + render({ platform }); + const icon = renderResult.getByTestId('test'); + expect(icon).toBeTruthy(); + } + ); +}); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/platform_icon.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/platform_icon.tsx new file mode 100644 index 0000000000000..6aa9c0853f206 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/components/platforms/platform_icon.tsx @@ -0,0 +1,49 @@ +/* + * 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 { EuiIcon, type EuiIconProps } from '@elastic/eui'; +import React, { memo, useMemo } from 'react'; +import linuxSvg from './logos/linux.svg'; +import windowsSvg from './logos/windows.svg'; +import macosSvg from './logos/macos.svg'; + +export type Platform = 'macos' | 'linux' | 'windows'; +const getPlatformIcon = (platform: Platform): string | null => { + switch (platform) { + case 'macos': + return macosSvg; + case 'linux': + return linuxSvg; + case 'windows': + return windowsSvg; + default: + return null; + } +}; + +export interface PlatformIconProps { + platform: Platform; + size?: EuiIconProps['size']; + 'data-test-subj'?: string; +} + +export const PlatformIcon = memo( + ({ platform, size = 'xl', 'data-test-subj': dataTestSubj }) => { + const platformIcon = useMemo(() => getPlatformIcon(platform), [platform]); + + return ( + + ); + } +); + +PlatformIcon.displayName = 'PlatformIcon'; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.test.ts b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.test.ts index 37cfa4b393eaa..4d2ced7be9e61 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.test.ts +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.test.ts @@ -32,14 +32,14 @@ describe('Endpoint Responder - Utilities', () => { it('should return `undefined` if timeout does not match pattern', () => { expect(parsedExecuteTimeout('23d')).toEqual(undefined); }); - it('should return correct milliseconds for hours', () => { - expect(parsedExecuteTimeout('23h')).toEqual(82800000); + it('should return correct seconds for hours', () => { + expect(parsedExecuteTimeout('23h')).toEqual(82800); }); - it('should return correct milliseconds for minutes', () => { - expect(parsedExecuteTimeout('23m')).toEqual(1380000); + it('should return correct seconds for minutes', () => { + expect(parsedExecuteTimeout('23m')).toEqual(1380); }); - it('should return correct milliseconds for seconds', () => { - expect(parsedExecuteTimeout('23s')).toEqual(23000); + it('should return correct seconds for seconds', () => { + expect(parsedExecuteTimeout('23s')).toEqual(23); }); }); }); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.ts b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.ts index 84c69dcaec0fe..d5c40347ebf80 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.ts +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/utils.ts @@ -19,14 +19,14 @@ export const parsedPidOrEntityIdParameter = (parameters: { }; }; -const UNIT_TO_MILLISECONDS = (value: number) => ({ - h: (): number => value * 60 * 60 * 1000, - m: (): number => value * 60 * 1000, - s: (): number => value * 1000, +const UNIT_TO_SECONDS = (value: number) => ({ + h: (): number => value * 60 * 60, + m: (): number => value * 60, + s: (): number => value, }); -const convertToMilliseconds = (value: number, unit: 'h' | 'm' | 's'): number => - UNIT_TO_MILLISECONDS(value)[unit](); +const convertToSeconds = (value: number, unit: 'h' | 'm' | 's'): number => + UNIT_TO_SECONDS(value)[unit](); const EXECUTE_TIMEOUT_REGEX = /^\d+(?=(h|m|s){1}$)/; export const validateUnitOfTime = (value: string): boolean => EXECUTE_TIMEOUT_REGEX.test(value); @@ -37,5 +37,5 @@ export const parsedExecuteTimeout = (timeout?: string): undefined | number => { return; } - return convertToMilliseconds(Number(timeoutMatch[0]), timeoutMatch[1] as 'h' | 'm' | 's'); + return convertToSeconds(Number(timeoutMatch[0]), timeoutMatch[1] as 'h' | 'm' | 's'); }; diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/action_log_expanded_tray.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/action_log_expanded_tray.tsx index 5be50866a9130..c0157c7dbda17 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/action_log_expanded_tray.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/action_log_expanded_tray.tsx @@ -8,9 +8,8 @@ import React, { memo, useMemo } from 'react'; import { EuiCodeBlock, EuiFlexGroup, EuiFlexItem, EuiDescriptionList } from '@elastic/eui'; import { css, euiStyled } from '@kbn/kibana-react-plugin/common'; -import { i18n } from '@kbn/i18n'; import { useUserPrivileges } from '../../../../common/components/user_privileges'; -import { OUTPUT_MESSAGES } from '../translations'; +import { OUTPUT_MESSAGES, EXECUTE_FILE_LINK_TITLE } from '../translations'; import { getUiCommand } from './hooks'; import { useTestIdGenerator } from '../../../hooks/use_test_id_generator'; import { ResponseActionFileDownloadLink } from '../../response_action_file_download_link'; @@ -18,10 +17,7 @@ import { ExecuteActionHostResponseOutput } from '../../endpoint_execute_action'; import { getEmptyValue } from '../../../../common/components/empty_value'; import { type ActionDetails, type MaybeImmutable } from '../../../../../common/endpoint/types'; -const EXECUTE_FILE_LINK_TITLE = i18n.translate( - 'xpack.securitySolution.responseActionExecuteDownloadLink.downloadButtonLabel', - { defaultMessage: 'Click here to download full output' } -); + const emptyValue = getEmptyValue(); const customDescriptionListCss = css` @@ -83,8 +79,11 @@ const OutputContent = memo<{ action: MaybeImmutable; 'data-test-s ({ action, 'data-test-subj': dataTestSubj }) => { const getTestId = useTestIdGenerator(dataTestSubj); - const { canWriteFileOperations, canWriteExecuteOperations } = - useUserPrivileges().endpointPrivileges; + const { + canWriteFileOperations, + canReadActionsLogManagement, + canAccessEndpointActionsLogManagement, + } = useUserPrivileges().endpointPrivileges; const { command, isCompleted, isExpired, wasSuccessful } = action; @@ -124,7 +123,9 @@ const OutputContent = memo<{ action: MaybeImmutable; 'data-test-s @@ -188,7 +189,7 @@ export const ActionsLogExpandedTray = memo<{ }, { title: OUTPUT_MESSAGES.expandSection.parameters, - description: parametersList ? parametersList : emptyValue, + description: parametersList ? parametersList.join(', ') : emptyValue, }, { title: OUTPUT_MESSAGES.expandSection.comment, diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/response_actions_log.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/response_actions_log.test.tsx index b8baada921076..7a2bf278b811d 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/response_actions_log.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/response_actions_log.test.tsx @@ -156,7 +156,8 @@ const getBaseMockedActionList = () => ({ error: null, refetch: jest.fn(), }); -describe('Response actions history', () => { +// FLAKY: https://github.com/elastic/kibana/issues/145635 +describe.skip('Response actions history', () => { const testPrefix = 'test'; const hostsFilterPrefix = 'hosts-filter'; @@ -717,10 +718,11 @@ describe('Response actions history', () => { expect(executeAccordions).toBeTruthy(); }); - it('should not contain full output download link in expanded row for `execute` action WITHOUT execute operation privilege', async () => { + it('should not contain full output download link in expanded row for `execute` action WITHOUT Actions Log privileges', async () => { useUserPrivilegesMock.mockReturnValue({ endpointPrivileges: getEndpointAuthzInitialStateMock({ - canWriteExecuteOperations: false, + canAccessEndpointActionsLogManagement: false, + canReadActionsLogManagement: false, }), }); @@ -740,6 +742,45 @@ describe('Response actions history', () => { expect(output).toBeTruthy(); expect(output.textContent).toContain('execute completed successfully'); }); + + it.each(['canAccessEndpointActionsLogManagement', 'canReadActionsLogManagement'])( + 'should contain full output download link in expanded row for `execute` action WITH %s ', + async (privilege) => { + const initialActionsLogPrivileges = { + canAccessEndpointActionsLogManagement: false, + canReadActionsLogManagement: false, + }; + useUserPrivilegesMock.mockReturnValue({ + endpointPrivileges: getEndpointAuthzInitialStateMock({ + ...initialActionsLogPrivileges, + [privilege]: true, + }), + }); + + useGetEndpointActionListMock.mockReturnValue({ + ...getBaseMockedActionList(), + data: await getActionListMock({ actionCount: 1, commands: ['execute'] }), + }); + + mockUseGetFileInfo = { + isFetching: false, + error: null, + data: apiMocks.responseProvider.fileInfo(), + }; + + render(); + const { getByTestId } = renderResult; + + const expandButton = getByTestId(`${testPrefix}-expand-button`); + userEvent.click(expandButton); + + const output = getByTestId(`${testPrefix}-getExecuteLink`); + expect(output).toBeTruthy(); + expect(output.textContent).toEqual( + 'Click here to download full output(ZIP file passcode: elastic).Files are periodically deleted to clear storage space. Download and save file locally if needed.' + ); + } + ); }); }); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/translations.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/translations.tsx index d185500612deb..fb5a00a3dba63 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/translations.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/translations.tsx @@ -192,3 +192,8 @@ export const ARIA_LABELS = Object.freeze({ defaultMessage: 'Expand', }), }); + +export const EXECUTE_FILE_LINK_TITLE = i18n.translate( + 'xpack.securitySolution.responseActionExecuteDownloadLink.downloadButtonLabel', + { defaultMessage: 'Click here to download full output' } +); diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/index_endpoint_hosts.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/index_endpoint_hosts.ts index f558114b24304..0821764bf860b 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/index_endpoint_hosts.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/index_endpoint_hosts.ts @@ -20,7 +20,7 @@ export const indexEndpointHosts = ( count?: number; } = {} ): Cypress.Chainable => { - return cy.task('indexEndpointHosts', options).then((indexHosts) => { + return cy.task('indexEndpointHosts', options, { timeout: 120000 }).then((indexHosts) => { return { data: indexHosts, cleanup: () => { 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 a19fe43bd36a7..35a991e6ae7ad 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 @@ -187,7 +187,7 @@ const DataQualityComponent: React.FC = () => { ); const { cases } = useKibana().services; - const createCaseFlyout = cases.hooks.getUseCasesAddToNewCaseFlyout({ + const createCaseFlyout = cases.hooks.useCasesAddToNewCaseFlyout({ toastContent: i18n.ADD_TO_CASE_SUCCESS, }); const openCreateCaseFlyout = useCallback( diff --git a/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/helpers.tsx b/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/helpers.tsx index f91a9eed0d165..5691c14d25b6c 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/helpers.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/side_panel/event_details/helpers.tsx @@ -20,6 +20,7 @@ export interface GetBasicDataFromDetailsData { ruleName: string; timestamp: string; data: TimelineEventsDetailsItem[] | null; + ruleDescription: string; } export const useBasicDataFromDetailsData = ( @@ -32,6 +33,11 @@ export const useBasicDataFromDetailsData = ( [data] ); + const ruleDescription = useMemo( + () => getFieldValue({ category: 'kibana', field: 'kibana.alert.rule.description' }, data), + [data] + ); + const alertId = useMemo(() => getFieldValue({ category: '_id', field: '_id' }, data), [data]); const agentId = useMemo( @@ -64,8 +70,9 @@ export const useBasicDataFromDetailsData = ( ruleName, timestamp, data, + ruleDescription, }), - [agentId, alertId, hostName, isAlert, ruleName, timestamp, userName, data] + [agentId, alertId, hostName, isAlert, ruleName, timestamp, userName, data, ruleDescription] ); }; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_loader.ts b/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_loader.ts index 4d16a0407b088..79b292314c696 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_loader.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/endpoint_loader.ts @@ -22,7 +22,7 @@ import { setupFleetForEndpoint } from '../../../../common/endpoint/data_loaders/ import { enableFleetServerIfNecessary } from '../../../../common/endpoint/data_loaders/index_fleet_server'; import { METADATA_DATASTREAM } from '../../../../common/endpoint/constants'; import { EndpointMetadataGenerator } from '../../../../common/endpoint/data_generators/endpoint_metadata_generator'; -import { getEndpointPackageInfo } from '../../../../common/endpoint/index_data'; +import { getEndpointPackageInfo } from '../../../../common/endpoint/utils/package'; import { ENDPOINT_ALERTS_INDEX, ENDPOINT_EVENTS_INDEX } from '../../common/constants'; let WAS_FLEET_SETUP_DONE = false; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/random_policy_id_generator.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/random_policy_id_generator.ts index 9c432f66c2a02..50f71ce8df9db 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/random_policy_id_generator.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/random_policy_id_generator.ts @@ -15,6 +15,7 @@ import { import { indexFleetEndpointPolicy } from '../../../common/endpoint/data_loaders/index_fleet_endpoint_policy'; import { setupFleetForEndpoint } from '../../../common/endpoint/data_loaders/setup_fleet_for_endpoint'; import type { GetPolicyListResponse } from '../../../public/management/pages/policy/types'; +import { getEndpointPackageInfo } from '../../../common/endpoint/utils/package'; const fetchEndpointPolicies = ( kbnClient: KbnClient @@ -35,7 +36,8 @@ export const randomPolicyIdGenerator: ( log: ToolingLog ) => Promise<() => string> = async (kbn, log) => { log.info('Setting up fleet'); - const fleetResponse = await setupFleetForEndpoint(kbn); + await setupFleetForEndpoint(kbn); + const endpointPackage = await getEndpointPackageInfo(kbn); log.info('Generarting test policies...'); const randomN = (max: number): number => Math.floor(Math.random() * max); @@ -50,7 +52,7 @@ export const randomPolicyIdGenerator: ( await indexFleetEndpointPolicy( kbn, `Policy for exceptions assignment ${i + 1}`, - fleetResponse.endpointPackage.version + endpointPackage.version ) ).integrationPolicies[0].id ); diff --git a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/elastic_endpoint.ts b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/elastic_endpoint.ts index 34d2036411280..e6de63c7ba510 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/elastic_endpoint.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/elastic_endpoint.ts @@ -15,7 +15,7 @@ import { type UpdatePackagePolicy, } from '@kbn/fleet-plugin/common'; import chalk from 'chalk'; -import { getEndpointPackageInfo } from '../../../common/endpoint/index_data'; +import { getEndpointPackageInfo } from '../../../common/endpoint/utils/package'; import { indexFleetEndpointPolicy } from '../../../common/endpoint/data_loaders/index_fleet_endpoint_policy'; import { fetchAgentPolicyEnrollmentKey, diff --git a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_policies/index.ts b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_policies/index.ts index 5367a606f66bd..e56d1ee1eb942 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_policies/index.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_policies/index.ts @@ -11,6 +11,7 @@ import { KbnClient } from '@kbn/test'; import { indexFleetEndpointPolicy } from '../../../common/endpoint/data_loaders/index_fleet_endpoint_policy'; import { setupFleetForEndpoint } from '../../../common/endpoint/data_loaders/setup_fleet_for_endpoint'; import { BaseDataGenerator } from '../../../common/endpoint/data_generators/base_data_generator'; +import { getEndpointPackageInfo } from '../../../common/endpoint/utils/package'; class EndpointPolicyGenerator extends BaseDataGenerator { public policyName(preFix: string | number = '') { @@ -30,7 +31,8 @@ export const cli = () => { log.info(`Creating ${count} endpoint policies...`); try { - const { endpointPackage } = await setupFleetForEndpoint(kbn); + await setupFleetForEndpoint(kbn); + const endpointPackage = await getEndpointPackageInfo(kbn); while (created < max) { created++; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts index c0ac9afe3fd48..138e52e0a1a0b 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts @@ -642,7 +642,7 @@ describe('Response actions', () => { expect(actionDocs[0].body!.EndpointActions.data.command).toEqual('execute'); const parameters = actionDocs[1].body!.data.parameters as ResponseActionsExecuteParameters; expect(parameters.command).toEqual('ls -al'); - expect(parameters.timeout).toEqual(14400000); // 4hrs + expect(parameters.timeout).toEqual(14400); // 4hrs in seconds expect(actionDocs[1].body!.data.command).toEqual('execute'); expect(mockResponse.ok).toBeCalled(); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/query_signals_route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/query_signals_route.test.ts index 8a8af78a9b86e..7c88d5c9192ee 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/query_signals_route.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/signals/query_signals_route.test.ts @@ -48,6 +48,20 @@ describe('query for signal', () => { ); }); + test('search on an index pattern without wildcard added', async () => { + const response = await server.inject( + getSignalsQueryRequest(), + requestContextMock.convertContext(context) + ); + + expect(response.status).toEqual(200); + expect(ruleDataClient.getReader).toHaveBeenCalledWith( + expect.objectContaining({ + namespace: 'default', + }) + ); + }); + test('returns 200 when using single agg', async () => { const response = await server.inject( getSignalsAggsQueryRequest(), diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/notifications/legacy_rules_notification_alert_type.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/notifications/legacy_rules_notification_alert_type.test.ts index 04a892427774e..a73561b7a34ff 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/notifications/legacy_rules_notification_alert_type.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/notifications/legacy_rules_notification_alert_type.test.ts @@ -53,6 +53,7 @@ describe('legacyRules_notification_alert_type', () => { tags: [], consumer: 'foo', producer: 'foo', + revision: 0, ruleTypeId: 'ruleType', ruleTypeName: 'Name of rule', enabled: true, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/route.ts index 25e971eadbeae..469d25e4b1c3f 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/route.ts @@ -223,6 +223,7 @@ export const previewRulesRoute = async ( createdAt: new Date(), createdBy: username ?? 'preview-created-by', producer: 'preview-producer', + revision: 0, ruleTypeId, ruleTypeName, updatedAt: new Date(), diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.mock.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.mock.ts index 7c12639d7efdf..10a213a5d8b2f 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.mock.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_schema/model/rule_schemas.mock.ts @@ -216,6 +216,7 @@ export const getRuleConfigMock = (type: string = 'rule-type'): SanitizedRuleConf ruleTypeId: `${type}-id`, ruleTypeName: type, muteAll: false, + revision: 0, snoozeSchedule: [], }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/search_after_bulk_create.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/search_after_bulk_create.test.ts index 5cdc73d4015b4..8e71a4dce49aa 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/search_after_bulk_create.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/search_after_bulk_create.test.ts @@ -33,6 +33,7 @@ import { ALERT_RULE_NAME, ALERT_RULE_PARAMETERS, ALERT_RULE_PRODUCER, + ALERT_RULE_REVISION, ALERT_RULE_TAGS, ALERT_RULE_TYPE_ID, ALERT_RULE_UUID, @@ -71,6 +72,7 @@ describe('searchAfterAndBulkCreate', () => { [ALERT_RULE_EXECUTION_UUID]: '97e8f53a-4971-4935-bb54-9b8f86930cc7', [ALERT_RULE_NAME]: 'rule-name', [ALERT_RULE_PRODUCER]: 'siem', + [ALERT_RULE_REVISION]: 0, [ALERT_RULE_TYPE_ID]: 'siem.queryRule', [ALERT_RULE_UUID]: '2e051244-b3c6-4779-a241-e1b4f0beceb9', [SPACE_IDS]: ['default'], diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts index aa0b5d8a4d1fc..66d96c36d2eb9 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts @@ -716,6 +716,7 @@ async function invokeExecutor({ ruleTypeId: '', ruleTypeName: '', enabled: true, + revision: 0, schedule: { interval: '1h', }, diff --git a/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.test.ts index 3875f52dbfe52..11a02beddc96d 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.test.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.test.ts @@ -206,6 +206,7 @@ describe('ruleType', () => { ruleTypeId: '', ruleTypeName: '', enabled: true, + revision: 0, schedule: { interval: '1h', }, @@ -272,6 +273,7 @@ describe('ruleType', () => { ruleTypeId: '', ruleTypeName: '', enabled: true, + revision: 0, schedule: { interval: '1h', }, @@ -338,6 +340,7 @@ describe('ruleType', () => { ruleTypeId: '', ruleTypeName: '', enabled: true, + revision: 0, schedule: { interval: '1h', }, @@ -403,6 +406,7 @@ describe('ruleType', () => { ruleTypeId: '', ruleTypeName: '', enabled: true, + revision: 0, schedule: { interval: '1h', }, diff --git a/x-pack/plugins/synthetics/e2e/config.ts b/x-pack/plugins/synthetics/e2e/config.ts index 04eccf0d85d2a..458fbd4c2dccd 100644 --- a/x-pack/plugins/synthetics/e2e/config.ts +++ b/x-pack/plugins/synthetics/e2e/config.ts @@ -6,8 +6,8 @@ */ import { FtrConfigProviderContext } from '@kbn/test'; -import { argv } from '@kbn/observability-plugin/e2e/parse_args_params'; import { CA_CERT_PATH } from '@kbn/dev-utils'; +import { argv } from './helpers/parse_args_params'; import { readKibanaConfig } from './tasks/read_kibana_config'; const MANIFEST_KEY = 'xpack.uptime.service.manifestUrl'; const SERVICE_PASSWORD = 'xpack.uptime.service.password'; diff --git a/x-pack/plugins/observability/e2e/parse_args_params.ts b/x-pack/plugins/synthetics/e2e/helpers/parse_args_params.ts similarity index 100% rename from x-pack/plugins/observability/e2e/parse_args_params.ts rename to x-pack/plugins/synthetics/e2e/helpers/parse_args_params.ts diff --git a/x-pack/plugins/observability/e2e/record_video.ts b/x-pack/plugins/synthetics/e2e/helpers/record_video.ts similarity index 100% rename from x-pack/plugins/observability/e2e/record_video.ts rename to x-pack/plugins/synthetics/e2e/helpers/record_video.ts diff --git a/x-pack/plugins/observability/e2e/synthetics_runner.ts b/x-pack/plugins/synthetics/e2e/helpers/synthetics_runner.ts similarity index 98% rename from x-pack/plugins/observability/e2e/synthetics_runner.ts rename to x-pack/plugins/synthetics/e2e/helpers/synthetics_runner.ts index 66183218780f2..2a1ebce4126f2 100644 --- a/x-pack/plugins/observability/e2e/synthetics_runner.ts +++ b/x-pack/plugins/synthetics/e2e/helpers/synthetics_runner.ts @@ -13,7 +13,7 @@ import { PromiseType } from 'utility-types'; import { createApmUsers } from '@kbn/apm-plugin/server/test_helpers/create_apm_users/create_apm_users'; import { EsArchiver } from '@kbn/es-archiver'; -import { esArchiverUnload } from './tasks/es_archiver'; +import { esArchiverUnload } from '../tasks/es_archiver'; import { TestReporter } from './test_reporter'; export interface ArgParams { diff --git a/x-pack/plugins/observability/e2e/test_reporter.ts b/x-pack/plugins/synthetics/e2e/helpers/test_reporter.ts similarity index 100% rename from x-pack/plugins/observability/e2e/test_reporter.ts rename to x-pack/plugins/synthetics/e2e/helpers/test_reporter.ts diff --git a/x-pack/plugins/observability/e2e/utils.ts b/x-pack/plugins/synthetics/e2e/helpers/utils.ts similarity index 100% rename from x-pack/plugins/observability/e2e/utils.ts rename to x-pack/plugins/synthetics/e2e/helpers/utils.ts diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/add_monitor.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/add_monitor.journey.ts index 6f80a115b3b6e..38f0399243ec5 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/add_monitor.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/add_monitor.journey.ts @@ -6,7 +6,7 @@ */ import { v4 as uuidv4 } from 'uuid'; import { journey, step, expect, Page } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../helpers/record_video'; import { FormMonitorType } from '../../../common/runtime_types'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/alert_rules/default_status_alert.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/alert_rules/default_status_alert.journey.ts index ae8ffeed83431..b9fc467fc0bef 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/alert_rules/default_status_alert.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/alert_rules/default_status_alert.journey.ts @@ -9,7 +9,7 @@ import { journey, step, before, after, expect } from '@elastic/synthetics'; import { byTestId } from '@kbn/ux-plugin/e2e/journeys/utils'; import { RetryService } from '@kbn/ftr-common-functional-services'; import { v4 as uuidv4 } from 'uuid'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../../helpers/record_video'; import { getReasonMessage } from '../../../../server/legacy_uptime/lib/alerts/status_check'; import { syntheticsAppPageProvider } from '../../../page_objects/synthetics/synthetics_app'; import { SyntheticsServices } from '../services/synthetics_services'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/alerting_default.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/alerting_default.journey.ts index 4b6bd772840e6..a5430ab4e62de 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/alerting_default.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/alerting_default.journey.ts @@ -6,8 +6,8 @@ */ import { journey, step, expect, before, after } from '@elastic/synthetics'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; import { cleanSettings } from './services/settings'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/data_retention.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/data_retention.journey.ts index b6ff8dffbbf57..bbbf6a7e48aa9 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/data_retention.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/data_retention.journey.ts @@ -6,9 +6,9 @@ */ import { journey, step, expect, Page } from '@elastic/synthetics'; -import { assertText, byTestId } from '@kbn/observability-plugin/e2e/utils'; import { RetryService } from '@kbn/ftr-common-functional-services'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId, assertText } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; let page1: Page; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/detail_flyout.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/detail_flyout.ts index 66ca6c0ab4c25..2cd8c018e4032 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/detail_flyout.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/detail_flyout.ts @@ -6,7 +6,7 @@ */ import { expect, journey, step } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../helpers/record_video'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; journey('TestMonitorDetailFlyout', async ({ page, params }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/getting_started.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/getting_started.journey.ts index 5b8f6670c2f21..c52b2b5f1aa48 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/getting_started.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/getting_started.journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before, Page } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../helpers/record_video'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; import { cleanTestMonitors } from './services/add_monitor'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/global_parameters.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/global_parameters.journey.ts index 59b103d047250..8af902caf07db 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/global_parameters.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/global_parameters.journey.ts @@ -6,8 +6,8 @@ */ import { journey, step, before, after, expect } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; +import { byTestId } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { cleanTestParams } from './services/add_monitor'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/management_list.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/management_list.journey.ts index 685fe3986f23f..357ab213819eb 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/management_list.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/management_list.journey.ts @@ -6,8 +6,8 @@ */ import { journey, step, expect, before, after } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; -import { byTestId } from '@kbn/ux-plugin/e2e/journeys/utils'; +import { byTestId } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { addTestMonitor, cleanTestMonitors, diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_details_page/monitor_summary.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_details_page/monitor_summary.journey.ts index 67c227695d021..b450bd7983ff7 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_details_page/monitor_summary.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_details_page/monitor_summary.journey.ts @@ -8,8 +8,8 @@ import { journey, step, before, after } from '@elastic/synthetics'; import { byTestId } from '@kbn/ux-plugin/e2e/journeys/utils'; import { RetryService } from '@kbn/ftr-common-functional-services'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; import moment from 'moment'; +import { recordVideo } from '../../../helpers/record_video'; import { syntheticsAppPageProvider } from '../../../page_objects/synthetics/synthetics_app'; import { SyntheticsServices } from '../services/synthetics_services'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts index 758a3823332f2..fe4a36ba6e9ba 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts @@ -6,8 +6,8 @@ */ import { journey, step, expect, before, after } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; +import { byTestId } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { addTestMonitor, cleanTestMonitors, diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts index c592595e15eaf..29aeb474212c5 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts @@ -6,8 +6,8 @@ */ import { before, after, expect, journey, step } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; import { RetryService } from '@kbn/ftr-common-functional-services'; +import { recordVideo } from '../../helpers/record_video'; import { addTestMonitor, cleanTestMonitors, diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_search.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_search.journey.ts index 289b434b9e2c9..cb9983e830406 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_search.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_search.journey.ts @@ -6,8 +6,8 @@ */ import { before, expect, journey, step } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; import { RetryService } from '@kbn/ftr-common-functional-services'; +import { recordVideo } from '../../helpers/record_video'; import { addTestMonitor, cleanTestMonitors, diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts index bed3e5f55d056..cb8417450c96d 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts @@ -6,7 +6,7 @@ */ import { before, expect, journey, step } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../helpers/record_video'; import { addTestMonitor, cleanTestMonitors, diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/private_locations.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/private_locations.journey.ts index e9aec6dc3f1c4..a3ab5804db62c 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/private_locations.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/private_locations.journey.ts @@ -6,9 +6,9 @@ */ import { journey, step, before, after, expect } from '@elastic/synthetics'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; import { waitForLoadingToFinish } from '@kbn/ux-plugin/e2e/journeys/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { addTestMonitor, cleanPrivateLocations, diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/project_api_keys.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/project_api_keys.journey.ts index ffe083fcec77f..2421a31037eb1 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/project_api_keys.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/project_api_keys.journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../helpers/record_video'; journey('ProjectAPIKeys', async ({ page }) => { recordVideo(page); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/project_monitor_read_only.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/project_monitor_read_only.journey.ts index 404f593bbdaa9..dcd9a53f45b3a 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/project_monitor_read_only.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/project_monitor_read_only.journey.ts @@ -6,7 +6,7 @@ */ import { after, before, expect, journey, step } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../helpers/record_video'; import { cleanTestMonitors, enableMonitorManagedViaApi } from './services/add_monitor'; import { getMonitor } from './services/get_monitor'; import { addTestMonitorProject } from './services/add_monitor_project'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/step_details.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/step_details.journey.ts index 94172d2c2bde6..c11515d0a44da 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/step_details.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/step_details.journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, before, after } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../helpers/record_video'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; import { SyntheticsServices } from './services/synthetics_services'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_now_mode.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_now_mode.journey.ts index 6c61272b24b91..df7d3da5bd177 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_now_mode.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_now_mode.journey.ts @@ -7,8 +7,8 @@ import { journey, step, before, after, expect } from '@elastic/synthetics'; import { RetryService } from '@kbn/ftr-common-functional-services'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; +import { byTestId } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; import { SyntheticsServices } from './services/synthetics_services'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_run_details.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_run_details.journey.ts index e9f931e64bf04..080ca78d71358 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_run_details.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_run_details.journey.ts @@ -6,8 +6,8 @@ */ import { journey, step, before, after } from '@elastic/synthetics'; -import { byTestId } from '@kbn/ux-plugin/e2e/journeys/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; import { SyntheticsServices } from './services/synthetics_services'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/default_email_settings.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/default_email_settings.ts index a2baf2f7b3371..17a6ee07aa1c7 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/default_email_settings.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/default_email_settings.ts @@ -13,13 +13,14 @@ */ import { journey, step, before } from '@elastic/synthetics'; + import { assertNotText, - assertText, byTestId, + assertText, waitForLoadingToFinish, -} from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +} from '../../../helpers/utils'; +import { recordVideo } from '../../../helpers/record_video'; import { settingsPageProvider } from '../../../page_objects/uptime/settings'; journey('DefaultEmailSettings', async ({ page, params }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/status_alert_flyouts_in_alerting_app.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/status_alert_flyouts_in_alerting_app.ts index 6f058d33d7714..b3cdfbe134935 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/status_alert_flyouts_in_alerting_app.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/status_alert_flyouts_in_alerting_app.ts @@ -6,9 +6,9 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; -import { assertText, byTestId, waitForLoadingToFinish } from '@kbn/observability-plugin/e2e/utils'; import { RetryService } from '@kbn/ftr-common-functional-services'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId, assertText, waitForLoadingToFinish } from '../../../helpers/utils'; +import { recordVideo } from '../../../helpers/record_video'; import { loginPageProvider } from '../../../page_objects/login'; journey('StatusFlyoutInAlertingApp', async ({ page, params }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/tls_alert_flyouts_in_alerting_app.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/tls_alert_flyouts_in_alerting_app.ts index 8b36867fed7a5..f8ac13ff0361a 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/tls_alert_flyouts_in_alerting_app.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/tls_alert_flyouts_in_alerting_app.ts @@ -6,8 +6,8 @@ */ import { journey, step, before, expect } from '@elastic/synthetics'; -import { assertText, byTestId, waitForLoadingToFinish } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId, assertText, waitForLoadingToFinish } from '../../../helpers/utils'; +import { recordVideo } from '../../../helpers/record_video'; import { loginPageProvider } from '../../../page_objects/login'; journey('TlsFlyoutInAlertingApp', async ({ page, params }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/data_view_permissions.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/data_view_permissions.ts index 0955a1c73ba2a..f8b74dabc027b 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/data_view_permissions.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/data_view_permissions.ts @@ -6,13 +6,9 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; -import { - byTestId, - TIMEOUT_60_SEC, - waitForLoadingToFinish, -} from '@kbn/observability-plugin/e2e/utils'; import { callKibana } from '@kbn/apm-plugin/server/test_helpers/create_apm_users/helpers/call_kibana'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId, TIMEOUT_60_SEC, waitForLoadingToFinish } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { loginPageProvider } from '../../page_objects/login'; journey('DataViewPermissions', async ({ page, params }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/locations/locations.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/locations/locations.ts index 54f1c1568cc75..fc307f10d0c00 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/locations/locations.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/locations/locations.ts @@ -6,7 +6,7 @@ */ import { journey, step, before, Page } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../../helpers/record_video'; import { makeChecksWithStatus } from '../../../helpers/make_checks'; import { monitorDetailsPageProvider } from '../../../page_objects/uptime/monitor_details'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details.journey.ts index e386c8717d39a..2265af524b2c2 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details.journey.ts @@ -7,7 +7,7 @@ import { v4 as uuidv4 } from 'uuid'; import { journey, step, expect, after, Page } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../helpers/record_video'; import { monitorManagementPageProvider } from '../../page_objects/uptime/monitor_management'; journey('MonitorDetails', async ({ page, params }: { page: Page; params: any }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_alerts.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_alerts.journey.ts index 75f66f41b2dbe..41c51a9bba00e 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_alerts.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_alerts.journey.ts @@ -7,8 +7,8 @@ import { journey, step, expect, before, Page } from '@elastic/synthetics'; import { noop } from 'lodash'; -import { byTestId, delay } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId, delay } from '../../../helpers/utils'; +import { recordVideo } from '../../../helpers/record_video'; import { monitorDetailsPageProvider } from '../../../page_objects/uptime/monitor_details'; const dateRangeStart = '2019-09-10T12:40:08.078Z'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_details.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_details.journey.ts index a71a4526db063..e395fdae45713 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_details.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_details.journey.ts @@ -6,8 +6,8 @@ */ import { journey, step, before, Page } from '@elastic/synthetics'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId } from '../../../helpers/utils'; +import { recordVideo } from '../../../helpers/record_video'; import { monitorDetailsPageProvider } from '../../../page_objects/uptime/monitor_details'; const dateRangeStart = '2019-09-10T12:40:08.078Z'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/ping_redirects.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/ping_redirects.journey.ts index c7ca067a234de..9d753a75c92d7 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/ping_redirects.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/ping_redirects.journey.ts @@ -6,8 +6,8 @@ */ import { journey, step, expect, before, Page } from '@elastic/synthetics'; -import { byTestId, delay } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId, delay } from '../../../helpers/utils'; +import { recordVideo } from '../../../helpers/record_video'; import { makeChecksWithStatus } from '../../../helpers/make_checks'; import { monitorDetailsPageProvider } from '../../../page_objects/uptime/monitor_details'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management.journey.ts index f5a5ed151c056..df39cf7cc52eb 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management.journey.ts @@ -7,8 +7,8 @@ import { v4 as uuidv4 } from 'uuid'; import { journey, step, expect, after, Page } from '@elastic/synthetics'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { monitorManagementPageProvider } from '../../page_objects/uptime/monitor_management'; import { DataStream } from '../../../common/runtime_types/monitor_management'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management_enablement.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management_enablement.journey.ts index 6d4d522364d4c..b62f6b3f5a3f4 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management_enablement.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management_enablement.journey.ts @@ -5,7 +5,7 @@ * 2.0. */ import { journey, step, expect, after, Page } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../../helpers/record_video'; import { monitorManagementPageProvider } from '../../page_objects/uptime/monitor_management'; journey( diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_name.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_name.journey.ts index 972b64d39217b..5c35c7de082a0 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_name.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_name.journey.ts @@ -6,8 +6,8 @@ */ import { v4 as uuidv4 } from 'uuid'; import { journey, step, expect, Page } from '@elastic/synthetics'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; import { monitorManagementPageProvider } from '../../page_objects/uptime/monitor_management'; journey(`MonitorName`, async ({ page, params }: { page: Page; params: any }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts index 45a47f8280f42..6a1329fd241b9 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts @@ -6,8 +6,8 @@ */ import { v4 as uuidv4 } from 'uuid'; import { journey, step, expect, before } from '@elastic/synthetics'; -import { byTestId, TIMEOUT_60_SEC } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { TIMEOUT_60_SEC, byTestId } from '../../../helpers/utils'; +import { recordVideo } from '../../../helpers/record_video'; import { cleanTestMonitors } from '../../synthetics/services/add_monitor'; import { monitorManagementPageProvider } from '../../../page_objects/uptime/monitor_management'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/manage_locations.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/manage_locations.ts index 703b416156d13..c5b5195f076d6 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/manage_locations.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/manage_locations.ts @@ -5,8 +5,8 @@ * 2.0. */ import { journey, step, expect } from '@elastic/synthetics'; -import { byTestId, TIMEOUT_60_SEC } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId, TIMEOUT_60_SEC } from '../../../helpers/utils'; +import { recordVideo } from '../../../helpers/record_video'; import { monitorManagementPageProvider } from '../../../page_objects/uptime/monitor_management'; journey('ManagePrivateLocation', async ({ page, params: { kibanaUrl } }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/read_only_user/monitor_management.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/read_only_user/monitor_management.ts index 85a17b56299ff..c7c44d2e6bc0e 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/read_only_user/monitor_management.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/read_only_user/monitor_management.ts @@ -6,8 +6,8 @@ */ import { expect, journey, Page, step } from '@elastic/synthetics'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId } from '../../../helpers/utils'; +import { recordVideo } from '../../../helpers/record_video'; import { monitorManagementPageProvider } from '../../../page_objects/uptime/monitor_management'; journey( diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/step_duration.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/step_duration.journey.ts index 4ced9a3db25cf..f77b0ef4e88f5 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/step_duration.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/step_duration.journey.ts @@ -6,8 +6,8 @@ */ import { journey, step, expect } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; import { RetryService } from '@kbn/ftr-common-functional-services'; +import { recordVideo } from '../../helpers/record_video'; import { loginPageProvider } from '../../page_objects/login'; journey('StepsDuration', async ({ page, params }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/uptime.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/uptime.journey.ts index 67dd0d8e5b68f..f3916cd4eab12 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/uptime.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/uptime.journey.ts @@ -6,8 +6,8 @@ */ import { journey, step, before } from '@elastic/synthetics'; -import { byTestId, waitForLoadingToFinish } from '@kbn/observability-plugin/e2e/utils'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { byTestId, waitForLoadingToFinish } from '../../helpers/utils'; +import { recordVideo } from '../../helpers/record_video'; journey('uptime', ({ page, params }) => { recordVideo(page); diff --git a/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_details.tsx b/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_details.tsx index c67490e2e817a..150f6992da81e 100644 --- a/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_details.tsx +++ b/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_details.tsx @@ -6,7 +6,7 @@ */ import { Page } from '@elastic/synthetics'; -import { byTestId, delay } from '@kbn/observability-plugin/e2e/utils'; +import { byTestId, delay } from '../../helpers/utils'; import { monitorManagementPageProvider } from './monitor_management'; interface AlertType { diff --git a/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_management.tsx b/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_management.tsx index 4d89150143344..5bbe3bd8e8def 100644 --- a/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_management.tsx +++ b/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_management.tsx @@ -5,7 +5,7 @@ * 2.0. */ import { expect, Page } from '@elastic/synthetics'; -import { getQuerystring, TIMEOUT_60_SEC } from '@kbn/observability-plugin/e2e/utils'; +import { getQuerystring, TIMEOUT_60_SEC } from '../../helpers/utils'; import { DataStream } from '../../../common/runtime_types/monitor_management'; import { loginPageProvider } from '../login'; import { utilsPageProvider } from '../utils'; diff --git a/x-pack/plugins/synthetics/e2e/page_objects/uptime/settings.tsx b/x-pack/plugins/synthetics/e2e/page_objects/uptime/settings.tsx index 16e1e59f85a5b..a94f122e4f718 100644 --- a/x-pack/plugins/synthetics/e2e/page_objects/uptime/settings.tsx +++ b/x-pack/plugins/synthetics/e2e/page_objects/uptime/settings.tsx @@ -6,7 +6,7 @@ */ import { expect, Page } from '@elastic/synthetics'; -import { byTestId } from '@kbn/observability-plugin/e2e/utils'; +import { byTestId } from '../../helpers/utils'; import { loginPageProvider } from '../login'; import { utilsPageProvider } from '../utils'; diff --git a/x-pack/plugins/synthetics/e2e/synthetics_run.ts b/x-pack/plugins/synthetics/e2e/synthetics_run.ts index 75c8a440c2aae..b03ff899fcf5f 100644 --- a/x-pack/plugins/synthetics/e2e/synthetics_run.ts +++ b/x-pack/plugins/synthetics/e2e/synthetics_run.ts @@ -6,8 +6,8 @@ */ import { FtrConfigProviderContext } from '@kbn/test'; import path from 'path'; -import { argv } from '@kbn/observability-plugin/e2e/parse_args_params'; -import { SyntheticsRunner } from '@kbn/observability-plugin/e2e/synthetics_runner'; +import { argv } from './helpers/parse_args_params'; +import { SyntheticsRunner } from './helpers/synthetics_runner'; const { headless, grep, bail: pauseOnError } = argv; diff --git a/x-pack/plugins/observability/e2e/tasks/es_archiver.ts b/x-pack/plugins/synthetics/e2e/tasks/es_archiver.ts similarity index 100% rename from x-pack/plugins/observability/e2e/tasks/es_archiver.ts rename to x-pack/plugins/synthetics/e2e/tasks/es_archiver.ts diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/location_status_badges.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/location_status_badges.tsx index f0957fb5cdfa6..3115597135a96 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/location_status_badges.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/location_status_badges.tsx @@ -109,7 +109,7 @@ const MonitorDetailLinkForLocation = ({ return ( } + iconType={() => } color="hollow" iconOnClickAriaLabel={CLICK_LOCATION_LABEL} iconOnClick={() => { diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx index 43905cd5899a4..110ac698e22f7 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx @@ -28,6 +28,8 @@ import { EuiTextAreaProps, EuiButtonGroupProps, EuiSuperSelectProps, + EuiHighlight, + EuiBadge, } from '@elastic/eui'; import { FieldText, @@ -406,7 +408,11 @@ export const FIELD = (readOnly?: boolean): FieldMap => ({ isServiceManaged: location.isServiceManaged || false, })), selectedOptions: Object.values(field?.value || {}).map((location) => ({ - color: locations.some((s) => s.id === location.id) ? 'default' : 'danger', + color: locations.some((s) => s.id === location.id) + ? location.isServiceManaged + ? 'default' + : 'primary' + : 'danger', label: locations?.find((loc) => location.id === loc.id)?.label ?? location.id, id: location.id || '', isServiceManaged: location.isServiceManaged || false, @@ -418,6 +424,20 @@ export const FIELD = (readOnly?: boolean): FieldMap => ({ }); }, isDisabled: readOnly, + renderOption: (option: FormLocation, searchValue: string) => { + return ( + + + {option.label} + + {!option.isServiceManaged && ( + + Private + + )} + + ); + }, }; }, }, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/types.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/types.ts index 264d710d081a1..b3b86eef542fe 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/types.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/types.ts @@ -44,7 +44,7 @@ export type FormConfig = MonitorFields & { [AlertConfigKey.STATUS_ENABLED]: boolean; [ConfigKey.LOCATIONS]: FormLocation[]; - /* Dot notiation keys must have a type configuration both for their flattened and nested + /* Dot notation keys must have a type configuration both for their flattened and nested * variation in order for types to register for react hook form. For example, `AlertConfigKey.STATUS_ENABLED` * must be defined both as `alert.config.enabled: boolean` and `alert: { config: { enabled: boolean } }` */ alert: { diff --git a/x-pack/plugins/task_manager/server/task_type_dictionary.ts b/x-pack/plugins/task_manager/server/task_type_dictionary.ts index bed5c6c7e6069..f2b6d5b9153b1 100644 --- a/x-pack/plugins/task_manager/server/task_type_dictionary.ts +++ b/x-pack/plugins/task_manager/server/task_type_dictionary.ts @@ -22,6 +22,8 @@ export const REMOVED_TYPES: string[] = [ 'search_sessions_monitor', 'search_sessions_cleanup', 'search_sessions_expire', + + 'cleanup_failed_action_executions', ]; /** diff --git a/x-pack/plugins/threat_intelligence/cypress/e2e/timeline.cy.ts b/x-pack/plugins/threat_intelligence/cypress/e2e/timeline.cy.ts index 2f07c4199f3cb..f6e2a02cadf7f 100644 --- a/x-pack/plugins/threat_intelligence/cypress/e2e/timeline.cy.ts +++ b/x-pack/plugins/threat_intelligence/cypress/e2e/timeline.cy.ts @@ -28,7 +28,7 @@ import { selectRange } from '../tasks/select_range'; const THREAT_INTELLIGENCE = '/app/security/threat_intelligence/indicators'; -describe('Indicators', () => { +describe.skip('Indicators', () => { before(() => { esArchiverLoad('threat_intelligence/indicators_data'); login(); diff --git a/x-pack/plugins/threat_intelligence/public/common/mocks/story_providers.tsx b/x-pack/plugins/threat_intelligence/public/common/mocks/story_providers.tsx index 07f62805fe530..1c63295a55c87 100644 --- a/x-pack/plugins/threat_intelligence/public/common/mocks/story_providers.tsx +++ b/x-pack/plugins/threat_intelligence/public/common/mocks/story_providers.tsx @@ -68,8 +68,8 @@ const defaultServices = { }, cases: { hooks: { - getUseCasesAddToNewCaseFlyout: () => {}, - getUseCasesAddToExistingCaseModal: () => {}, + useCasesAddToNewCaseFlyout: () => {}, + useCasesAddToExistingCaseModal: () => {}, }, helpers: { canUseCases: () => ({ diff --git a/x-pack/plugins/threat_intelligence/public/modules/cases/components/add_to_existing_case/add_to_existing_case.tsx b/x-pack/plugins/threat_intelligence/public/modules/cases/components/add_to_existing_case/add_to_existing_case.tsx index 3aff588be3192..6493a4c009158 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/cases/components/add_to_existing_case/add_to_existing_case.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/cases/components/add_to_existing_case/add_to_existing_case.tsx @@ -48,7 +48,7 @@ export const AddToExistingCase: VFC = ({ 'data-test-subj': dataTestSubj, }) => { const { cases } = useKibana().services; - const selectCaseModal = cases.hooks.getUseCasesAddToExistingCaseModal({}); + const selectCaseModal = cases.hooks.useCasesAddToExistingCaseModal(); const id: string = indicator._id as string; const attachmentMetadata: AttachmentMetadata = generateAttachmentsMetadata(indicator); diff --git a/x-pack/plugins/threat_intelligence/public/modules/cases/components/add_to_new_case/add_to_new_case.tsx b/x-pack/plugins/threat_intelligence/public/modules/cases/components/add_to_new_case/add_to_new_case.tsx index 41772d1cadf71..1d7a0c7230970 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/cases/components/add_to_new_case/add_to_new_case.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/cases/components/add_to_new_case/add_to_new_case.tsx @@ -48,7 +48,7 @@ export const AddToNewCase: VFC = ({ 'data-test-subj': dataTestSubj, }) => { const { cases } = useKibana().services; - const createCaseFlyout = cases.hooks.getUseCasesAddToNewCaseFlyout({}); + const createCaseFlyout = cases.hooks.useCasesAddToNewCaseFlyout(); const id: string = indicator._id as string; const attachmentMetadata: AttachmentMetadata = generateAttachmentsMetadata(indicator); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 64d2a3a35e67f..3bebabf921bbe 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -930,8 +930,6 @@ "core.status.yellowTitle": "Jaune", "core.statusPage.coreStatus.sectionTitle": "Statut principal", "core.statusPage.loadStatus.serverIsDownErrorMessage": "Échec de requête du statut du serveur. Votre serveur est peut-être indisponible ?", - "core.statusPage.metricsTiles.columns.heapTotalHeader": "Tas total", - "core.statusPage.metricsTiles.columns.heapUsedHeader": "Tas utilisé", "core.statusPage.metricsTiles.columns.load.metaHeader": "Intervalle de charge", "core.statusPage.metricsTiles.columns.loadHeader": "Charge", "core.statusPage.metricsTiles.columns.processDelayDetailsHeader": "Centiles", @@ -12433,8 +12431,6 @@ "xpack.enterpriseSearch.content.index.filtering.priority": "Priorité de la règle", "xpack.enterpriseSearch.content.index.filtering.rule": "Règle", "xpack.enterpriseSearch.content.index.filtering.value": "Valeur", - "xpack.enterpriseSearch.content.index.pipelines.copyAndCustomize.description": "Vous pouvez créer une version de cette configuration spécifique à l'index et la modifier pour votre cas d'utilisation.", - "xpack.enterpriseSearch.content.index.pipelines.copyAndCustomize.platinumText": "Avec une licence Platinum, vous pouvez créer une version de cette configuration spécifique à l'index et la modifier pour votre cas d'utilisation.", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.apiIndex": "Il s'agit d'un index basé sur l'API.", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.cancelButtonLabel": "Annuler", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.closeButtonLabel": "Fermer", @@ -25628,7 +25624,6 @@ "xpack.observability.alertDetails.errorPromptTitle": "Impossible de charger les détails de l'alerte", "xpack.observability.alertDetails.viewRuleDetails": "Afficher les détails de la règle", "xpack.observability.alerts.actions.addToCase": "Ajouter à un cas existant", - "xpack.observability.alerts.actions.addToCaseDisabled": "L'ajout au cas n'est pas pris en charge pour cette sélection", "xpack.observability.alerts.actions.addToNewCase": "Ajouter au nouveau cas", "xpack.observability.alerts.alertStatusFilter.active": "Actif", "xpack.observability.alerts.alertStatusFilter.legend": "Filtrer par", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 046de43e22aab..2869bc52a574b 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -930,8 +930,6 @@ "core.status.yellowTitle": "黄", "core.statusPage.coreStatus.sectionTitle": "コアステータス", "core.statusPage.loadStatus.serverIsDownErrorMessage": "サーバーステータスのリクエストに失敗しました。サーバーがダウンしている可能性があります。", - "core.statusPage.metricsTiles.columns.heapTotalHeader": "ヒープ合計", - "core.statusPage.metricsTiles.columns.heapUsedHeader": "使用ヒープ", "core.statusPage.metricsTiles.columns.load.metaHeader": "読み込み間隔", "core.statusPage.metricsTiles.columns.loadHeader": "読み込み", "core.statusPage.metricsTiles.columns.processDelayDetailsHeader": "パーセンタイル", @@ -12432,8 +12430,6 @@ "xpack.enterpriseSearch.content.index.filtering.priority": "ルール優先度", "xpack.enterpriseSearch.content.index.filtering.rule": "ルール", "xpack.enterpriseSearch.content.index.filtering.value": "値", - "xpack.enterpriseSearch.content.index.pipelines.copyAndCustomize.description": "この構成のインデックス固有のバージョンを作成し、ユースケースに合わせて修正できます。", - "xpack.enterpriseSearch.content.index.pipelines.copyAndCustomize.platinumText": "プラチナライセンスでは、この構成のインデックス固有のバージョンを作成し、ユースケースに合わせて修正できます。", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.apiIndex": "これはAPIベースのインデックスです。", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.cancelButtonLabel": "キャンセル", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.closeButtonLabel": "閉じる", @@ -25609,7 +25605,6 @@ "xpack.observability.alertDetails.errorPromptTitle": "アラート詳細を読み込めません", "xpack.observability.alertDetails.viewRuleDetails": "ルール詳細を表示", "xpack.observability.alerts.actions.addToCase": "既存のケースに追加", - "xpack.observability.alerts.actions.addToCaseDisabled": "この選択では、[ケースに追加]を使用できません", "xpack.observability.alerts.actions.addToNewCase": "新しいケースに追加", "xpack.observability.alerts.alertStatusFilter.active": "アクティブ", "xpack.observability.alerts.alertStatusFilter.legend": "フィルタリング条件", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 1efbbedc2d2ab..b7a948f1ab754 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -930,8 +930,6 @@ "core.status.yellowTitle": "黄色", "core.statusPage.coreStatus.sectionTitle": "核心状态", "core.statusPage.loadStatus.serverIsDownErrorMessage": "无法请求服务器状态。也许您的服务器已关闭?", - "core.statusPage.metricsTiles.columns.heapTotalHeader": "堆总数", - "core.statusPage.metricsTiles.columns.heapUsedHeader": "已使用堆数", "core.statusPage.metricsTiles.columns.load.metaHeader": "加载时间间隔", "core.statusPage.metricsTiles.columns.loadHeader": "加载", "core.statusPage.metricsTiles.columns.processDelayDetailsHeader": "百分位数", @@ -12433,8 +12431,6 @@ "xpack.enterpriseSearch.content.index.filtering.priority": "规则优先级", "xpack.enterpriseSearch.content.index.filtering.rule": "规则", "xpack.enterpriseSearch.content.index.filtering.value": "值", - "xpack.enterpriseSearch.content.index.pipelines.copyAndCustomize.description": "您可以创建此配置的特定于索引的版本,并针对用例对其进行修改。", - "xpack.enterpriseSearch.content.index.pipelines.copyAndCustomize.platinumText": "使用白金级许可证,您可以创建此配置的特定于索引的版本,并针对用例对其进行修改。", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.apiIndex": "这是一个基于 API 的索引。", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.cancelButtonLabel": "取消", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.closeButtonLabel": "关闭", @@ -25625,7 +25621,6 @@ "xpack.observability.alertDetails.errorPromptTitle": "无法加载告警详情", "xpack.observability.alertDetails.viewRuleDetails": "查看规则详情", "xpack.observability.alerts.actions.addToCase": "添加到现有案例", - "xpack.observability.alerts.actions.addToCaseDisabled": "此选择不支持添加到案例", "xpack.observability.alerts.actions.addToNewCase": "添加到新案例", "xpack.observability.alerts.alertStatusFilter.active": "活动", "xpack.observability.alerts.alertStatusFilter.legend": "筛选依据", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts b/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts index 90a0ba762937c..952c939c11379 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts @@ -9,5 +9,6 @@ export const triggersActionsUiQueriesKeys = { all: ['triggersActionsUi'] as const, alertsTable: () => [...triggersActionsUiQueriesKeys.all, 'alertsTable'] as const, cases: () => [...triggersActionsUiQueriesKeys.alertsTable(), 'cases'] as const, - casesBulkGet: () => [...triggersActionsUiQueriesKeys.cases(), 'bulkGet'] as const, + casesBulkGet: (caseIds: string[]) => + [...triggersActionsUiQueriesKeys.cases(), 'bulkGet', caseIds] as const, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_page/register_alerts_table_configuration.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_page/register_alerts_table_configuration.tsx index 52f89719bebc8..acc0db4406131 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_page/register_alerts_table_configuration.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_page/register_alerts_table_configuration.tsx @@ -26,7 +26,6 @@ export function registerAlertsTableConfiguration({ }) { alertsTableConfigurationRegistry.register({ id: PLUGIN_ID, - casesFeatureId: `${PLUGIN_ID}Cases`, columns: [ { id: 'event.action', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx index e93db4793cf14..c823b8d4156f8 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx @@ -33,12 +33,32 @@ import { bulkActionsReducer } from './bulk_actions/reducer'; import { BrowserFields } from '@kbn/rule-registry-plugin/common'; import { getCasesMockMap } from './cases/index.mock'; import { createAppMockRenderer } from '../test_utils'; +import { createCasesServiceMock } from './index.mock'; +import { useCaseViewNavigation } from './cases/use_case_view_navigation'; +import { act } from 'react-dom/test-utils'; + +const mockCaseService = createCasesServiceMock(); jest.mock('@kbn/data-plugin/public'); jest.mock('@kbn/kibana-react-plugin/public/ui_settings/use_ui_setting', () => ({ useUiSetting$: jest.fn((value: string) => ['0,0']), })); +jest.mock('@kbn/kibana-react-plugin/public', () => { + const original = jest.requireActual('@kbn/kibana-react-plugin/public'); + + return { + ...original, + useKibana: () => ({ + services: { + cases: mockCaseService, + }, + }), + }; +}); + +jest.mock('./cases/use_case_view_navigation'); + const columns = [ { id: ALERT_RULE_NAME, @@ -175,8 +195,44 @@ const mockedUseCellActions: UseCellActions = () => { }; }; -// FAILING: https://github.com/elastic/kibana/issues/151688 -describe.skip('AlertsTable', () => { +const originalGetComputedStyle = Object.assign({}, window.getComputedStyle); + +beforeAll(() => { + // The JSDOM implementation is too slow + // Especially for dropdowns that try to position themselves + // perf issue - https://github.com/jsdom/jsdom/issues/3234 + Object.defineProperty(window, 'getComputedStyle', { + value: (el: HTMLElement) => { + /** + * This is based on the jsdom implementation of getComputedStyle + * https://github.com/jsdom/jsdom/blob/9dae17bf0ad09042cfccd82e6a9d06d3a615d9f4/lib/jsdom/browser/Window.js#L779-L820 + * + * It is missing global style parsing and will only return styles applied directly to an element. + * Will not return styles that are global or from emotion + */ + const declaration = new CSSStyleDeclaration(); + const { style } = el; + + Array.prototype.forEach.call(style, (property: string) => { + declaration.setProperty( + property, + style.getPropertyValue(property), + style.getPropertyPriority(property) + ); + }); + + return declaration; + }, + configurable: true, + writable: true, + }); +}); + +afterAll(() => { + Object.defineProperty(window, 'getComputedStyle', originalGetComputedStyle); +}); + +describe('AlertsTable', () => { const fetchAlertsData = { activePage: 0, alerts, @@ -198,7 +254,6 @@ describe.skip('AlertsTable', () => { const alertsTableConfiguration: AlertsTableConfigurationRegistry = { id: '', - casesFeatureId: '', columns, sort: [], useInternalFlyout: jest.fn().mockImplementation(() => ({ @@ -251,7 +306,7 @@ describe.skip('AlertsTable', () => { const tableProps: AlertsTableProps = { alertsTableConfiguration, - casesData: { cases: casesMap, isLoading: false }, + cases: { data: casesMap, isLoading: false }, columns, deletedEventIds: [], disabledCellActions: [], @@ -279,6 +334,9 @@ describe.skip('AlertsTable', () => { rowCount: 4, }; + const useCaseViewNavigationMock = useCaseViewNavigation as jest.Mock; + useCaseViewNavigationMock.mockReturnValue({ navigateToCaseView: jest.fn() }); + const AlertsTableWithProviders: React.FunctionComponent< AlertsTableProps & { initialBulkActionsState?: BulkActionsState } > = (props) => { @@ -299,13 +357,35 @@ describe.skip('AlertsTable', () => { ); }; + beforeEach(() => { + jest.clearAllMocks(); + }); + describe('Alerts table UI', () => { it('should support sorting', async () => { const renderResult = render(); - userEvent.click(renderResult.container.querySelector('.euiDataGridHeaderCell__button')!); + userEvent.click( + renderResult.container.querySelector('.euiDataGridHeaderCell__button')!, + undefined, + { + skipPointerEventsCheck: true, + } + ); + await waitForEuiPopoverOpen(); - userEvent.click(renderResult.getByTestId(`dataGridHeaderCellActionGroup-${columns[0].id}`)); - userEvent.click(renderResult.getByTitle('Sort A-Z')); + + userEvent.click( + renderResult.getByTestId(`dataGridHeaderCellActionGroup-${columns[0].id}`), + undefined, + { + skipPointerEventsCheck: true, + } + ); + + userEvent.click(renderResult.getByTitle('Sort A-Z'), undefined, { + skipPointerEventsCheck: true, + }); + expect(fetchAlertsData.onSortChange).toHaveBeenCalledWith([ { direction: 'asc', id: 'kibana.alert.rule.name' }, ]); @@ -313,7 +393,11 @@ describe.skip('AlertsTable', () => { it('should support pagination', async () => { const renderResult = render(); - userEvent.click(renderResult.getByTestId('pagination-button-1')); + + userEvent.click(renderResult.getByTestId('pagination-button-1'), undefined, { + skipPointerEventsCheck: true, + }); + expect(fetchAlertsData.onPageChange).toHaveBeenCalledWith({ pageIndex: 1, pageSize: 1 }); }); @@ -509,18 +593,22 @@ describe.skip('AlertsTable', () => { fireEvent.click((await screen.findAllByTestId('testActionColumn'))[0]); // the callback given to our clients to run when they want to update the loading state - mockedFn.mock.calls[0][0].setIsActionLoading(true); + act(() => { + mockedFn.mock.calls[0][0].setIsActionLoading(true); + }); expect(await screen.findAllByTestId('row-loader')).toHaveLength(1); const selectedOptions = await screen.findAllByTestId('dataGridRowCell'); // first row, first column expect(within(selectedOptions[0]).getByLabelText('Loading')).toBeDefined(); - expect(within(selectedOptions[0]).queryByRole('checkbox')).not.toBeInTheDocument(); + expect( + within(selectedOptions[0]).queryByTestId('bulk-actions-row-cell') + ).not.toBeInTheDocument(); // second row, first column expect(within(selectedOptions[6]).queryByLabelText('Loading')).not.toBeInTheDocument(); - expect(within(selectedOptions[6]).getByRole('checkbox')).toBeDefined(); + expect(within(selectedOptions[6]).getByTestId('bulk-actions-row-cell')).toBeDefined(); }); it('should show the row loader when callback triggered with false', async () => { @@ -538,7 +626,9 @@ describe.skip('AlertsTable', () => { fireEvent.click((await screen.findAllByTestId('testActionColumn'))[0]); // the callback given to our clients to run when they want to update the loading state - mockedFn.mock.calls[0][0].setIsActionLoading(false); + act(() => { + mockedFn.mock.calls[0][0].setIsActionLoading(false); + }); expect(screen.queryByTestId('row-loader')).not.toBeInTheDocument(); }); @@ -626,14 +716,9 @@ describe.skip('AlertsTable', () => { }); it('show loading skeleton if it loads cases', async () => { - render( - - ); + render(); - expect((await screen.findAllByTestId('cases-cell-loading')).length).toBe(2); + expect((await screen.findAllByTestId('cases-cell-loading')).length).toBe(4); }); it('shows the cases tooltip', async () => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx index 0c07083df17ba..e01000507c882 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx @@ -18,6 +18,7 @@ import { EuiLoadingContent, EuiDataGridRefProps, } from '@elastic/eui'; +import { useQueryClient } from '@tanstack/react-query'; import { useSorting, usePagination, useBulkActions, useActionsColumn } from './hooks'; import { AlertsTableProps, FetchAlertData } from '../../../types'; import { @@ -30,6 +31,7 @@ import { getToolbarVisibility } from './toolbar'; import { InspectButtonContainer } from './toolbar/components/inspect'; import { SystemCellId } from './types'; import { SystemCellFactory, systemCells } from './cells'; +import { triggersActionsUiQueriesKeys } from '../../hooks/constants'; export const ACTIVE_ROW_CLASS = 'alertsTableActiveRow'; @@ -76,7 +78,8 @@ const AlertsTable: React.FunctionComponent = (props: AlertsTab refresh: alertsRefresh, getInspectQuery, } = alertsData; - const { cases, isLoading: isLoadingCases } = props.casesData; + const queryClient = useQueryClient(); + const { data: cases, isLoading: isLoadingCases } = props.cases; const { sortingColumns, onSort } = useSorting(onSortChange, sortingFields); @@ -94,14 +97,21 @@ const AlertsTable: React.FunctionComponent = (props: AlertsTab clearSelection, } = useBulkActions({ alerts, + casesConfig: props.alertsTableConfiguration.cases, query: props.query, useBulkActionsConfig: props.alertsTableConfiguration.useBulkActions, + refresh: alertsRefresh, }); - const refresh = useCallback(() => { + const refreshData = useCallback(() => { alertsRefresh(); + queryClient.invalidateQueries(triggersActionsUiQueriesKeys.cases()); + }, [alertsRefresh, queryClient]); + + const refresh = useCallback(() => { + refreshData(); clearSelection(); - }, [alertsRefresh, clearSelection]); + }, [clearSelection, refreshData]); const { pagination, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx index 0d8f57a318194..60bcbd7d9a32e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx @@ -29,6 +29,7 @@ import { DefaultSort } from './hooks'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { BrowserFields } from '@kbn/rule-registry-plugin/common'; import { getCasesMockMap } from './cases/index.mock'; +import { createCasesServiceMock } from './index.mock'; jest.mock('./hooks/use_fetch_alerts'); jest.mock('./hooks/use_fetch_browser_fields_capabilities'); @@ -37,6 +38,7 @@ jest.mock('./hooks/use_bulk_get_cases'); jest.mock('@kbn/kibana-utils-plugin/public'); const mockCurrentAppId$ = new BehaviorSubject('testAppId'); +const mockCaseService = createCasesServiceMock(); jest.mock('@kbn/kibana-react-plugin/public', () => ({ useKibana: () => ({ @@ -53,21 +55,7 @@ jest.mock('@kbn/kibana-react-plugin/public', () => ({ }, currentAppId$: mockCurrentAppId$, }, - cases: { - ui: { - getCasesContext: () => null, - }, - helpers: { - getUICapabilities: () => ({ - all: true, - read: true, - create: true, - update: true, - delete: true, - push: true, - }), - }, - }, + cases: mockCaseService, notifications: { toasts: { addDanger: () => {}, @@ -297,11 +285,19 @@ describe('AlertsTableState', () => { beforeEach(() => { jest.clearAllMocks(); - - useBulkGetCasesMock.mockReturnValue({ data: casesMap, isLoading: false }); + useBulkGetCasesMock.mockReturnValue({ data: casesMap, isFetching: false }); }); - describe('cases column', () => { + describe('Cases', () => { + beforeEach(() => { + jest.clearAllMocks(); + mockCaseService.helpers.canUseCases = jest.fn().mockReturnValue({ create: true, read: true }); + }); + + afterAll(() => { + mockCaseService.ui.getCasesContext = jest.fn().mockImplementation(() => null); + }); + it('should show the cases column', async () => { render(); expect(await screen.findByText('Cases')).toBeInTheDocument(); @@ -313,11 +309,18 @@ describe('AlertsTableState', () => { expect(await screen.findByText('Test case 2')).toBeInTheDocument(); }); + it('should show the loading skeleton when fetching cases', async () => { + useBulkGetCasesMock.mockReturnValue({ data: casesMap, isFetching: true }); + + render(); + expect((await screen.findAllByTestId('cases-cell-loading')).length).toBe(3); + }); + it('should pass the correct case ids to useBulkGetCases', async () => { render(); await waitFor(() => { - expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id', 'test-id-2']); + expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id', 'test-id-2'], true); }); }); @@ -333,7 +336,7 @@ describe('AlertsTableState', () => { render(); await waitFor(() => { - expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id', 'test-id-2']); + expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id', 'test-id-2'], true); }); }); @@ -352,8 +355,129 @@ describe('AlertsTableState', () => { render(); await waitFor(() => { - expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id-2']); + expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id-2'], true); + }); + }); + + it('should not fetch cases if the user does not have permissions', async () => { + mockCaseService.helpers.canUseCases = jest + .fn() + .mockReturnValue({ create: false, read: false }); + + render(); + + await waitFor(() => { + expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id-2'], false); + }); + }); + + it('should not fetch cases if the column is not visible', async () => { + mockCaseService.helpers.canUseCases = jest.fn().mockReturnValue({ create: true, read: true }); + + const props = mockCustomProps({ + cases: { featureId: 'test-feature-id', owner: ['test-owner'] }, + columns: [ + { + id: AlertsField.name, + displayAsText: 'Name', + }, + ], + }); + + render(); + await waitFor(() => { + expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id-2'], false); + }); + }); + + it('calls canUseCases with an empty array if the case configuration is not defined', async () => { + render(); + expect(mockCaseService.helpers.canUseCases).toHaveBeenCalledWith([]); + }); + + it('calls canUseCases with the case owner if defined', async () => { + const props = mockCustomProps({ + cases: { featureId: 'test-feature-id', owner: ['test-owner'] }, }); + + render(); + expect(mockCaseService.helpers.canUseCases).toHaveBeenCalledWith(['test-owner']); + }); + + it('should call the cases context with the correct props', async () => { + const props = mockCustomProps({ + cases: { featureId: 'test-feature-id', owner: ['test-owner'] }, + }); + + const CasesContextMock = jest.fn().mockReturnValue(null); + mockCaseService.ui.getCasesContext = jest.fn().mockReturnValue(CasesContextMock); + + render(); + + expect(CasesContextMock).toHaveBeenCalledWith( + { + children: expect.anything(), + owner: ['test-owner'], + permissions: { create: true, read: true }, + features: { alerts: { sync: false } }, + }, + {} + ); + }); + + it('should call the cases context with the empty owner if the case config is not defined', async () => { + const CasesContextMock = jest.fn().mockReturnValue(null); + mockCaseService.ui.getCasesContext = jest.fn().mockReturnValue(CasesContextMock); + + render(); + expect(CasesContextMock).toHaveBeenCalledWith( + { + children: expect.anything(), + owner: [], + permissions: { create: true, read: true }, + features: { alerts: { sync: false } }, + }, + {} + ); + }); + + it('should call the cases context with correct permissions', async () => { + const CasesContextMock = jest.fn().mockReturnValue(null); + mockCaseService.ui.getCasesContext = jest.fn().mockReturnValue(CasesContextMock); + mockCaseService.helpers.canUseCases = jest + .fn() + .mockReturnValue({ create: false, read: false }); + + render(); + expect(CasesContextMock).toHaveBeenCalledWith( + { + children: expect.anything(), + owner: [], + permissions: { create: false, read: false }, + features: { alerts: { sync: false } }, + }, + {} + ); + }); + + it('should call the cases context with sync alerts turned on if defined in the cases config', async () => { + const props = mockCustomProps({ + cases: { featureId: 'test-feature-id', owner: ['test-owner'], syncAlerts: true }, + }); + + const CasesContextMock = jest.fn().mockReturnValue(null); + mockCaseService.ui.getCasesContext = jest.fn().mockReturnValue(CasesContextMock); + + render(); + expect(CasesContextMock).toHaveBeenCalledWith( + { + children: expect.anything(), + owner: ['test-owner'], + permissions: { create: true, read: true }, + features: { alerts: { sync: true } }, + }, + {} + ); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx index 8fecebacb3bc4..d9353516c6472 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx @@ -16,6 +16,7 @@ import { EuiDataGridProps, EuiDataGridToolBarVisibilityOptions, } from '@elastic/eui'; +import { ALERT_CASE_IDS } from '@kbn/rule-data-utils'; import type { ValidFeatureId } from '@kbn/rule-data-utils'; import type { BrowserFields, @@ -45,23 +46,17 @@ import { import { ALERTS_TABLE_CONF_ERROR_MESSAGE, ALERTS_TABLE_CONF_ERROR_TITLE } from './translations'; import { TypeRegistry } from '../../type_registry'; import { bulkActionsReducer } from './bulk_actions/reducer'; -import { useGetUserCasesPermissions } from './hooks/use_get_user_cases_permissions'; import { useColumns } from './hooks/use_columns'; import { InspectButtonContainer } from './toolbar/components/inspect'; import { alertsTableQueryClient } from './query_client'; import { useBulkGetCases } from './hooks/use_bulk_get_cases'; +import { CasesService } from './types'; const DefaultPagination = { pageSize: 10, pageIndex: 0, }; -interface CaseUi { - ui: { - getCasesContext: () => React.FC; - }; -} - export type AlertsTableStateProps = { alertsTableConfigurationRegistry: TypeRegistry; configurationId: string; @@ -85,7 +80,6 @@ export interface AlertsTableStorage { const EmptyConfiguration: AlertsTableConfigurationRegistry = { id: '', - casesFeatureId: '', columns: [], sort: [], getRenderCellValue: () => () => null, @@ -102,19 +96,22 @@ const AlertsTableWithBulkActionsContextComponent: React.FunctionComponent<{ const AlertsTableWithBulkActionsContext = React.memo(AlertsTableWithBulkActionsContextComponent); -type AlertWithCaseIds = Alert & Required>; +type AlertWithCaseIds = Alert & Required>; const getCaseIdsFromAlerts = (alerts: Alerts): Set => new Set( alerts - .filter( - (alert): alert is AlertWithCaseIds => - alert['kibana.alert.case_ids'] != null && alert['kibana.alert.case_ids'].length > 0 - ) - .map((alert) => alert['kibana.alert.case_ids']) + .filter((alert): alert is AlertWithCaseIds => { + const caseIds = alert[ALERT_CASE_IDS]; + return caseIds != null && caseIds.length > 0; + }) + .map((alert) => alert[ALERT_CASE_IDS]) .flat() ); +const isCasesColumnEnabled = (columns: EuiDataGridColumn[]): boolean => + columns.some(({ id }) => id === ALERT_CASE_IDS); + const AlertsTableState = (props: AlertsTableStateProps) => { return ( @@ -142,7 +139,7 @@ const AlertsTableStateWithQueryProvider = ({ showAlertStatusWithFlapping, toolbarVisibility, }: AlertsTableStateProps) => { - const { cases: casesService } = useKibana<{ cases: CaseUi }>().services; + const { cases: casesService } = useKibana<{ cases?: CasesService }>().services; const hasAlertsTableConfiguration = alertsTableConfigurationRegistry?.has(configurationId) ?? false; @@ -243,7 +240,17 @@ const AlertsTableStateWithQueryProvider = ({ const caseIds = useMemo(() => getCaseIdsFromAlerts(alerts), [alerts]); - const { data: cases, isLoading: isLoadingCases } = useBulkGetCases(Array.from(caseIds.values())); + const casesPermissions = casesService?.helpers.canUseCases( + alertsTableConfiguration?.cases?.owner ?? [] + ); + + const hasCaseReadPermissions = Boolean(casesPermissions?.read); + const fetchCases = isCasesColumnEnabled(columns) && hasCaseReadPermissions; + + const { data: cases, isFetching: isLoadingCases } = useBulkGetCases( + Array.from(caseIds.values()), + fetchCases + ); const onPageChange = useCallback((_pagination: RuleRegistrySearchRequestPagination) => { setPagination(_pagination); @@ -308,10 +315,16 @@ const AlertsTableStateWithQueryProvider = ({ updatedAt, ]); + const CasesContext = casesService?.ui.getCasesContext(); + const isCasesContextAvailable = casesService && CasesContext; + const tableProps: AlertsTableProps = useMemo( () => ({ alertsTableConfiguration, - casesData: { cases: cases ?? new Map(), isLoading: isLoadingCases }, + cases: { + data: cases ?? new Map(), + isLoading: isLoadingCases, + }, columns, bulkActions: [], deletedEventIds: [], @@ -349,6 +362,7 @@ const AlertsTableStateWithQueryProvider = ({ flyoutSize, pagination.pageSize, id, + leadingControlColumns, showExpandToDetails, showAlertStatusWithFlapping, useFetchAlertsData, @@ -359,7 +373,6 @@ const AlertsTableStateWithQueryProvider = ({ onResetColumns, onColumnsChange, onChangeVisibleColumns, - leadingControlColumns, query, rowHeightsOptions, renderCellValue, @@ -370,9 +383,6 @@ const AlertsTableStateWithQueryProvider = ({ ] ); - const CasesContext = casesService?.ui.getCasesContext(); - const userCasesPermissions = useGetUserCasesPermissions(alertsTableConfiguration.casesFeatureId); - return hasAlertsTableConfiguration ? ( <> {!isLoading && alertsCount === 0 && ( @@ -387,11 +397,11 @@ const AlertsTableStateWithQueryProvider = ({ {(isLoading || isBrowserFieldDataLoading) && ( )} - {alertsCount !== 0 && CasesContext && casesService && ( + {alertsCount !== 0 && isCasesContextAvailable && ( )} - {alertsCount !== 0 && (!CasesContext || !casesService) && ( + {alertsCount !== 0 && !isCasesContextAvailable && ( ({ @@ -44,6 +44,23 @@ const columns = [ }, ]; +const mockCaseService = createCasesServiceMock(); + +const mockKibana = jest.fn().mockReturnValue({ + services: { + cases: mockCaseService, + }, +}); + +jest.mock('@kbn/kibana-react-plugin/public', () => { + const original = jest.requireActual('@kbn/kibana-react-plugin/public'); + + return { + ...original, + useKibana: () => mockKibana(), + }; +}); + describe('AlertsTable.BulkActions', () => { const alerts = [ { @@ -77,9 +94,11 @@ describe('AlertsTable.BulkActions', () => { sort: [], }; + const casesConfig = { featureId: 'test-feature-id', owner: ['test-owner'] }; + const alertsTableConfiguration = { id: '', - casesFeatureId: 'test', + casesConfig, columns, sort: [], useInternalFlyout: jest.fn().mockImplementation(() => ({ @@ -97,7 +116,7 @@ describe('AlertsTable.BulkActions', () => { const tableProps: AlertsTableProps = { alertsTableConfiguration, - casesData: { cases: casesMap, isLoading: false }, + cases: { data: casesMap, isLoading: false }, columns, deletedEventIds: [], disabledCellActions: [], @@ -191,22 +210,73 @@ describe('AlertsTable.BulkActions', () => { }; describe('when the bulk action hook is not set', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('should not show the bulk actions column', () => { - const { queryByTestId } = render( - - - - ); + const { queryByTestId } = render(); + expect(queryByTestId('bulk-actions-header')).toBeNull(); + }); + }); + + describe('Cases', () => { + beforeAll(() => { + mockCaseService.helpers.canUseCases = jest.fn().mockReturnValue({ create: true, read: true }); + mockCaseService.ui.getCasesContext = jest.fn().mockReturnValue(() => 'Cases context'); + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + afterAll(() => { + mockCaseService.ui.getCasesContext = jest.fn().mockReturnValue(() => null); + }); + + it('should show the bulk actions column when the cases service is defined', () => { + mockCaseService.helpers.canUseCases = jest.fn().mockReturnValue({ create: true, read: true }); + + const { getByTestId } = render(); + expect(getByTestId('bulk-actions-header')).toBeDefined(); + }); + + it('should not show the bulk actions column when the case service is defined and the user does not have write access', () => { + mockCaseService.helpers.canUseCases = jest + .fn() + .mockReturnValue({ create: false, read: true }); + + const { queryByTestId } = render(); + + expect(queryByTestId('bulk-actions-header')).toBeNull(); + }); + + it('should not show the bulk actions column when the case service is defined and the user does not have read access', () => { + mockCaseService.helpers.canUseCases = jest + .fn() + .mockReturnValue({ create: true, read: false }); + + const { queryByTestId } = render(); + + expect(queryByTestId('bulk-actions-header')).toBeNull(); + }); + + it('should not show the bulk actions when the cases context is missing', () => { + mockCaseService.ui.getCasesContext = jest.fn().mockReturnValue(() => null); + + const { queryByTestId } = render(); expect(queryByTestId('bulk-actions-header')).toBeNull(); }); }); describe('when the bulk action hook is set', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('should show the bulk actions column', () => { const { getByTestId } = render( - - - + ); expect(getByTestId('bulk-actions-header')).toBeDefined(); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx index 5fe9c7033e5d5..d8e89ee2f5ba7 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx @@ -36,23 +36,21 @@ const CasesCellComponent: React.FC = (props) => { .map((id) => cases.get(id)) .filter((theCase): theCase is Case => theCase != null); - if (validCases.length === 0) { - return <>{'--'}; - } - return ( - {validCases.map((theCase, index) => [ - index > 0 && index < validCases.length && ', ', - - navigateToCaseView({ caseId: theCase.id })} - data-test-subj="cases-cell-link" - > - {theCase.title} - - , - ])} + {validCases.length !== 0 + ? validCases.map((theCase, index) => [ + index > 0 && index < validCases.length && ', ', + + navigateToCaseView({ caseId: theCase.id })} + data-test-subj="cases-cell-link" + > + {theCase.title} + + , + ]) + : '--'} ); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/translations.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/translations.ts index 529137b1cfeec..b693b23e25382 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/translations.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/translations.ts @@ -20,3 +20,24 @@ export const ERROR_FETCH_BROWSER_FIELDS = i18n.translate( defaultMessage: 'An error has occurred loading browser fields', } ); + +export const ADD_TO_EXISTING_CASE = i18n.translate( + 'xpack.triggersActionsUI.alerts.table.actions.addToCase', + { + defaultMessage: 'Add to existing case', + } +); + +export const ADD_TO_NEW_CASE = i18n.translate( + 'xpack.triggersActionsUI.alerts.table.actions.addToNewCase', + { + defaultMessage: 'Add to new case', + } +); + +export const ADD_TO_CASE_DISABLED = i18n.translate( + 'xpack.triggersActionsUI.alerts.table.actions.addToCaseDisabled', + { + defaultMessage: 'Add to case is not supported for this selection', + } +); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.test.tsx new file mode 100644 index 0000000000000..dfdd5e8000df2 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.test.tsx @@ -0,0 +1,207 @@ +/* + * 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 { renderHook } from '@testing-library/react-hooks'; +import { useBulkActions, useBulkAddToCaseActions } from './use_bulk_actions'; +import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; +import { createCasesServiceMock } from '../index.mock'; + +jest.mock('./api'); +jest.mock('../../../../common/lib/kibana'); + +const mockCaseService = createCasesServiceMock(); +const mockKibana = jest.fn().mockReturnValue({ + services: { + cases: mockCaseService, + }, +}); + +jest.mock('@kbn/kibana-react-plugin/public', () => { + const original = jest.requireActual('@kbn/kibana-react-plugin/public'); + + return { + ...original, + useKibana: () => mockKibana(), + }; +}); + +describe('bulk action hooks', () => { + const casesConfig = { featureId: 'test-feature-id', owner: ['test-owner'] }; + let appMockRender: AppMockRenderer; + + beforeEach(() => { + jest.clearAllMocks(); + appMockRender = createAppMockRenderer(); + }); + + const refresh = jest.fn(); + const clearSelection = jest.fn(); + const open = jest.fn(); + mockCaseService.helpers.canUseCases = jest.fn().mockReturnValue({ create: true, read: true }); + mockCaseService.ui.getCasesContext = jest.fn().mockReturnValue(() => 'Cases context'); + + const addNewCaseMock = ( + mockCaseService.hooks.useCasesAddToNewCaseFlyout as jest.Mock + ).mockReturnValue({ open }); + + const addExistingCaseMock = ( + mockCaseService.hooks.useCasesAddToExistingCaseModal as jest.Mock + ).mockReturnValue({ open }); + + describe('useBulkAddToCaseActions', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should refetch when calling onSuccess of useCasesAddToNewCaseFlyout', async () => { + renderHook(() => useBulkAddToCaseActions({ casesConfig, refresh, clearSelection }), { + wrapper: appMockRender.AppWrapper, + }); + + addNewCaseMock.mock.calls[0][0].onSuccess(); + expect(refresh).toHaveBeenCalled(); + }); + + it('should refetch when calling onSuccess of useCasesAddToExistingCaseModal', async () => { + renderHook(() => useBulkAddToCaseActions({ casesConfig, refresh, clearSelection }), { + wrapper: appMockRender.AppWrapper, + }); + + addExistingCaseMock.mock.calls[0][0].onSuccess(); + expect(refresh).toHaveBeenCalled(); + }); + + it('should open the case flyout', async () => { + const { result } = renderHook( + () => useBulkAddToCaseActions({ casesConfig, refresh, clearSelection }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + // @ts-expect-error: cases do not need all arguments + result.current[0].onClick([]); + + expect(mockCaseService.helpers.groupAlertsByRule).toHaveBeenCalled(); + expect(open).toHaveBeenCalled(); + }); + + it('should open the case modal', async () => { + const { result } = renderHook( + () => useBulkAddToCaseActions({ casesConfig, refresh, clearSelection }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + // @ts-expect-error: cases do not need all arguments + result.current[1].onClick([]); + + expect(mockCaseService.helpers.groupAlertsByRule).toHaveBeenCalled(); + expect(open).toHaveBeenCalled(); + }); + + it('should not show the bulk actions when the user does not have write access', async () => { + mockCaseService.helpers.canUseCases = jest + .fn() + .mockReturnValue({ create: false, read: true }); + + const { result } = renderHook( + () => useBulkAddToCaseActions({ casesConfig, refresh, clearSelection }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + expect(result.current.length).toBe(0); + }); + + it('should not show the bulk actions when the user does not have read access', async () => { + mockCaseService.helpers.canUseCases = jest + .fn() + .mockReturnValue({ create: true, read: false }); + + const { result } = renderHook( + () => useBulkAddToCaseActions({ casesConfig, refresh, clearSelection }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + expect(result.current.length).toBe(0); + }); + + it('should call canUseCases with an empty owner when casesConfig is missing', async () => { + renderHook(() => useBulkAddToCaseActions({ refresh, clearSelection }), { + wrapper: appMockRender.AppWrapper, + }); + + expect(mockCaseService.helpers.canUseCases).toHaveBeenCalledWith([]); + }); + + it('should not show the bulk actions when the cases context is missing', async () => { + mockCaseService.ui.getCasesContext = jest.fn().mockReturnValue(() => null); + + const { result } = renderHook(() => useBulkAddToCaseActions({ refresh, clearSelection }), { + wrapper: appMockRender.AppWrapper, + }); + + expect(result.current.length).toBe(0); + }); + + it('should not show the bulk actions when the case service is not available', async () => { + mockKibana.mockImplementation(() => ({ services: {} })); + + const { result } = renderHook( + () => useBulkAddToCaseActions({ casesConfig, refresh, clearSelection }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + expect(result.current.length).toBe(0); + }); + }); + + describe('useBulkActions', () => { + beforeEach(() => { + jest.clearAllMocks(); + mockKibana.mockImplementation(() => ({ services: { cases: mockCaseService } })); + mockCaseService.helpers.canUseCases = jest.fn().mockReturnValue({ create: true, read: true }); + }); + + it('appends the case bulk actions', async () => { + const { result } = renderHook( + () => useBulkActions({ alerts: [], query: {}, casesConfig, refresh }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + expect(result.current.bulkActions).toMatchInlineSnapshot(` + Array [ + Object { + "data-test-subj": "attach-new-case", + "disableOnQuery": true, + "disabledLabel": "Add to case is not supported for this selection", + "key": "attach-new-case", + "label": "Add to new case", + "onClick": [Function], + }, + Object { + "data-test-subj": "attach-existing-case", + "disableOnQuery": true, + "disabledLabel": "Add to case is not supported for this selection", + "key": "attach-existing-case", + "label": "Add to existing case", + "onClick": [Function], + }, + ] + `); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts index 1c0509c88ef63..bcec1285b5d49 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts @@ -4,10 +4,12 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { useContext, useEffect } from 'react'; +import { useCallback, useContext, useEffect, useMemo } from 'react'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; import { Alerts, + AlertsTableConfigurationRegistry, BulkActionsConfig, BulkActionsState, BulkActionsVerbs, @@ -18,11 +20,15 @@ import { getLeadingControlColumn as getBulkActionsLeadingControlColumn, GetLeadingControlColumn, } from '../bulk_actions/get_leading_control_column'; +import { CasesService } from '../types'; +import { ADD_TO_CASE_DISABLED, ADD_TO_EXISTING_CASE, ADD_TO_NEW_CASE } from './translations'; interface BulkActionsProps { query: Pick; alerts: Alerts; + casesConfig?: AlertsTableConfigurationRegistry['cases']; useBulkActionsConfig?: UseBulkActionsRegistry; + refresh: () => void; } export interface UseBulkActions { @@ -34,13 +40,95 @@ export interface UseBulkActions { clearSelection: () => void; } +type UseBulkAddToCaseActionsProps = Pick & + Pick; + +export const useBulkAddToCaseActions = ({ + casesConfig, + refresh, + clearSelection, +}: UseBulkAddToCaseActionsProps): BulkActionsConfig[] => { + const { cases: casesService } = useKibana<{ cases?: CasesService }>().services; + + const userCasesPermissions = casesService?.helpers.canUseCases(casesConfig?.owner ?? []); + const CasesContext = casesService?.ui.getCasesContext(); + const isCasesContextAvailable = Boolean(casesService && CasesContext); + + const onSuccess = useCallback(() => { + refresh(); + clearSelection(); + }, [clearSelection, refresh]); + + const createCaseFlyout = casesService?.hooks.useCasesAddToNewCaseFlyout({ onSuccess }); + const selectCaseModal = casesService?.hooks.useCasesAddToExistingCaseModal({ onSuccess }); + + return useMemo(() => { + return isCasesContextAvailable && + createCaseFlyout && + selectCaseModal && + userCasesPermissions?.create && + userCasesPermissions?.read + ? [ + { + label: ADD_TO_NEW_CASE, + key: 'attach-new-case', + 'data-test-subj': 'attach-new-case', + disableOnQuery: true, + disabledLabel: ADD_TO_CASE_DISABLED, + onClick: (items?: any[]) => { + const caseAttachments = items + ? casesService?.helpers.groupAlertsByRule(items) ?? [] + : []; + + createCaseFlyout.open({ + attachments: caseAttachments, + }); + }, + }, + { + label: ADD_TO_EXISTING_CASE, + key: 'attach-existing-case', + disableOnQuery: true, + disabledLabel: ADD_TO_CASE_DISABLED, + 'data-test-subj': 'attach-existing-case', + onClick: (items?: any[]) => { + const caseAttachments = items + ? casesService?.helpers.groupAlertsByRule(items) ?? [] + : []; + + selectCaseModal.open({ + attachments: caseAttachments, + }); + }, + }, + ] + : []; + }, [ + casesService?.helpers, + createCaseFlyout, + isCasesContextAvailable, + selectCaseModal, + userCasesPermissions?.create, + userCasesPermissions?.read, + ]); +}; + export function useBulkActions({ alerts, + casesConfig, query, + refresh, useBulkActionsConfig = () => [], }: BulkActionsProps): UseBulkActions { const [bulkActionsState, updateBulkActionsState] = useContext(BulkActionsContext); - const bulkActions = useBulkActionsConfig(query); + const configBulkActions = useBulkActionsConfig(query); + + const clearSelection = () => { + updateBulkActionsState({ action: BulkActionsVerbs.clear }); + }; + const caseBulkActions = useBulkAddToCaseActions({ casesConfig, refresh, clearSelection }); + + const bulkActions = [...configBulkActions, ...caseBulkActions]; const isBulkActionsColumnActive = bulkActions.length !== 0; @@ -52,10 +140,6 @@ export function useBulkActions({ updateBulkActionsState({ action: BulkActionsVerbs.updateAllLoadingState, isLoading }); }; - const clearSelection = () => { - updateBulkActionsState({ action: BulkActionsVerbs.clear }); - }; - return { isBulkActionsColumnActive, getBulkActionsLeadingControlColumn, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx index 28ed298ea7669..3c8bbc7763c0a 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx @@ -26,6 +26,7 @@ describe('useBulkGetCases', () => { let appMockRender: AppMockRenderer; beforeEach(() => { + jest.clearAllMocks(); appMockRender = createAppMockRenderer(); }); @@ -33,7 +34,7 @@ describe('useBulkGetCases', () => { const spy = jest.spyOn(api, 'bulkGetCases'); spy.mockResolvedValue(response); - const { waitForNextUpdate } = renderHook(() => useBulkGetCases(['case-1']), { + const { waitForNextUpdate } = renderHook(() => useBulkGetCases(['case-1'], true), { wrapper: appMockRender.AppWrapper, }); @@ -49,10 +50,21 @@ describe('useBulkGetCases', () => { ); }); + it('does not call the api if the fetchCases is false', async () => { + const spy = jest.spyOn(api, 'bulkGetCases'); + spy.mockResolvedValue(response); + + renderHook(() => useBulkGetCases(['case-1'], false), { + wrapper: appMockRender.AppWrapper, + }); + + expect(spy).not.toHaveBeenCalled(); + }); + it('shows a toast error when the api return an error', async () => { const spy = jest.spyOn(api, 'bulkGetCases').mockRejectedValue(new Error('An error')); - const { waitForNextUpdate } = renderHook(() => useBulkGetCases(['case-1']), { + const { waitForNextUpdate } = renderHook(() => useBulkGetCases(['case-1'], true), { wrapper: appMockRender.AppWrapper, }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx index deed7f5e62d50..4349370235b3f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx @@ -28,20 +28,20 @@ const transformCases = (data: CasesBulkGetResponse): Map => { return casesMap; }; -export const useBulkGetCases = (caseIds: string[]) => { +export const useBulkGetCases = (caseIds: string[], fetchCases: boolean) => { const { http, notifications: { toasts }, } = useKibana().services; return useQuery( - triggersActionsUiQueriesKeys.casesBulkGet(), + triggersActionsUiQueriesKeys.casesBulkGet(caseIds), () => { const abortCtrlRef = new AbortController(); return bulkGetCases(http, { ids: caseIds, fields: caseFields }, abortCtrlRef.signal); }, { - enabled: caseIds.length > 0, + enabled: caseIds.length > 0 && fetchCases, select: transformCases, onError: (error: ServerError) => { if (error.name !== 'AbortError') { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_columns/toggle_column.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_columns/toggle_column.test.tsx new file mode 100644 index 0000000000000..cf3e774d2d717 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_columns/toggle_column.test.tsx @@ -0,0 +1,50 @@ +/* + * 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 { ALERT_CASE_IDS } from '@kbn/rule-data-utils'; +import { toggleColumn } from './toggle_column'; + +describe('toggleColumn', () => { + const columns = [{ id: 'test-column' }]; + const casesColumn = { + id: ALERT_CASE_IDS, + }; + + it('formats only the cases column correctly', async () => { + expect(toggleColumn({ column: casesColumn, columns, defaultColumns: [] })) + .toMatchInlineSnapshot(` + Array [ + Object { + "id": "test-column", + }, + Object { + "displayAsText": "Cases", + "id": "kibana.alert.case_ids", + "isSortable": false, + }, + ] + `); + }); + + it('does not format the cases column if the displayText is defined', async () => { + const casesColumnWithDisplayText = { ...casesColumn, displayAsText: 'My Cases label' }; + + expect(toggleColumn({ column: casesColumnWithDisplayText, columns, defaultColumns: [] })) + .toMatchInlineSnapshot(` + Array [ + Object { + "id": "test-column", + }, + Object { + "displayAsText": "My Cases label", + "id": "kibana.alert.case_ids", + "isSortable": false, + }, + ] + `); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_columns/toggle_column.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_columns/toggle_column.ts index ae7bceed0ac80..8769fc956365e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_columns/toggle_column.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_columns/toggle_column.ts @@ -6,6 +6,8 @@ */ import { EuiDataGridColumn } from '@elastic/eui'; +import { ALERT_CASE_IDS } from '@kbn/rule-data-utils'; +import * as i18n from '../../translations'; const remove = ({ columns, index }: { columns: EuiDataGridColumn[]; index: number }) => { return [...columns.slice(0, index), ...columns.slice(index + 1)]; @@ -37,6 +39,25 @@ const insert = ({ return [columns[0], column, ...columns.slice(1)]; }; +const formatSystemColumn = (column: EuiDataGridColumn): EuiDataGridColumn => { + const newColumn = { ...column }; + + if (newColumn.id === ALERT_CASE_IDS) { + newColumn.isSortable = false; + + /** + * If a solution wants to default the case column and set their own + * display text we should not modified it. For that reason, + * we check if the displayAsText is set. + */ + if (!newColumn.displayAsText) { + newColumn.displayAsText = i18n.CASES; + } + } + + return newColumn; +}; + /** * @param param.column column to be removed/inserted * @param param.columns current array of columns in the grid @@ -55,11 +76,18 @@ export const toggleColumn = ({ const currentIndex = columns.findIndex( (currentColumn: EuiDataGridColumn) => currentColumn.id === column.id ); + const isVisible = currentIndex >= 0; + /** + * For the Cases column we want to change the + * label of the column from kibana.alert.case_ids to Cases. + */ + const formattedColumn = formatSystemColumn(column); + if (isVisible) { return remove({ columns, index: currentIndex }); } - return insert({ defaultColumns, column, columns }); + return insert({ defaultColumns, column: formattedColumn, columns }); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_get_user_cases_permissions.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_get_user_cases_permissions.tsx deleted file mode 100644 index 9608c00fa2992..0000000000000 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_get_user_cases_permissions.tsx +++ /dev/null @@ -1,62 +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 { useEffect, useState } from 'react'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; - -interface CasesPermissions { - all: boolean; - create: boolean; - read: boolean; - update: boolean; - delete: boolean; - push: boolean; -} - -interface CasesUserPermissions { - helpers: { - getUICapabilities: ( - featureCapabilities?: Partial>> - ) => CasesPermissions; - }; -} - -export function useGetUserCasesPermissions(casesFeatureId: string) { - const [casesPermissions, setCasesPermissions] = useState({ - all: false, - read: false, - create: false, - update: false, - delete: false, - push: false, - }); - const uiCapabilities = useKibana().services.application?.capabilities; - - const casesCapabilities = useKibana<{ - cases: CasesUserPermissions; - }>().services.cases.helpers.getUICapabilities(uiCapabilities![casesFeatureId]); - - useEffect(() => { - setCasesPermissions({ - all: casesCapabilities.all, - create: casesCapabilities.create, - read: casesCapabilities.read, - update: casesCapabilities.update, - delete: casesCapabilities.delete, - push: casesCapabilities.push, - }); - }, [ - casesCapabilities.all, - casesCapabilities.create, - casesCapabilities.read, - casesCapabilities.update, - casesCapabilities.delete, - casesCapabilities.push, - ]); - - return casesPermissions; -} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/index.mock.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/index.mock.ts new file mode 100644 index 0000000000000..454f7940dd660 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/index.mock.ts @@ -0,0 +1,35 @@ +/* + * 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 { CasesService } from './types'; + +export const openAddToExistingCaseModalMock = jest.fn(); +export const openAddToNewCaseFlyoutMock = jest.fn(); + +const uiMock: jest.Mocked = { + getCasesContext: jest.fn().mockImplementation(() => null), +}; + +const hooksMock: jest.Mocked = { + useCasesAddToNewCaseFlyout: jest.fn().mockImplementation(() => ({ + open: openAddToNewCaseFlyoutMock, + })), + useCasesAddToExistingCaseModal: jest.fn().mockImplementation(() => ({ + open: openAddToExistingCaseModalMock, + })), +}; + +const helpersMock: jest.Mocked = { + canUseCases: jest.fn(), + groupAlertsByRule: jest.fn(), +}; + +export const createCasesServiceMock = (): CasesService => ({ + ui: uiMock, + hooks: hooksMock, + helpers: helpersMock, +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/translations.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/translations.ts index b1e916840bfce..871aad0b80fcb 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/translations.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/translations.ts @@ -5,6 +5,7 @@ * 2.0. */ import { i18n } from '@kbn/i18n'; +export { CASES } from '../translations'; export const ALERTS_TABLE_CONF_ERROR_TITLE = i18n.translate( 'xpack.triggersActionsUI.alertsTable.configuration.errorTitle', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts index ab6793745da30..1fcd4a6107009 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts @@ -17,7 +17,7 @@ export type ServerError = IHttpFetchError; export interface CellComponentProps { alert: Alert; - cases: AlertsTableProps['casesData']['cases']; + cases: AlertsTableProps['cases']['data']; columnId: SystemCellId; isLoading: boolean; showAlertStatusWithFlapping: boolean; @@ -31,3 +31,22 @@ export interface SystemCellComponentMap { } export type SystemCellId = keyof SystemCellComponentMap; + +type CaseHooks = (props?: Record) => { + open: ({ attachments }: { attachments: any[] }) => void; + close: () => void; +}; + +export interface CasesService { + ui: { + getCasesContext: () => React.FC; + }; + hooks: { + useCasesAddToNewCaseFlyout: CaseHooks; + useCasesAddToExistingCaseModal: CaseHooks; + }; + helpers: { + groupAlertsByRule: (items?: any[]) => any[]; + canUseCases: (owners: string[]) => Record; + }; +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/components/field_items/field_items.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/components/field_items/field_items.test.tsx index 4cd12c97f179e..acd027a3ab8cb 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/components/field_items/field_items.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/components/field_items/field_items.test.tsx @@ -10,6 +10,7 @@ import { render } from '@testing-library/react'; import { EuiInMemoryTable } from '@elastic/eui'; import { mockBrowserFields } from '../../mock'; import { getFieldColumns, getFieldItemsData } from './field_items'; +import { ALERT_CASE_IDS } from '@kbn/rule-data-utils'; const timestampFieldId = '@timestamp'; const columnIds = [timestampFieldId]; @@ -283,5 +284,26 @@ describe('field_items', () => { expect(queryByTestId(`field-${timestampFieldId}-description`)).not.toBeInTheDocument(); expect(getByTestId(`field-${timestampFieldId}-category`)).toBeInTheDocument(); }); + + it('should format the cases column correctly', () => { + const caseIdsField = mockBrowserFields.kibana.fields![ALERT_CASE_IDS]; + + const { fieldItems } = getFieldItemsData({ + selectedCategoryIds: ['kibana'], + browserFields: { kibana: { fields: { [ALERT_CASE_IDS]: caseIdsField } } }, + columnIds: [], + }); + + const columns = getFieldColumns({ + ...getFieldColumnsParams, + showDescriptionColumn: false, + }); + + const { getByText } = render( + + ); + + expect(getByText('Cases')).toBeInTheDocument(); + }); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/components/field_items/field_items.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/components/field_items/field_items.tsx index d328299e8e8b1..6a6cc08568bb1 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/components/field_items/field_items.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/components/field_items/field_items.tsx @@ -19,12 +19,25 @@ import { import { uniqBy } from 'lodash/fp'; import { BrowserFields } from '@kbn/rule-registry-plugin/common'; +import { ALERT_CASE_IDS } from '@kbn/rule-data-utils'; import type { BrowserFieldItem, FieldTableColumns, GetFieldTableColumns } from '../../types'; import { FieldName } from '../field_name'; import * as i18n from '../../translations'; import { styles } from './field_items.style'; import { getEmptyValue, getExampleText, getIconFromType } from '../../helpers'; +/** + * For the Cases field we want to change the + * name of the field from kibana.alert.case_ids to Cases. + */ +const getFieldItemName = (name: string): string => { + if (name === ALERT_CASE_IDS) { + return i18n.CASES; + } + + return name; +}; + /** * Returns the field items of all categories selected */ @@ -52,6 +65,7 @@ export const getFieldItemsData = ({ if (!showDescriptionColumn && !!field.description) { showDescriptionColumn = true; } + return { name, type: field.type, @@ -67,6 +81,7 @@ export const getFieldItemsData = ({ return fieldItemsAcc; }, []) ); + return { fieldItems, showDescriptionColumn }; }; @@ -94,7 +109,7 @@ const getDefaultFieldTableColumns = ({
- +
); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/helpers.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/helpers.test.ts index 86a49b0613d5d..09ba79d555ef4 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/helpers.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/helpers.test.ts @@ -244,6 +244,19 @@ describe('helpers', () => { }, }, }, + kibana: { + fields: { + 'kibana.alert.case_ids': { + name: 'kibana.alert.case_ids', + type: 'string', + searchable: true, + aggregatable: true, + readFromDocValues: true, + category: 'kibana', + format: 'string', + }, + }, + }, }; expect( @@ -253,6 +266,34 @@ describe('helpers', () => { }) ).toEqual(filtered); }); + + test.each(['cases', 'Cases', 'case', 'Case', 'ca'])( + 'it matches the cases label with search term: %s', + (searchTerm) => { + const casesField = { + kibana: { + fields: { + 'kibana.alert.case_ids': { + name: 'kibana.alert.case_ids', + type: 'string', + searchable: true, + aggregatable: true, + readFromDocValues: true, + category: 'kibana', + format: 'string', + }, + }, + }, + }; + + expect( + filterBrowserFieldsByFieldName({ + browserFields: { ...casesField, mockBrowserFields }, + substring: searchTerm, + }) + ).toEqual(casesField); + } + ); }); describe('filterSelectedBrowserFields', () => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/helpers.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/helpers.ts index ebbdeec76a154..fb09c94220d9b 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/helpers.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/helpers.ts @@ -5,8 +5,10 @@ * 2.0. */ +import { ALERT_CASE_IDS } from '@kbn/rule-data-utils'; import { BrowserField, BrowserFields } from '@kbn/rule-registry-plugin/common'; import { isEmpty } from 'lodash/fp'; +import { CASES } from '../translations'; export const FIELD_BROWSER_WIDTH = 925; export const TABLE_HEIGHT = 260; @@ -19,6 +21,14 @@ export const categoryHasFields = (category: Partial): boolean => export const getFieldCount = (category: Partial | undefined): number => category != null && category.fields != null ? Object.keys(category.fields).length : 0; +const matchesSystemField = (field: string, searchTerm: string): boolean => { + const casesLabelI18n = CASES.toLocaleLowerCase(); + const casesLabel = 'cases'; + const term = searchTerm.toLocaleLowerCase(); + + return field === ALERT_CASE_IDS && (casesLabelI18n.includes(term) || casesLabel.includes(term)); +}; + /** * Filters the specified `BrowserFields` to return a new collection where every * category contains at least one field name that matches the specified substring. @@ -59,7 +69,11 @@ export function filterBrowserFieldsByFieldName({ } // Check if this field matches (via substring comparison) the passed substring - if (fieldNameFromDescriptor !== null && fieldNameFromDescriptor.includes(trimmedSubstring)) { + if ( + fieldNameFromDescriptor !== null && + (fieldNameFromDescriptor.includes(trimmedSubstring) || + matchesSystemField(fieldNameFromDescriptor, trimmedSubstring)) + ) { // this field is a match, so we should emit this category into the result object. hadAMatch = true; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/mock.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/mock.ts index 2192c795c7099..c949fcb9e06e9 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/mock.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/mock.ts @@ -387,6 +387,19 @@ export const mockBrowserFields: BrowserFields = { }, }, }, + kibana: { + fields: { + 'kibana.alert.case_ids': { + name: 'kibana.alert.case_ids', + type: 'string', + searchable: true, + aggregatable: true, + readFromDocValues: true, + category: 'kibana', + format: 'string', + }, + }, + }, source: { fields: { 'source.ip': { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/translations.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/translations.ts index 0df5fb0d9af0b..1c1928026cc34 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/translations.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/translations.ts @@ -7,6 +7,8 @@ import { i18n } from '@kbn/i18n'; +export { CASES } from '../translations'; + export const CATEGORY = i18n.translate('xpack.triggersActionsUI.fieldBrowser.categoryLabel', { defaultMessage: 'Category', }); diff --git a/x-pack/plugins/observability/e2e/journeys/index.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/translations.ts similarity index 63% rename from x-pack/plugins/observability/e2e/journeys/index.ts rename to x-pack/plugins/triggers_actions_ui/public/application/sections/translations.ts index 3f0bc8128434c..b04effc4d5eb6 100644 --- a/x-pack/plugins/observability/e2e/journeys/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/translations.ts @@ -5,6 +5,8 @@ * 2.0. */ -// export * from './exploratory_view'; -export * from './step_duration.journey'; -// export * from './single_metric.journey'; +import { i18n } from '@kbn/i18n'; + +export const CASES = i18n.translate('xpack.triggersActionsUI.cases.label', { + defaultMessage: 'Cases', +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 763d96105a30a..95ddc3a39fb45 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -493,7 +493,10 @@ export interface FetchAlertData { export type AlertsTableProps = { alertsTableConfiguration: AlertsTableConfigurationRegistry; - casesData: { cases: Map; isLoading: boolean }; + cases: { + data: Map; + isLoading: boolean; + }; columns: EuiDataGridColumn[]; // defaultCellActions: TGridCellAction[]; deletedEventIds: string[]; @@ -597,7 +600,11 @@ export type UseFieldBrowserOptions = (args: UseFieldBrowserOptionsArgs) => Field export interface AlertsTableConfigurationRegistry { id: string; - casesFeatureId: string; + cases?: { + featureId: string; + owner: string[]; + syncAlerts?: boolean; + }; columns: EuiDataGridColumn[]; useInternalFlyout?: () => { header: AlertTableFlyoutComponent; @@ -614,7 +621,6 @@ export interface AlertsTableConfigurationRegistry { }; useFieldBrowserOptions?: UseFieldBrowserOptions; showInspectButton?: boolean; - app_id?: string; } export enum BulkActionsVerbs { diff --git a/x-pack/plugins/ux/e2e/helpers/parse_args_params.ts b/x-pack/plugins/ux/e2e/helpers/parse_args_params.ts new file mode 100644 index 0000000000000..41100ba2ec295 --- /dev/null +++ b/x-pack/plugins/ux/e2e/helpers/parse_args_params.ts @@ -0,0 +1,33 @@ +/* + * 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 yargs from 'yargs'; + +const { argv } = yargs(process.argv.slice(2)) + .option('headless', { + default: true, + type: 'boolean', + description: 'Start in headless mode', + }) + .option('bail', { + default: false, + type: 'boolean', + description: 'Pause on error', + }) + .option('watch', { + default: false, + type: 'boolean', + description: 'Runs the server in watch mode, restarting on changes', + }) + .option('grep', { + default: undefined, + type: 'string', + description: 'run only journeys with a name or tags that matches the glob', + }) + .help(); + +export { argv }; diff --git a/x-pack/plugins/ux/e2e/helpers/record_video.ts b/x-pack/plugins/ux/e2e/helpers/record_video.ts new file mode 100644 index 0000000000000..251dc441d8d9a --- /dev/null +++ b/x-pack/plugins/ux/e2e/helpers/record_video.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import fs from 'fs'; +import Runner from '@elastic/synthetics/dist/core/runner'; +import { after, Page } from '@elastic/synthetics'; + +const SYNTHETICS_RUNNER = Symbol.for('SYNTHETICS_RUNNER'); + +// @ts-ignore +export const runner: Runner = global[SYNTHETICS_RUNNER]; + +export const recordVideo = (page: Page, postfix = '') => { + after(async () => { + try { + const videoFilePath = await page.video()?.path(); + const pathToVideo = videoFilePath + ?.replace('.journeys/videos/', '') + .replace('.webm', ''); + const newVideoPath = videoFilePath?.replace( + pathToVideo!, + postfix + ? runner.currentJourney!.name + `-${postfix}` + : runner.currentJourney!.name + ); + fs.renameSync(videoFilePath!, newVideoPath!); + } catch (e) { + // eslint-disable-next-line no-console + console.log('Error while renaming video file', e); + } + }); +}; diff --git a/x-pack/plugins/ux/e2e/helpers/synthetics_runner.ts b/x-pack/plugins/ux/e2e/helpers/synthetics_runner.ts new file mode 100644 index 0000000000000..820db788ea270 --- /dev/null +++ b/x-pack/plugins/ux/e2e/helpers/synthetics_runner.ts @@ -0,0 +1,164 @@ +/* + * 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. + */ + +/* eslint-disable no-console */ + +import Url from 'url'; +import { run as syntheticsRun } from '@elastic/synthetics'; +import { PromiseType } from 'utility-types'; +import { createApmUsers } from '@kbn/apm-plugin/server/test_helpers/create_apm_users/create_apm_users'; + +import { EsArchiver } from '@kbn/es-archiver'; +import { esArchiverUnload } from '../tasks/es_archiver'; +import { TestReporter } from './test_reporter'; + +export interface ArgParams { + headless: boolean; + match?: string; + pauseOnError: boolean; +} + +export class SyntheticsRunner { + public getService: any; + public kibanaUrl: string; + private elasticsearchUrl: string; + + public testFilesLoaded: boolean = false; + + public params: ArgParams; + + private loadTestFilesCallback?: (reload?: boolean) => Promise; + + constructor(getService: any, params: ArgParams) { + this.getService = getService; + this.kibanaUrl = this.getKibanaUrl(); + this.elasticsearchUrl = this.getElasticsearchUrl(); + this.params = params; + } + + async setup() { + await this.createTestUsers(); + } + + async createTestUsers() { + await createApmUsers({ + elasticsearch: { + node: this.elasticsearchUrl, + username: 'elastic', + password: 'changeme', + }, + kibana: { hostname: this.kibanaUrl }, + }); + } + + async loadTestFiles( + callback: (reload?: boolean) => Promise, + reload = false + ) { + console.log('Loading test files'); + await callback(reload); + this.loadTestFilesCallback = callback; + this.testFilesLoaded = true; + console.log('Successfully loaded test files'); + } + + async loadTestData(e2eDir: string, dataArchives: string[]) { + try { + console.log('Loading esArchiver...'); + + const esArchiver: EsArchiver = this.getService('esArchiver'); + + const promises = dataArchives.map((archive) => { + if (archive === 'synthetics_data') { + return esArchiver.load(e2eDir + archive, { + docsOnly: true, + skipExisting: true, + }); + } + return esArchiver.load(e2eDir + archive, { skipExisting: true }); + }); + + await Promise.all([...promises]); + } catch (e) { + console.log(e); + } + } + + getKibanaUrl() { + const config = this.getService('config'); + + return Url.format({ + protocol: config.get('servers.kibana.protocol'), + hostname: config.get('servers.kibana.hostname'), + port: config.get('servers.kibana.port'), + }); + } + + getElasticsearchUrl() { + const config = this.getService('config'); + + return Url.format({ + protocol: config.get('servers.elasticsearch.protocol'), + hostname: config.get('servers.elasticsearch.hostname'), + port: config.get('servers.elasticsearch.port'), + }); + } + + async run() { + if (!this.testFilesLoaded) { + throw new Error('Test files not loaded'); + } + const { headless, match, pauseOnError } = this.params; + const noOfRuns = process.env.NO_OF_RUNS + ? Number(process.env.NO_OF_RUNS) + : 1; + console.log(`Running ${noOfRuns} times`); + let results: PromiseType> = {}; + for (let i = 0; i < noOfRuns; i++) { + results = await syntheticsRun({ + params: { kibanaUrl: this.kibanaUrl, getService: this.getService }, + playwrightOptions: { + headless, + chromiumSandbox: false, + timeout: 60 * 1000, + viewport: { + height: 900, + width: 1600, + }, + recordVideo: { + dir: '.journeys/videos', + }, + }, + match: match === 'undefined' ? '' : match, + pauseOnError, + screenshots: 'only-on-failure', + reporter: TestReporter, + }); + if (noOfRuns > 1) { + // need to reload again since runner resets the journeys + await this.loadTestFiles(this.loadTestFilesCallback!, true); + } + } + + await this.assertResults(results); + } + + assertResults(results: PromiseType>) { + Object.entries(results).forEach(([_journey, result]) => { + if (result.status !== 'succeeded') { + process.exitCode = 1; + process.exit(); + } + }); + } + + cleanUp() { + console.log('Removing esArchiver...'); + esArchiverUnload('full_heartbeat'); + esArchiverUnload('browser'); + } +} diff --git a/x-pack/plugins/ux/e2e/helpers/test_reporter.ts b/x-pack/plugins/ux/e2e/helpers/test_reporter.ts new file mode 100644 index 0000000000000..c04ee8ec26f5f --- /dev/null +++ b/x-pack/plugins/ux/e2e/helpers/test_reporter.ts @@ -0,0 +1,246 @@ +/* + * 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 { Journey, Step } from '@elastic/synthetics/dist/dsl'; +import { Reporter, ReporterOptions } from '@elastic/synthetics'; +import { + JourneyEndResult, + JourneyStartResult, + StepEndResult, +} from '@elastic/synthetics/dist/common_types'; + +import { yellow, green, cyan, red, bold } from 'chalk'; + +// eslint-disable-next-line no-console +const log = console.log; + +import { performance } from 'perf_hooks'; +import * as fs from 'fs'; +import { gatherScreenshots } from '@elastic/synthetics/dist/reporters/json'; +import { CACHE_PATH } from '@elastic/synthetics/dist/helpers'; +import { join } from 'path'; + +function renderError(error: any) { + let output = ''; + const outer = indent(''); + const inner = indent(outer); + const container = outer + '---\n'; + output += container; + let stack = error.stack; + if (stack) { + output += inner + 'stack: |-\n'; + stack = rewriteErrorStack(stack, findPWLogsIndexes(stack)); + const lines = String(stack).split('\n'); + for (const line of lines) { + output += inner + ' ' + line + '\n'; + } + } + output += container; + return red(output); +} + +function renderDuration(durationMs: number) { + return Number(durationMs).toFixed(0); +} + +export class TestReporter implements Reporter { + metrics = { + succeeded: 0, + failed: 0, + skipped: 0, + }; + + journeys: Map> = new Map(); + + constructor(options: ReporterOptions = {}) {} + + onJourneyStart(journey: Journey, {}: JourneyStartResult) { + if (process.env.CI) { + this.write(`\n--- Journey: ${journey.name}`); + } else { + this.write(bold(`\n Journey: ${journey.name}`)); + } + } + + onStepEnd(journey: Journey, step: Step, result: StepEndResult) { + const { status, end, start, error } = result; + const message = `${symbols[status]} Step: '${ + step.name + }' ${status} (${renderDuration((end - start) * 1000)} ms)`; + this.write(indent(message)); + if (error) { + this.write(renderError(error)); + } + this.metrics[status]++; + if (!this.journeys.has(journey.name)) { + this.journeys.set(journey.name, []); + } + this.journeys.get(journey.name)?.push({ name: step.name, ...result }); + } + + async onJourneyEnd( + journey: Journey, + { error, start, end, status }: JourneyEndResult + ) { + const { failed, succeeded, skipped } = this.metrics; + const total = failed + succeeded + skipped; + if (total === 0 && error) { + this.write(renderError(error)); + } + const message = `${symbols[status]} Took (${renderDuration( + end - start + )} seconds)`; + this.write(message); + + await fs.promises.mkdir('.journeys/failed_steps', { recursive: true }); + + await gatherScreenshots( + join(CACHE_PATH, 'screenshots'), + async (screenshot) => { + const { data, step } = screenshot; + + if (status === 'failed') { + await (async () => { + await fs.promises.writeFile( + join('.journeys/failed_steps/', `${step.name}.jpg`), + data, + { + encoding: 'base64', + } + ); + })(); + } + } + ); + } + + onEnd() { + const failedJourneys = Array.from(this.journeys.entries()).filter( + ([, steps]) => steps.some((step) => step.status === 'failed') + ); + + if (failedJourneys.length > 0) { + failedJourneys.forEach(([journeyName, steps]) => { + if (process.env.CI) { + const name = red(`Journey: ${journeyName} 🥵`); + this.write(`\n+++ ${name}`); + steps.forEach((stepResult) => { + const { status, end, start, error, name: stepName } = stepResult; + const message = `${ + symbols[status] + } Step: '${stepName}' ${status} (${renderDuration( + (end - start) * 1000 + )} ms)`; + this.write(indent(message)); + if (error) { + this.write(renderError(error)); + } + }); + } + }); + } + + const successfulJourneys = Array.from(this.journeys.entries()).filter( + ([, steps]) => steps.every((step) => step.status === 'succeeded') + ); + + successfulJourneys.forEach(([journeyName, steps]) => { + try { + fs.unlinkSync('.journeys/videos/' + journeyName + '.webm'); + } catch (e) { + // eslint-disable-next-line no-console + console.log( + 'Failed to delete video file for path ' + + '.journeys/videos/' + + journeyName + + '.webm' + ); + } + }); + + const { failed, succeeded, skipped } = this.metrics; + const total = failed + succeeded + skipped; + + let message = '\n'; + if (total === 0) { + message = 'No tests found!'; + message += ` (${renderDuration(now())} ms) \n`; + this.write(message); + return; + } + + message += succeeded > 0 ? green(` ${succeeded} passed`) : ''; + message += failed > 0 ? red(` ${failed} failed`) : ''; + message += skipped > 0 ? cyan(` ${skipped} skipped`) : ''; + message += ` (${renderDuration(now() / 1000)} seconds) \n`; + this.write(message); + } + + write(message: any) { + if (typeof message === 'object') { + message = JSON.stringify(message); + } + log(message + '\n'); + } +} + +const SEPARATOR = '\n'; + +function indent(lines: string, tab = ' ') { + return lines.replace(/^/gm, tab); +} + +const NO_UTF8_SUPPORT = process.platform === 'win32'; +const symbols = { + warning: yellow(NO_UTF8_SUPPORT ? '!' : '⚠'), + skipped: cyan('-'), + progress: cyan('>'), + succeeded: green(NO_UTF8_SUPPORT ? 'ok' : '✓'), + failed: red(NO_UTF8_SUPPORT ? 'x' : '✖'), +}; + +function now() { + return performance.now(); +} + +function findPWLogsIndexes(msgOrStack: string): [number, number] { + let startIndex = 0; + let endIndex = 0; + if (!msgOrStack) { + return [startIndex, endIndex]; + } + const lines = String(msgOrStack).split(SEPARATOR); + const logStart = /[=]{3,} logs [=]{3,}/; + const logEnd = /[=]{10,}/; + lines.forEach((line, index) => { + if (logStart.test(line)) { + startIndex = index; + } else if (logEnd.test(line)) { + endIndex = index; + } + }); + return [startIndex, endIndex]; +} + +function rewriteErrorStack(stack: string, indexes: [number, number]) { + const [start, end] = indexes; + /** + * Do not rewrite if its not a playwright error + */ + if (start === 0 && end === 0) { + return stack; + } + const linesToKeep = start + 3; + if (start > 0 && linesToKeep < end) { + const lines = stack.split(SEPARATOR); + return lines + .slice(0, linesToKeep) + .concat(...lines.slice(end)) + .join(SEPARATOR); + } + return stack; +} diff --git a/x-pack/plugins/ux/e2e/journeys/core_web_vitals.ts b/x-pack/plugins/ux/e2e/journeys/core_web_vitals.ts index 1df99e789af21..6aeebbb913b13 100644 --- a/x-pack/plugins/ux/e2e/journeys/core_web_vitals.ts +++ b/x-pack/plugins/ux/e2e/journeys/core_web_vitals.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../helpers/record_video'; import { UXDashboardDatePicker } from '../page_objects/date_picker'; import { loginToKibana, waitForLoadingToFinish } from './utils'; diff --git a/x-pack/plugins/ux/e2e/journeys/page_views.ts b/x-pack/plugins/ux/e2e/journeys/page_views.ts index d32fe0d2ccca5..904934d0f7018 100644 --- a/x-pack/plugins/ux/e2e/journeys/page_views.ts +++ b/x-pack/plugins/ux/e2e/journeys/page_views.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../helpers/record_video'; import { UXDashboardDatePicker } from '../page_objects/date_picker'; import { byTestId, loginToKibana, waitForLoadingToFinish } from './utils'; diff --git a/x-pack/plugins/ux/e2e/journeys/url_ux_query.journey.ts b/x-pack/plugins/ux/e2e/journeys/url_ux_query.journey.ts index 42088fb31a79e..24c1847b5cd06 100644 --- a/x-pack/plugins/ux/e2e/journeys/url_ux_query.journey.ts +++ b/x-pack/plugins/ux/e2e/journeys/url_ux_query.journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../helpers/record_video'; import { UXDashboardDatePicker } from '../page_objects/date_picker'; import { byTestId, loginToKibana, waitForLoadingToFinish } from './utils'; diff --git a/x-pack/plugins/ux/e2e/journeys/ux_client_metrics.journey.ts b/x-pack/plugins/ux/e2e/journeys/ux_client_metrics.journey.ts index ffcb016351bee..97cad67b91a7f 100644 --- a/x-pack/plugins/ux/e2e/journeys/ux_client_metrics.journey.ts +++ b/x-pack/plugins/ux/e2e/journeys/ux_client_metrics.journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../helpers/record_video'; import { UXDashboardDatePicker } from '../page_objects/date_picker'; import { byTestId, loginToKibana, waitForLoadingToFinish } from './utils'; diff --git a/x-pack/plugins/ux/e2e/journeys/ux_js_errors.journey.ts b/x-pack/plugins/ux/e2e/journeys/ux_js_errors.journey.ts index 248af00d60105..b6d84a2f509d9 100644 --- a/x-pack/plugins/ux/e2e/journeys/ux_js_errors.journey.ts +++ b/x-pack/plugins/ux/e2e/journeys/ux_js_errors.journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../helpers/record_video'; import { UXDashboardDatePicker } from '../page_objects/date_picker'; import { byTestId, loginToKibana, waitForLoadingToFinish } from './utils'; diff --git a/x-pack/plugins/ux/e2e/journeys/ux_long_task_metric_journey.ts b/x-pack/plugins/ux/e2e/journeys/ux_long_task_metric_journey.ts index e8c00a2b755af..57f9b98dcbb2d 100644 --- a/x-pack/plugins/ux/e2e/journeys/ux_long_task_metric_journey.ts +++ b/x-pack/plugins/ux/e2e/journeys/ux_long_task_metric_journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, before, expect } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../helpers/record_video'; import { UXDashboardDatePicker } from '../page_objects/date_picker'; import { byTestId, loginToKibana, waitForLoadingToFinish } from './utils'; diff --git a/x-pack/plugins/ux/e2e/journeys/ux_visitor_breakdown.journey.ts b/x-pack/plugins/ux/e2e/journeys/ux_visitor_breakdown.journey.ts index a13a45d0f1b9a..86e804f947515 100644 --- a/x-pack/plugins/ux/e2e/journeys/ux_visitor_breakdown.journey.ts +++ b/x-pack/plugins/ux/e2e/journeys/ux_visitor_breakdown.journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, before } from '@elastic/synthetics'; -import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; +import { recordVideo } from '../helpers/record_video'; import { UXDashboardDatePicker } from '../page_objects/date_picker'; import { byLensTestId, loginToKibana, waitForLoadingToFinish } from './utils'; diff --git a/x-pack/plugins/ux/e2e/synthetics_run.ts b/x-pack/plugins/ux/e2e/synthetics_run.ts index 0fe1f67c1bb11..2e7ff314d0201 100644 --- a/x-pack/plugins/ux/e2e/synthetics_run.ts +++ b/x-pack/plugins/ux/e2e/synthetics_run.ts @@ -5,9 +5,9 @@ * 2.0. */ import { FtrConfigProviderContext } from '@kbn/test'; -import { argv } from '@kbn/observability-plugin/e2e/parse_args_params'; import path from 'path'; -import { SyntheticsRunner } from '@kbn/observability-plugin/e2e/synthetics_runner'; +import { argv } from './helpers/parse_args_params'; +import { SyntheticsRunner } from './helpers/synthetics_runner'; const { headless, grep, bail: pauseOnError } = argv; diff --git a/x-pack/plugins/ux/e2e/tasks/es_archiver.ts b/x-pack/plugins/ux/e2e/tasks/es_archiver.ts new file mode 100644 index 0000000000000..bbb66b19f5a5e --- /dev/null +++ b/x-pack/plugins/ux/e2e/tasks/es_archiver.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import Path from 'path'; +import { execSync } from 'child_process'; + +const ES_ARCHIVE_DIR = './fixtures/es_archiver'; + +// Otherwise execSync would inject NODE_TLS_REJECT_UNAUTHORIZED=0 and node would abort if used over https +const NODE_TLS_REJECT_UNAUTHORIZED = '1'; + +export const esArchiverLoad = (folder: string) => { + const path = Path.join(ES_ARCHIVE_DIR, folder); + execSync( + `node ../../../../scripts/es_archiver load "${path}" --config ../../../test/functional/config.base.js`, + { env: { ...process.env, NODE_TLS_REJECT_UNAUTHORIZED }, stdio: 'inherit' } + ); +}; + +export const esArchiverUnload = (folder: string) => { + const path = Path.join(ES_ARCHIVE_DIR, folder); + execSync( + `node ../../../../scripts/es_archiver unload "${path}" --config ../../../test/functional/config.base.js`, + { env: { ...process.env, NODE_TLS_REJECT_UNAUTHORIZED }, stdio: 'inherit' } + ); +}; + +export const esArchiverResetKibana = () => { + execSync( + `node ../../../../scripts/es_archiver empty-kibana-index --config ../../../test/functional/config.base.js`, + { env: { ...process.env, NODE_TLS_REJECT_UNAUTHORIZED }, stdio: 'inherit' } + ); +}; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts index e97c0df7bf1df..4b8962b4771cc 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts @@ -84,6 +84,7 @@ export default function alertTests({ getService }: FtrProviderContext) { }; }), producer: 'alertsFixture', + revision: 0, ruleTypeId: 'test.always-firing', ruleTypeName: 'Test: Always Firing', muteAll: false, @@ -432,6 +433,7 @@ instanceStateValue: true }; }), producer: 'alertsFixture', + revision: 1, ruleTypeId: 'test.always-firing', ruleTypeName: 'Test: Always Firing', muteAll: false, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/rbac_legacy.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/rbac_legacy.ts index 36bc3637d5185..65b0389392104 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/rbac_legacy.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/rbac_legacy.ts @@ -56,17 +56,17 @@ export default function alertTests({ getService }: FtrProviderContext) { ), }; - // Failing: See https://github.com/elastic/kibana/issues/140867 - // Failing: See https://github.com/elastic/kibana/issues/142704 - // Failing: See https://github.com/elastic/kibana/issues/153801 - // Failing: See https://github.com/elastic/kibana/issues/153800 - describe.skip('alerts', () => { + describe('alerts', () => { const authorizationIndex = '.kibana-test-authorization'; const objectRemover = new ObjectRemover(supertest); before(async () => { await esTestIndexTool.destroy(); - await esArchiver.load('x-pack/test/functional/es_archives/alerts_legacy'); + // Not 100% sure why, seems the rules need to be loaded separately to avoid the task + // failing to load the rule during execution and deleting itself. Otherwise + // we have flakiness + await esArchiver.load('x-pack/test/functional/es_archives/alerts_legacy/rules'); + await esArchiver.load('x-pack/test/functional/es_archives/alerts_legacy/tasks'); await esTestIndexTool.setup(); await es.indices.create({ index: authorizationIndex }); await setupSpacesAndUsers(getService); @@ -75,7 +75,8 @@ export default function alertTests({ getService }: FtrProviderContext) { after(async () => { await esTestIndexTool.destroy(); await es.indices.delete({ index: authorizationIndex }); - await esArchiver.unload('x-pack/test/functional/es_archives/alerts_legacy'); + await esArchiver.unload('x-pack/test/functional/es_archives/alerts_legacy/tasks'); + await esArchiver.unload('x-pack/test/functional/es_archives/alerts_legacy/rules'); }); for (const scenario of UserAtSpaceScenarios) { diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/alerts_base.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/alerts_base.ts index f50e0be3c03c5..b90bdd4202d42 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/alerts_base.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/alerts_base.ts @@ -123,6 +123,7 @@ export function alertTests({ getService }: FtrProviderContext, space: Space) { }; }), producer: 'alertsFixture', + revision: 0, ruleTypeId: 'test.always-firing', ruleTypeName: 'Test: Always Firing', muteAll: false, diff --git a/x-pack/test/apm_api_integration/tests/error_rate/service_apis.spec.ts b/x-pack/test/apm_api_integration/tests/error_rate/service_apis.spec.ts index e4b44a289535d..472b5e6097d54 100644 --- a/x-pack/test/apm_api_integration/tests/error_rate/service_apis.spec.ts +++ b/x-pack/test/apm_api_integration/tests/error_rate/service_apis.spec.ts @@ -67,6 +67,16 @@ export default function ApiTest({ getService }: FtrProviderContext) { ...commonQuery, kuery: `processor.event : "${processorEvent}"`, transactionType: 'request', + bucketSizeInSeconds: 60, + ...(processorEvent === ProcessorEvent.metric + ? { + documentType: ApmDocumentType.TransactionMetric, + rollupInterval: RollupInterval.OneMinute, + } + : { + documentType: ApmDocumentType.TransactionEvent, + rollupInterval: RollupInterval.None, + }), }, }, }), diff --git a/x-pack/test/apm_api_integration/tests/services/throughput.spec.ts b/x-pack/test/apm_api_integration/tests/services/throughput.spec.ts index 97236b6d0b6f4..b6f78addd7aca 100644 --- a/x-pack/test/apm_api_integration/tests/services/throughput.spec.ts +++ b/x-pack/test/apm_api_integration/tests/services/throughput.spec.ts @@ -15,6 +15,8 @@ import { APIReturnType, } from '@kbn/apm-plugin/public/services/rest/create_call_apm_api'; import { RecursivePartial } from '@kbn/apm-plugin/typings/common'; +import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type'; +import { RollupInterval } from '@kbn/apm-plugin/common/rollup'; import { FtrProviderContext } from '../../common/ftr_provider_context'; import { roundNumber } from '../../utils'; @@ -32,7 +34,8 @@ export default function ApiTest({ getService }: FtrProviderContext) { async function callApi( overrides?: RecursivePartial< APIClientRequestParamsOf<'GET /internal/apm/services/{serviceName}/throughput'>['params'] - > + >, + processorEvent: 'transaction' | 'metric' = 'metric' ) { const response = await apmApiClient.readUser({ endpoint: 'GET /internal/apm/services/{serviceName}/throughput', @@ -48,6 +51,17 @@ export default function ApiTest({ getService }: FtrProviderContext) { environment: 'ENVIRONMENT_ALL', kuery: '', ...overrides?.query, + ...(processorEvent === 'metric' + ? { + documentType: ApmDocumentType.TransactionMetric, + rollupInterval: RollupInterval.OneMinute, + bucketSizeInSeconds: 60, + } + : { + documentType: ApmDocumentType.TransactionEvent, + rollupInterval: RollupInterval.None, + bucketSizeInSeconds: 30, + }), }, }, }); @@ -120,8 +134,8 @@ export default function ApiTest({ getService }: FtrProviderContext) { before(async () => { const [throughputMetricsResponse, throughputTransactionsResponse] = await Promise.all([ - callApi({ query: { kuery: 'processor.event : "metric"' } }), - callApi({ query: { kuery: 'processor.event : "transaction"' } }), + callApi({}, 'metric'), + callApi({}, 'transaction'), ]); throughputMetrics = throughputMetricsResponse.body; throughputTransactions = throughputTransactionsResponse.body; diff --git a/x-pack/test/apm_api_integration/tests/throughput/service_apis.spec.ts b/x-pack/test/apm_api_integration/tests/throughput/service_apis.spec.ts index 255638f50b85b..c1746975da533 100644 --- a/x-pack/test/apm_api_integration/tests/throughput/service_apis.spec.ts +++ b/x-pack/test/apm_api_integration/tests/throughput/service_apis.spec.ts @@ -4,13 +4,13 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { apm, timerange } from '@kbn/apm-synthtrace-client'; -import expect from '@kbn/expect'; -import { meanBy, sumBy } from 'lodash'; -import { LatencyAggregationType } from '@kbn/apm-plugin/common/latency_aggregation_types'; import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type'; +import { LatencyAggregationType } from '@kbn/apm-plugin/common/latency_aggregation_types'; import { RollupInterval } from '@kbn/apm-plugin/common/rollup'; +import { apm, timerange } from '@kbn/apm-synthtrace-client'; +import expect from '@kbn/expect'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; +import { meanBy, sumBy } from 'lodash'; import { FtrProviderContext } from '../../common/ftr_provider_context'; import { roundNumber } from '../../utils'; @@ -63,6 +63,16 @@ export default function ApiTest({ getService }: FtrProviderContext) { ...commonQuery, kuery: `processor.event : "${processorEvent}"`, transactionType: 'request', + bucketSizeInSeconds: 60, + ...(processorEvent === ProcessorEvent.metric + ? { + documentType: ApmDocumentType.TransactionMetric, + rollupInterval: RollupInterval.OneMinute, + } + : { + documentType: ApmDocumentType.TransactionEvent, + rollupInterval: RollupInterval.None, + }), }, }, }), diff --git a/x-pack/test/apm_api_integration/tests/transactions/error_rate.spec.ts b/x-pack/test/apm_api_integration/tests/transactions/error_rate.spec.ts index 60c980db5d148..3ae8731e8a16a 100644 --- a/x-pack/test/apm_api_integration/tests/transactions/error_rate.spec.ts +++ b/x-pack/test/apm_api_integration/tests/transactions/error_rate.spec.ts @@ -13,6 +13,8 @@ import { APIReturnType, } from '@kbn/apm-plugin/public/services/rest/create_call_apm_api'; import { RecursivePartial } from '@kbn/apm-plugin/typings/common'; +import { ApmDocumentType } from '@kbn/apm-plugin/common/document_type'; +import { RollupInterval } from '@kbn/apm-plugin/common/rollup'; import { FtrProviderContext } from '../../common/ftr_provider_context'; type ErrorRate = @@ -42,6 +44,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { transactionType: 'request', environment: 'ENVIRONMENT_ALL', kuery: '', + documentType: ApmDocumentType.TransactionMetric, + rollupInterval: RollupInterval.OneMinute, + bucketSizeInSeconds: 60, ...overrides?.query, }, }, @@ -84,13 +89,18 @@ export default function ApiTest({ getService }: FtrProviderContext) { successRate: 50, failureRate: 50, }, + secondTransaction: { + name: 'GET /pear 🍎 ', + successRate: 25, + failureRate: 75, + }, }; before(async () => { const serviceGoProdInstance = apm .service({ name: 'opbeans-go', environment: 'production', agentName: 'go' }) .instance('instance-a'); - const { firstTransaction } = config; + const { firstTransaction, secondTransaction } = config; const documents = [ timerange(start, end) @@ -102,21 +112,29 @@ export default function ApiTest({ getService }: FtrProviderContext) { .duration(1000) .success() ), - timerange(start, end) .ratePerMinute(firstTransaction.failureRate) .generator((timestamp) => serviceGoProdInstance .transaction({ transactionName: firstTransaction.name }) - .errors( - serviceGoProdInstance - .error({ - message: 'Error 1', - type: firstTransaction.name, - groupingName: 'Error test', - }) - .timestamp(timestamp) - ) + .duration(1000) + .timestamp(timestamp) + .failure() + ), + timerange(start, end) + .ratePerMinute(secondTransaction.successRate) + .generator((timestamp) => + serviceGoProdInstance + .transaction({ transactionName: secondTransaction.name }) + .timestamp(timestamp) + .duration(1000) + .success() + ), + timerange(start, end) + .ratePerMinute(secondTransaction.failureRate) + .generator((timestamp) => + serviceGoProdInstance + .transaction({ transactionName: secondTransaction.name }) .duration(1000) .timestamp(timestamp) .failure() @@ -174,17 +192,17 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); }); - describe('returns the transaction error rate with comparison data', () => { + describe('returns the transaction error rate with comparison data per transaction name', () => { let errorRateResponse: ErrorRate; before(async () => { - const response = await fetchErrorCharts({ - query: { - transactionName: config.firstTransaction.name, - start: moment(end).subtract(7, 'minutes').toISOString(), - offset: '7m', - }, - }); + const query = { + transactionName: config.firstTransaction.name, + start: moment(end).subtract(7, 'minutes').toISOString(), + offset: '7m', + }; + + const response = await fetchErrorCharts({ query }); errorRateResponse = response.body; }); @@ -246,5 +264,37 @@ export default function ApiTest({ getService }: FtrProviderContext) { ); }); }); + + describe('returns the same error rate for tx metrics and service tx metrics ', () => { + let txMetricsErrorRateResponse: ErrorRate; + let serviceTxMetricsErrorRateResponse: ErrorRate; + + before(async () => { + const [txMetricsResponse, serviceTxMetricsResponse] = await Promise.all([ + fetchErrorCharts(), + fetchErrorCharts({ + query: { documentType: ApmDocumentType.ServiceTransactionMetric }, + }), + ]); + + txMetricsErrorRateResponse = txMetricsResponse.body; + serviceTxMetricsErrorRateResponse = serviceTxMetricsResponse.body; + }); + + describe('has the correct calculation for average', () => { + const expectedFailureRate = + (config.firstTransaction.failureRate + config.secondTransaction.failureRate) / 2 / 100; + + it('for tx metrics', () => { + expect(txMetricsErrorRateResponse.currentPeriod.average).to.eql(expectedFailureRate); + }); + + it('for service tx metrics', () => { + expect(serviceTxMetricsErrorRateResponse.currentPeriod.average).to.eql( + expectedFailureRate + ); + }); + }); + }); }); } diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group6/alerts/alerts_compatibility.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group6/alerts/alerts_compatibility.ts index 64da1c06fe666..7af3e0c00ed02 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group6/alerts/alerts_compatibility.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group6/alerts/alerts_compatibility.ts @@ -368,6 +368,7 @@ export default ({ getService }: FtrProviderContext) => { 'kibana.alert.rule.threat': [], 'kibana.alert.rule.to': 'now', 'kibana.alert.rule.references': [], + 'kibana.alert.rule.revision': 0, 'kibana.alert.rule.version': 1, 'kibana.alert.rule.exceptions_list': [], 'kibana.alert.rule.immutable': false, @@ -528,6 +529,7 @@ export default ({ getService }: FtrProviderContext) => { 'kibana.alert.rule.threat': [], 'kibana.alert.rule.to': 'now', 'kibana.alert.rule.references': [], + 'kibana.alert.rule.revision': 0, 'kibana.alert.rule.version': 1, 'kibana.alert.rule.exceptions_list': [], 'kibana.alert.rule.immutable': false, diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/new_terms.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/new_terms.ts index 88976b8ad3b18..4a2aad16f70df 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/new_terms.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/rule_execution_logic/new_terms.ts @@ -210,6 +210,7 @@ export default ({ getService }: FtrProviderContext) => { 'kibana.alert.rule.interval': '5m', 'kibana.alert.rule.max_signals': 100, 'kibana.alert.rule.references': [], + 'kibana.alert.rule.revision': 0, 'kibana.alert.rule.risk_score_mapping': [], 'kibana.alert.rule.rule_id': 'rule-1', 'kibana.alert.rule.severity_mapping': [], diff --git a/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts b/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts index 949aaa65008c5..aae4f95d2fff2 100644 --- a/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts +++ b/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts @@ -76,7 +76,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.dashboard.clickNewDashboard(); } - describe('dashboard maps by value', function () { + // FLAKY: https://github.com/elastic/kibana/issues/135293 + // FLAKY: https://github.com/elastic/kibana/issues/153959 + describe.skip('dashboard maps by value', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.load( diff --git a/x-pack/test/functional/apps/infra/link_to.ts b/x-pack/test/functional/apps/infra/link_to.ts index 890f85369877c..6598e0e03d6bc 100644 --- a/x-pack/test/functional/apps/infra/link_to.ts +++ b/x-pack/test/functional/apps/infra/link_to.ts @@ -10,6 +10,7 @@ import { URL } from 'url'; import { FtrProviderContext } from '../../ftr_provider_context'; const ONE_HOUR = 60 * 60 * 1000; +const LOG_VIEW_REFERENCE = '(logViewId:default,type:log-view-reference)'; export default ({ getPageObjects, getService }: FtrProviderContext) => { const pageObjects = getPageObjects(['common']); @@ -51,7 +52,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { expect(parsedUrl.searchParams.get('logPosition')).to.be( `(position:(tiebreaker:0,time:${timestamp}))` ); - expect(parsedUrl.searchParams.get('sourceId')).to.be('default'); + expect(parsedUrl.searchParams.get('logView')).to.be(LOG_VIEW_REFERENCE); expect(documentTitle).to.contain('Stream - Logs - Observability - Elastic'); }); }); diff --git a/x-pack/test/functional/es_archives/alerts_legacy/data.json b/x-pack/test/functional/es_archives/alerts_legacy/rules/data.json similarity index 70% rename from x-pack/test/functional/es_archives/alerts_legacy/data.json rename to x-pack/test/functional/es_archives/alerts_legacy/rules/data.json index 770e8e7c15617..2c0552acb6054 100644 --- a/x-pack/test/functional/es_archives/alerts_legacy/data.json +++ b/x-pack/test/functional/es_archives/alerts_legacy/rules/data.json @@ -83,37 +83,6 @@ } } -{ - "type": "doc", - "value": { - "id": "task:e9c069d0-eea4-11ea-a285-352ee3aecffa", - "index": ".kibana_task_manager_1", - "source": { - "migrationVersion": { - "task": "7.6.0" - }, - "references": [ - ], - "task": { - "attempts": 0, - "params": "{\"alertId\":\"6ee9630a-a20e-44af-9465-217a3717d2ab\",\"spaceId\":\"space1\"}", - "retryAt": null, - "runAt": "2020-09-04T11:51:05.197Z", - "scheduledAt": "2020-09-04T11:51:05.197Z", - "scope": [ - "alerting" - ], - "startedAt": null, - "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", - "status": "idle", - "taskType": "alerting:test.always-firing" - }, - "type": "task", - "updated_at": "2020-09-04T11:51:05.197Z" - } - } -} - { "type": "doc", "value": { @@ -176,38 +145,6 @@ } } -{ - "type": "doc", - "value": { - "id": "task:e39a02f0-eea4-11ea-a285-352ee3aecffa", - "index": ".kibana_task_manager_1", - "source": { - "migrationVersion": { - "task": "7.6.0" - }, - "references": [ - ], - "task": { - "attempts": 0, - "ownerId": null, - "params": "{\"alertId\":\"b384be60-ec53-4b26-857e-0253ee55b277\",\"spaceId\":\"space1\"}", - "retryAt": null, - "runAt": "2020-09-04T11:51:04.804Z", - "scheduledAt": "2020-09-04T11:50:54.879Z", - "scope": [ - "alerting" - ], - "startedAt": null, - "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", - "status": "idle", - "taskType": "alerting:test.always-firing" - }, - "type": "task", - "updated_at": "2020-09-04T11:51:04.273Z" - } - } -} - { "type": "doc", "value": { @@ -270,38 +207,6 @@ } } -{ - "type": "doc", - "value": { - "id": "task:e8885f00-eea4-11ea-a285-352ee3aecffa", - "index": ".kibana_task_manager_1", - "source": { - "migrationVersion": { - "task": "7.6.0" - }, - "references": [ - ], - "task": { - "attempts": 1, - "ownerId": "kibana:5b2de169-2785-441b-ae8c-186a1936b17d", - "params": "{\"alertId\":\"5cc59319-74ee-4edc-8646-a79ea91067cd\",\"spaceId\":\"space1\"}", - "retryAt": "2020-09-04T12:01:05.793Z", - "runAt": "2020-09-04T11:51:03.152Z", - "scheduledAt": "2020-09-04T11:51:03.152Z", - "scope": [ - "alerting" - ], - "startedAt": "2020-09-04T11:51:05.793Z", - "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", - "status": "running", - "taskType": "alerting:test.always-firing" - }, - "type": "task", - "updated_at": "2020-09-04T11:51:05.794Z" - } - } -} - { "type": "doc", "value": { @@ -364,38 +269,6 @@ } } -{ - "type": "doc", - "value": { - "id": "task:e616c2c0-eea4-11ea-a285-352ee3aecffa", - "index": ".kibana_task_manager_1", - "source": { - "migrationVersion": { - "task": "7.6.0" - }, - "references": [ - ], - "task": { - "attempts": 1, - "ownerId": "kibana:5b2de169-2785-441b-ae8c-186a1936b17d", - "params": "{\"alertId\":\"d41a6abb-b93b-46df-a80a-926221ea847c\",\"spaceId\":\"space1\"}", - "retryAt": "2020-09-04T12:01:05.793Z", - "runAt": "2020-09-04T11:51:04.804Z", - "scheduledAt": "2020-09-04T11:50:59.052Z", - "scope": [ - "alerting" - ], - "startedAt": "2020-09-04T11:51:05.793Z", - "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", - "status": "idle", - "taskType": "alerting:test.always-firing" - }, - "type": "task", - "updated_at": "2020-09-04T11:51:05.794Z" - } - } -} - { "type": "doc", "value": { @@ -457,35 +330,3 @@ } } } - -{ - "type": "doc", - "value": { - "id": "task:e4df5430-eea4-11ea-a285-352ee3aecffa", - "index": ".kibana_task_manager_1", - "source": { - "migrationVersion": { - "task": "7.6.0" - }, - "references": [ - ], - "task": { - "attempts": 1, - "ownerId": "kibana:5b2de169-2785-441b-ae8c-186a1936b17d", - "params": "{\"alertId\":\"362e362b-a137-4aa2-9434-43e3d0d84a34\",\"spaceId\":\"space1\"}", - "retryAt": "2020-09-04T12:01:05.793Z", - "runAt": "2020-09-04T11:51:04.804Z", - "scheduledAt": "2020-09-04T11:50:57.011Z", - "scope": [ - "alerting" - ], - "startedAt": "2020-09-04T11:51:05.793Z", - "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", - "status": "running", - "taskType": "alerting:test.always-firing" - }, - "type": "task", - "updated_at": "2020-09-04T11:51:05.794Z" - } - } -} \ No newline at end of file diff --git a/x-pack/test/functional/es_archives/alerts_legacy/mappings.json b/x-pack/test/functional/es_archives/alerts_legacy/rules/mappings.json similarity index 95% rename from x-pack/test/functional/es_archives/alerts_legacy/mappings.json rename to x-pack/test/functional/es_archives/alerts_legacy/rules/mappings.json index 6e40f811e1af4..23f170737f498 100644 --- a/x-pack/test/functional/es_archives/alerts_legacy/mappings.json +++ b/x-pack/test/functional/es_archives/alerts_legacy/rules/mappings.json @@ -2520,124 +2520,3 @@ } } } - -{ - "type": "index", - "value": { - "aliases": { - ".kibana_task_manager": { - } - }, - "index": ".kibana_task_manager_1", - "mappings": { - "_meta": { - "migrationMappingPropertyHashes": { - "migrationVersion": "4a1746014a75ade3a714e1db5763276f", - "namespace": "2f4316de49999235636386fe51dc06c1", - "namespaces": "2f4316de49999235636386fe51dc06c1", - "references": "7997cf5a56cc02bdc9c93361bde732b0", - "task": "235412e52d09e7165fac8a67a43ad6b4", - "type": "2f4316de49999235636386fe51dc06c1", - "updated_at": "00da57df13e94e9d98437d13ace4bfe0" - } - }, - "dynamic": "strict", - "properties": { - "migrationVersion": { - "dynamic": "true", - "properties": { - "task": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "namespace": { - "type": "keyword" - }, - "namespaces": { - "type": "keyword" - }, - "references": { - "properties": { - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - }, - "type": "nested" - }, - "task": { - "properties": { - "attempts": { - "type": "integer" - }, - "ownerId": { - "type": "keyword" - }, - "params": { - "type": "text" - }, - "retryAt": { - "type": "date" - }, - "runAt": { - "type": "date" - }, - "schedule": { - "properties": { - "interval": { - "type": "keyword" - } - } - }, - "scheduledAt": { - "type": "date" - }, - "scope": { - "type": "keyword" - }, - "startedAt": { - "type": "date" - }, - "state": { - "type": "text" - }, - "status": { - "type": "keyword" - }, - "taskType": { - "type": "keyword" - }, - "user": { - "type": "keyword" - } - } - }, - "type": { - "type": "keyword" - }, - "updated_at": { - "type": "date" - } - } - }, - "settings": { - "index": { - "auto_expand_replicas": "0-1", - "number_of_replicas": "0", - "number_of_shards": "1" - } - } - } -} diff --git a/x-pack/test/functional/es_archives/alerts_legacy/tasks/data.json b/x-pack/test/functional/es_archives/alerts_legacy/tasks/data.json new file mode 100644 index 0000000000000..e7c99521ff360 --- /dev/null +++ b/x-pack/test/functional/es_archives/alerts_legacy/tasks/data.json @@ -0,0 +1,158 @@ +{ + "type": "doc", + "value": { + "id": "task:e9c069d0-eea4-11ea-a285-352ee3aecffa", + "index": ".kibana_task_manager_1", + "source": { + "migrationVersion": { + "task": "7.6.0" + }, + "references": [ + ], + "task": { + "attempts": 0, + "params": "{\"alertId\":\"6ee9630a-a20e-44af-9465-217a3717d2ab\",\"spaceId\":\"space1\"}", + "retryAt": null, + "runAt": "2020-09-04T11:51:05.197Z", + "scheduledAt": "2020-09-04T11:51:05.197Z", + "scope": [ + "alerting" + ], + "startedAt": null, + "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", + "status": "idle", + "taskType": "alerting:test.always-firing" + }, + "type": "task", + "updated_at": "2020-09-04T11:51:05.197Z" + } + } +} + +{ + "type": "doc", + "value": { + "id": "task:e39a02f0-eea4-11ea-a285-352ee3aecffa", + "index": ".kibana_task_manager_1", + "source": { + "migrationVersion": { + "task": "7.6.0" + }, + "references": [ + ], + "task": { + "attempts": 0, + "ownerId": null, + "params": "{\"alertId\":\"b384be60-ec53-4b26-857e-0253ee55b277\",\"spaceId\":\"space1\"}", + "retryAt": null, + "runAt": "2020-09-04T11:51:04.804Z", + "scheduledAt": "2020-09-04T11:50:54.879Z", + "scope": [ + "alerting" + ], + "startedAt": null, + "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", + "status": "idle", + "taskType": "alerting:test.always-firing" + }, + "type": "task", + "updated_at": "2020-09-04T11:51:04.273Z" + } + } +} + +{ + "type": "doc", + "value": { + "id": "task:e8885f00-eea4-11ea-a285-352ee3aecffa", + "index": ".kibana_task_manager_1", + "source": { + "migrationVersion": { + "task": "7.6.0" + }, + "references": [ + ], + "task": { + "attempts": 1, + "ownerId": "kibana:5b2de169-2785-441b-ae8c-186a1936b17d", + "params": "{\"alertId\":\"5cc59319-74ee-4edc-8646-a79ea91067cd\",\"spaceId\":\"space1\"}", + "retryAt": "2020-09-04T12:01:05.793Z", + "runAt": "2020-09-04T11:51:03.152Z", + "scheduledAt": "2020-09-04T11:51:03.152Z", + "scope": [ + "alerting" + ], + "startedAt": "2020-09-04T11:51:05.793Z", + "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", + "status": "running", + "taskType": "alerting:test.always-firing" + }, + "type": "task", + "updated_at": "2020-09-04T11:51:05.794Z" + } + } +} + +{ + "type": "doc", + "value": { + "id": "task:e616c2c0-eea4-11ea-a285-352ee3aecffa", + "index": ".kibana_task_manager_1", + "source": { + "migrationVersion": { + "task": "7.6.0" + }, + "references": [ + ], + "task": { + "attempts": 1, + "ownerId": "kibana:5b2de169-2785-441b-ae8c-186a1936b17d", + "params": "{\"alertId\":\"d41a6abb-b93b-46df-a80a-926221ea847c\",\"spaceId\":\"space1\"}", + "retryAt": "2020-09-04T12:01:05.793Z", + "runAt": "2020-09-04T11:51:04.804Z", + "scheduledAt": "2020-09-04T11:50:59.052Z", + "scope": [ + "alerting" + ], + "startedAt": "2020-09-04T11:51:05.793Z", + "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", + "status": "idle", + "taskType": "alerting:test.always-firing" + }, + "type": "task", + "updated_at": "2020-09-04T11:51:05.794Z" + } + } +} + +{ + "type": "doc", + "value": { + "id": "task:e4df5430-eea4-11ea-a285-352ee3aecffa", + "index": ".kibana_task_manager_1", + "source": { + "migrationVersion": { + "task": "7.6.0" + }, + "references": [ + ], + "task": { + "attempts": 1, + "ownerId": "kibana:5b2de169-2785-441b-ae8c-186a1936b17d", + "params": "{\"alertId\":\"362e362b-a137-4aa2-9434-43e3d0d84a34\",\"spaceId\":\"space1\"}", + "retryAt": "2020-09-04T12:01:05.793Z", + "runAt": "2020-09-04T11:51:04.804Z", + "scheduledAt": "2020-09-04T11:50:57.011Z", + "scope": [ + "alerting" + ], + "startedAt": "2020-09-04T11:51:05.793Z", + "state": "{\"previousStartedAt\":null,\"alertTypeState\":{},\"alertInstances\":{}}", + "status": "running", + "taskType": "alerting:test.always-firing" + }, + "type": "task", + "updated_at": "2020-09-04T11:51:05.794Z" + } + } +} diff --git a/x-pack/test/functional/es_archives/alerts_legacy/tasks/mappings.json b/x-pack/test/functional/es_archives/alerts_legacy/tasks/mappings.json new file mode 100644 index 0000000000000..d139264b8de93 --- /dev/null +++ b/x-pack/test/functional/es_archives/alerts_legacy/tasks/mappings.json @@ -0,0 +1,120 @@ +{ + "type": "index", + "value": { + "aliases": { + ".kibana_task_manager": { + } + }, + "index": ".kibana_task_manager_1", + "mappings": { + "_meta": { + "migrationMappingPropertyHashes": { + "migrationVersion": "4a1746014a75ade3a714e1db5763276f", + "namespace": "2f4316de49999235636386fe51dc06c1", + "namespaces": "2f4316de49999235636386fe51dc06c1", + "references": "7997cf5a56cc02bdc9c93361bde732b0", + "task": "235412e52d09e7165fac8a67a43ad6b4", + "type": "2f4316de49999235636386fe51dc06c1", + "updated_at": "00da57df13e94e9d98437d13ace4bfe0" + } + }, + "dynamic": "strict", + "properties": { + "migrationVersion": { + "dynamic": "true", + "properties": { + "task": { + "fields": { + "keyword": { + "ignore_above": 256, + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "namespace": { + "type": "keyword" + }, + "namespaces": { + "type": "keyword" + }, + "references": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, + "task": { + "properties": { + "attempts": { + "type": "integer" + }, + "ownerId": { + "type": "keyword" + }, + "params": { + "type": "text" + }, + "retryAt": { + "type": "date" + }, + "runAt": { + "type": "date" + }, + "schedule": { + "properties": { + "interval": { + "type": "keyword" + } + } + }, + "scheduledAt": { + "type": "date" + }, + "scope": { + "type": "keyword" + }, + "startedAt": { + "type": "date" + }, + "state": { + "type": "text" + }, + "status": { + "type": "keyword" + }, + "taskType": { + "type": "keyword" + }, + "user": { + "type": "keyword" + } + } + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "number_of_replicas": "0", + "number_of_shards": "1" + } + } + } +} diff --git a/x-pack/test/functional_with_es_ssl/plugins/cases/public/application.tsx b/x-pack/test/functional_with_es_ssl/plugins/cases/public/application.tsx index 8499ce501c23d..d49568b79298b 100644 --- a/x-pack/test/functional_with_es_ssl/plugins/cases/public/application.tsx +++ b/x-pack/test/functional_with_es_ssl/plugins/cases/public/application.tsx @@ -49,8 +49,8 @@ const attachments = [{ type: CommentType.user as const, comment: 'test' }]; const CasesFixtureAppWithContext: React.FC = (props) => { const { cases } = props; - const createCaseFlyout = cases.hooks.getUseCasesAddToNewCaseFlyout(); - const selectCaseModal = cases.hooks.getUseCasesAddToExistingCaseModal(); + const createCaseFlyout = cases.hooks.useCasesAddToNewCaseFlyout(); + const selectCaseModal = cases.hooks.useCasesAddToExistingCaseModal(); return ( diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts index 2da99fb2745c8..67478db2c8c00 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts @@ -112,7 +112,6 @@ export default function ({ getService }: FtrProviderContext) { 'apm-source-map-migration-task', 'apm-telemetry-task', 'cases-telemetry-task', - 'cleanup_failed_action_executions', 'cloud_security_posture-stats_task', 'dashboard_telemetry', 'endpoint:metadata-check-transforms-task', diff --git a/x-pack/test/saved_object_tagging/functional/tests/visualize_integration.ts b/x-pack/test/saved_object_tagging/functional/tests/visualize_integration.ts index a7a03a58ba0cf..515c79ae5156a 100644 --- a/x-pack/test/saved_object_tagging/functional/tests/visualize_integration.ts +++ b/x-pack/test/saved_object_tagging/functional/tests/visualize_integration.ts @@ -61,7 +61,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.header.waitUntilLoadingHasFinished(); }; - describe('visualize integration', () => { + // Failing: See https://github.com/elastic/kibana/issues/88639 + describe.skip('visualize integration', () => { before(async () => { // clean up any left-over visualizations and tags from tests that didn't clean up after themselves await kibanaServer.savedObjects.clean({ types: ['tag', 'visualization'] }); diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/artifact_entries_list.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/artifact_entries_list.ts index 00ff378cde2bf..5b825876c8c9e 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/artifact_entries_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/artifact_entries_list.ts @@ -17,13 +17,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const browser = getService('browser'); const endpointTestResources = getService('endpointTestResources'); - const policyTestResources = getService('policyTestResources'); const retry = getService('retry'); const esClient = getService('es'); const unzipPromisify = promisify(unzip); - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('For each artifact list under management', function () { + describe('For each artifact list under management', function () { let indexedData: IndexedHostsAndAlertsResponse; const checkFleetArtifacts = async ( @@ -75,8 +73,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { for (const testData of getArtifactsListTestsData()) { describe(`When on the ${testData.title} entries list`, function () { before(async () => { - const endpointPackage = await policyTestResources.getEndpointPackage(); - await endpointTestResources.setMetadataTransformFrequency('1s', endpointPackage.version); indexedData = await endpointTestResources.loadEndpointData(); await browser.refresh(); await pageObjects.artifactEntriesList.navigateToList(testData.urlPath); diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts index f25f6be491836..cc46e4c1ebf90 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts @@ -81,8 +81,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { return tableData; }; - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('endpoint list', function () { + describe('endpoint list', function () { const sleep = (ms = 100) => new Promise((resolve) => setTimeout(resolve, ms)); let indexedData: IndexedHostsAndAlertsResponse; describe('when initially navigating to page', () => { diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_permissions.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_permissions.ts index f76765c3b67ec..6e1850373af81 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_permissions.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_permissions.ts @@ -18,16 +18,12 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const PageObjects = getPageObjects(['security', 'endpoint', 'detections', 'hosts']); const testSubjects = getService('testSubjects'); const endpointTestResources = getService('endpointTestResources'); - const policyTestResources = getService('policyTestResources'); - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('Endpoint permissions:', () => { + describe('Endpoint permissions:', () => { let indexedData: IndexedHostsAndAlertsResponse; before(async () => { // todo: way to force an endpoint to be created in isolated mode so we can check that state in the UI - const endpointPackage = await policyTestResources.getEndpointPackage(); - await endpointTestResources.setMetadataTransformFrequency('1s', endpointPackage.version); indexedData = await endpointTestResources.loadEndpointData(); // Force a logout so that we start from the login page diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts index 8f4e71be82b9b..32b2ce196d7e5 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_solution_integrations.ts @@ -24,8 +24,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const pageObjects = getPageObjects(['common', 'timeline']); - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('App level Endpoint functionality', () => { + describe('App level Endpoint functionality', () => { let indexedData: IndexedHostsAndAlertsResponse; let indexedAlerts: IndexedEndpointRuleAlerts; let endpointAgentId: string; diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/policy_details.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/policy_details.ts index d46c9a997dcb5..da4b754126383 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/policy_details.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/policy_details.ts @@ -25,8 +25,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const policyTestResources = getService('policyTestResources'); const endpointTestResources = getService('endpointTestResources'); - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('When on the Endpoint Policy Details Page', function () { + describe('When on the Endpoint Policy Details Page', function () { let indexedData: IndexedHostsAndAlertsResponse; before(async () => { diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/policy_list.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/policy_list.ts index cd14f2717d19f..5d0ee544360d6 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/policy_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/policy_list.ts @@ -26,8 +26,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('When on the Endpoint Policy List Page', () => { before(async () => { - const endpointPackage = await policyTestResources.getEndpointPackage(); - await endpointTestResources.setMetadataTransformFrequency('1s', endpointPackage.version); await browser.refresh(); }); diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts index bd8d8075cb747..9081ca2ba096b 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts @@ -81,8 +81,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { ); }; - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('Response Actions Responder', function () { + describe('Response Actions Responder', function () { let indexedData: IndexedHostsAndAlertsResponse; let endpointAgentId: string; diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/trusted_apps_list.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/trusted_apps_list.ts index 00c196c1b58fe..12867852edc2d 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/trusted_apps_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/trusted_apps_list.ts @@ -14,14 +14,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const browser = getService('browser'); const endpointTestResources = getService('endpointTestResources'); - const policyTestResources = getService('policyTestResources'); - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('When on the Trusted Apps list', function () { + describe('When on the Trusted Apps list', function () { let indexedData: IndexedHostsAndAlertsResponse; before(async () => { - const endpointPackage = await policyTestResources.getEndpointPackage(); - await endpointTestResources.setMetadataTransformFrequency('1s', endpointPackage.version); indexedData = await endpointTestResources.loadEndpointData(); await browser.refresh(); await pageObjects.trustedApps.navigateToTrustedAppsList(); diff --git a/x-pack/test/security_solution_endpoint/services/endpoint.ts b/x-pack/test/security_solution_endpoint/services/endpoint.ts index c74ba05c4ae3e..6262ae62f8f8f 100644 --- a/x-pack/test/security_solution_endpoint/services/endpoint.ts +++ b/x-pack/test/security_solution_endpoint/services/endpoint.ts @@ -22,9 +22,6 @@ import { IndexedHostsAndAlertsResponse, indexHostsAndAlerts, } from '@kbn/security-solution-plugin/common/endpoint/index_data'; -import { TransformConfigUnion } from '@kbn/transform-plugin/common/types/transform'; -import { GetTransformsResponseSchema } from '@kbn/transform-plugin/common/api_schemas/transforms'; -import { catchAndWrapError } from '@kbn/security-solution-plugin/server/endpoint/utils'; import { installOrUpgradeEndpointFleetPackage } from '@kbn/security-solution-plugin/common/endpoint/data_loaders/setup_fleet_for_endpoint'; import { EndpointError } from '@kbn/security-solution-plugin/common/endpoint/errors'; import { STARTED_TRANSFORM_STATES } from '@kbn/security-solution-plugin/common/constants'; @@ -56,57 +53,10 @@ export class EndpointTestResources extends FtrService { private readonly esClient = this.ctx.getService('es'); private readonly retry = this.ctx.getService('retry'); private readonly kbnClient = this.ctx.getService('kibanaServer'); - private readonly transform = this.ctx.getService('transform'); private readonly config = this.ctx.getService('config'); private readonly supertest = this.ctx.getService('supertest'); private readonly log = this.ctx.getService('log'); - private generateTransformId(endpointPackageVersion?: string): string { - return `${metadataTransformPrefix}-${endpointPackageVersion ?? ''}`; - } - - /** - * Fetches the information for the endpoint transform - * - * @param [endpointPackageVersion] if set, it will be used to get the specific transform this this package version. Else just returns first one found - */ - async getTransform(endpointPackageVersion?: string): Promise { - const transformId = this.generateTransformId(endpointPackageVersion); - let transform: TransformConfigUnion | undefined; - - if (endpointPackageVersion) { - await this.transform.api.waitForTransformToExist(transformId); - - transform = ( - ( - await this.transform.api - .getTransform(transformId) - .catch(catchAndWrapError) - .then((response: { body: GetTransformsResponseSchema }) => response) - ).body as GetTransformsResponseSchema - ).transforms[0]; - } else { - transform = ( - await this.transform.api.getTransformList(100).catch(catchAndWrapError) - ).transforms.find((t) => t.id.startsWith(transformId)); - } - - if (!transform) { - throw new EndpointError('Endpoint metadata transform not found'); - } - - return transform; - } - - async setMetadataTransformFrequency( - frequency: string, - /** Used to update the transform installed with the given package version */ - endpointPackageVersion?: string - ): Promise { - const transform = await this.getTransform(endpointPackageVersion).catch(catchAndWrapError); - await this.transform.api.updateTransform(transform.id, { frequency }).catch(catchAndWrapError); - } - private async stopTransform(transformId: string) { const stopRequest = { transform_id: `${transformId}*`, @@ -189,7 +139,8 @@ export class EndpointTestResources extends FtrService { alertsPerHost, enableFleetIntegration, undefined, - CurrentKibanaVersionDocGenerator + CurrentKibanaVersionDocGenerator, + false ); if (waitUntilTransformed) { diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_authz.ts b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_authz.ts index 41870a5ab67a6..f6c655164e249 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_authz.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_authz.ts @@ -38,8 +38,7 @@ export default function ({ getService }: FtrProviderContext) { body: Record | undefined; } - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('When attempting to call an endpoint api', () => { + describe('When attempting to call an endpoint api', () => { let indexedData: IndexedHostsAndAlertsResponse; let actionId = ''; let agentId = ''; @@ -150,8 +149,8 @@ export default function ({ getService }: FtrProviderContext) { actionId = indexedData.actions[0].action_id; }); - after(() => { - endpointTestResources.unloadEndpointData(indexedData); + after(async () => { + await endpointTestResources.unloadEndpointData(indexedData); }); describe('with minimal_all', () => { diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_response_actions/execute.ts b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_response_actions/execute.ts index 8ac14f74afe5c..07dd18a1db290 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_response_actions/execute.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_response_actions/execute.ts @@ -15,8 +15,7 @@ export default function ({ getService }: FtrProviderContext) { const supertestWithoutAuth = getService('supertestWithoutAuth'); const endpointTestResources = getService('endpointTestResources'); - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('Endpoint `execute` response action', () => { + describe('Endpoint `execute` response action', () => { let indexedData: IndexedHostsAndAlertsResponse; let agentId = ''; @@ -25,8 +24,8 @@ export default function ({ getService }: FtrProviderContext) { agentId = indexedData.hosts[0].agent.id; }); - after(() => { - endpointTestResources.unloadEndpointData(indexedData); + after(async () => { + await endpointTestResources.unloadEndpointData(indexedData); }); it('should not allow `execute` action without required privilege', async () => { diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts index 70b5a32c24643..04d7915e2560d 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts @@ -37,12 +37,7 @@ export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const endpointTestResources = getService('endpointTestResources'); - // FLAKY: https://github.com/elastic/kibana/issues/153855 - describe.skip('test metadata apis', () => { - before(async () => { - await endpointTestResources.setMetadataTransformFrequency('1s'); - }); - + describe('test metadata apis', () => { describe('list endpoints GET route', () => { const numberOfHostsInFixture = 2; diff --git a/yarn.lock b/yarn.lock index 9092af47cac2c..6b9aa878abf87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24332,7 +24332,7 @@ react-shortcuts@^2.1.0: platform "^1.3.0" prop-types "^15.5.8" -react-sizeme@^3.0.1, react-sizeme@^3.0.2: +react-sizeme@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-3.0.2.tgz#4a2f167905ba8f8b8d932a9e35164e459f9020e4" integrity sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==