diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml
index ebaeb6c3692b7..f16b0e46ada95 100644
--- a/.buildkite/ftr_configs.yml
+++ b/.buildkite/ftr_configs.yml
@@ -129,6 +129,7 @@ enabled:
- x-pack/test/banners_functional/config.ts
- x-pack/test/cases_api_integration/security_and_spaces/config_basic.ts
- x-pack/test/cases_api_integration/security_and_spaces/config_trial.ts
+ - x-pack/test/cases_api_integration/security_and_spaces/config_no_public_base_url.ts
- x-pack/test/cases_api_integration/spaces_only/config.ts
- x-pack/test/detection_engine_api_integration/basic/config.ts
- x-pack/test/detection_engine_api_integration/security_and_spaces/group1/config.ts
diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx
index 98475403ca32b..eb1487ddb610d 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: 2022-10-13
+date: 2022-10-14
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 ae099907eaf10..8efa7f8781595 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: 2022-10-13
+date: 2022-10-14
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 7683a670ad0cc..c39e3fbf400c7 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops']
---
import aiopsObj from './aiops.devdocs.json';
diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx
index b6223f469ee75..35b9e4b271e82 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting']
---
import alertingObj from './alerting.devdocs.json';
diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx
index 03b40689a968d..d268ae24dbc35 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm']
---
import apmObj from './apm.devdocs.json';
diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx
index 9237485502816..646e7c8219680 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: 2022-10-13
+date: 2022-10-14
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 ab75b3c20bcbf..41bbb3e7fde44 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: 2022-10-13
+date: 2022-10-14
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 6cbfe95fcdb59..bd967866d8230 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas']
---
import canvasObj from './canvas.devdocs.json';
diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx
index e1c0468fdc4c0..d8a87f238d651 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases']
---
import casesObj from './cases.devdocs.json';
diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx
index e5a37209f9534..b954be6c09277 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: 2022-10-13
+date: 2022-10-14
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 8ce2184ab234a..d9469e759a288 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: 2022-10-13
+date: 2022-10-14
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 89a97f55ad913..4f569492a3ce5 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat']
---
import cloudChatObj from './cloud_chat.devdocs.json';
diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx
index 5e5b0d5fed32f..54eb31e82e81a 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: 2022-10-13
+date: 2022-10-14
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 e965852141d18..5cc76805706d6 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: 2022-10-13
+date: 2022-10-14
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 850f02ae5bd07..ba26675b39cbd 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console']
---
import consoleObj from './console.devdocs.json';
diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx
index e18730f0d1032..d6b0f70a9cf33 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls']
---
import controlsObj from './controls.devdocs.json';
diff --git a/api_docs/core.devdocs.json b/api_docs/core.devdocs.json
index df4c2daee6312..6ef18a3a1a34a 100644
--- a/api_docs/core.devdocs.json
+++ b/api_docs/core.devdocs.json
@@ -520,6 +520,10 @@
"plugin": "dashboard",
"path": "src/plugins/dashboard/public/services/analytics/analytics_service.ts"
},
+ {
+ "plugin": "fleet",
+ "path": "x-pack/plugins/fleet/server/services/fleet_usage_sender.ts"
+ },
{
"plugin": "osquery",
"path": "x-pack/plugins/osquery/server/lib/telemetry/sender.ts"
@@ -978,6 +982,14 @@
"plugin": "@kbn/core-status-server-internal",
"path": "packages/core/status/core-status-server-internal/src/status_service.ts"
},
+ {
+ "plugin": "security",
+ "path": "x-pack/plugins/security/public/analytics/analytics_service.test.ts"
+ },
+ {
+ "plugin": "security",
+ "path": "x-pack/plugins/security/public/analytics/analytics_service.test.ts"
+ },
{
"plugin": "security",
"path": "x-pack/plugins/security/public/analytics/register_user_context.test.ts"
@@ -11082,18 +11094,6 @@
"plugin": "alerting",
"path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts"
},
- {
- "plugin": "alerting",
- "path": "x-pack/plugins/alerting/server/saved_objects/migrations.ts"
- },
- {
- "plugin": "alerting",
- "path": "x-pack/plugins/alerting/server/saved_objects/migrations.ts"
- },
- {
- "plugin": "alerting",
- "path": "x-pack/plugins/alerting/server/saved_objects/migrations.ts"
- },
{
"plugin": "alerting",
"path": "x-pack/plugins/alerting/server/types.ts"
@@ -11274,6 +11274,22 @@
"plugin": "ml",
"path": "x-pack/plugins/ml/common/types/modules.ts"
},
+ {
+ "plugin": "alerting",
+ "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts"
+ },
+ {
+ "plugin": "alerting",
+ "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts"
+ },
+ {
+ "plugin": "alerting",
+ "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.15/index.ts"
+ },
+ {
+ "plugin": "alerting",
+ "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.15/index.ts"
+ },
{
"plugin": "dashboard",
"path": "src/plugins/dashboard/public/services/dashboard_saved_object/lib/save_dashboard_state_to_saved_object.ts"
@@ -19275,6 +19291,10 @@
"plugin": "dashboard",
"path": "src/plugins/dashboard/public/services/analytics/analytics_service.ts"
},
+ {
+ "plugin": "fleet",
+ "path": "x-pack/plugins/fleet/server/services/fleet_usage_sender.ts"
+ },
{
"plugin": "osquery",
"path": "x-pack/plugins/osquery/server/lib/telemetry/sender.ts"
@@ -19733,6 +19753,14 @@
"plugin": "@kbn/core-status-server-internal",
"path": "packages/core/status/core-status-server-internal/src/status_service.ts"
},
+ {
+ "plugin": "security",
+ "path": "x-pack/plugins/security/public/analytics/analytics_service.test.ts"
+ },
+ {
+ "plugin": "security",
+ "path": "x-pack/plugins/security/public/analytics/analytics_service.test.ts"
+ },
{
"plugin": "security",
"path": "x-pack/plugins/security/public/analytics/register_user_context.test.ts"
@@ -40746,18 +40774,6 @@
"plugin": "alerting",
"path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts"
},
- {
- "plugin": "alerting",
- "path": "x-pack/plugins/alerting/server/saved_objects/migrations.ts"
- },
- {
- "plugin": "alerting",
- "path": "x-pack/plugins/alerting/server/saved_objects/migrations.ts"
- },
- {
- "plugin": "alerting",
- "path": "x-pack/plugins/alerting/server/saved_objects/migrations.ts"
- },
{
"plugin": "alerting",
"path": "x-pack/plugins/alerting/server/types.ts"
@@ -40938,6 +40954,22 @@
"plugin": "ml",
"path": "x-pack/plugins/ml/common/types/modules.ts"
},
+ {
+ "plugin": "alerting",
+ "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts"
+ },
+ {
+ "plugin": "alerting",
+ "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts"
+ },
+ {
+ "plugin": "alerting",
+ "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.15/index.ts"
+ },
+ {
+ "plugin": "alerting",
+ "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.15/index.ts"
+ },
{
"plugin": "dashboard",
"path": "src/plugins/dashboard/public/services/dashboard_saved_object/lib/save_dashboard_state_to_saved_object.ts"
diff --git a/api_docs/core.mdx b/api_docs/core.mdx
index 35cc636d8da18..4a9b93624ce46 100644
--- a/api_docs/core.mdx
+++ b/api_docs/core.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/core
title: "core"
image: https://source.unsplash.com/400x175/?github
description: API docs for the core plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core']
---
import coreObj from './core.devdocs.json';
diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx
index 8cf8442b3a671..1a241c5d3afef 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: 2022-10-13
+date: 2022-10-14
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 71e3c9ae67d08..6daeff8f09e23 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: 2022-10-13
+date: 2022-10-14
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 5c1fa56b3e93d..32db4218f4f97 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced']
---
import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json';
diff --git a/api_docs/data.mdx b/api_docs/data.mdx
index abb89969d739c..174bf75e5af79 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: 2022-10-13
+date: 2022-10-14
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 eb8e3e42c061a..dd592bf2517b5 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: 2022-10-13
+date: 2022-10-14
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 291a7a6b787ba..f5a60d70bb2c6 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: 2022-10-13
+date: 2022-10-14
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 03ade23298bb1..9c86d87a5f88a 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: 2022-10-13
+date: 2022-10-14
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 9b5f32daa5cde..a5f257464b327 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: 2022-10-13
+date: 2022-10-14
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 f3cf02d01efb5..0d2ae84687987 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement']
---
import dataViewManagementObj from './data_view_management.devdocs.json';
diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx
index 9be1ce0c9d549..a4a8fb7164d13 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: 2022-10-13
+date: 2022-10-14
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 e1c15f0b36c71..509f317201b63 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: 2022-10-13
+date: 2022-10-14
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 e65b6f2b8d747..1a6c8659439f8 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx
index bed0c87d8dc72..1bae8a7b2bc20 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -146,8 +146,8 @@ so TS and code-reference navigation might not highlight them. |
| | [plugin.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/plugin.test.ts#:~:text=getKibanaFeatures) | 8.8.0 |
| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/plugin.ts#:~:text=license%24), [license_state.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/lib/license_state.test.ts#:~:text=license%24), [license_state.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/lib/license_state.test.ts#:~:text=license%24) | 8.8.0 |
| | [task.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/usage/task.ts#:~:text=index) | - |
-| | [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/migrations.ts#:~:text=SavedObjectAttributes)+ 10 more | - |
-| | [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/migrations.ts#:~:text=SavedObjectAttributes)+ 10 more | - |
+| | [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/types.ts#:~:text=SavedObjectAttributes)+ 11 more | - |
+| | [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/types.ts#:~:text=SavedObjectAttributes)+ 11 more | - |
diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx
index dfc99dbe7718f..e0042adee26db 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx
index 3c1c313bb4e64..d9e9568875adb 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools']
---
import devToolsObj from './dev_tools.devdocs.json';
diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx
index 392dfd744fed4..495a0e8ec6e81 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: 2022-10-13
+date: 2022-10-14
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 b21117ef64068..3dcadce3585c0 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced']
---
import discoverEnhancedObj from './discover_enhanced.devdocs.json';
diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx
index 1bc67b83f88e5..a23b5b4de8375 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: 2022-10-13
+date: 2022-10-14
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 f763f8878f9a9..90995e3bfa964 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: 2022-10-13
+date: 2022-10-14
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 c1664e7a0488d..34c1ea59c2abb 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: 2022-10-13
+date: 2022-10-14
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 8434b169b1685..343431e4c5c21 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: 2022-10-13
+date: 2022-10-14
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 2414f2f989d1f..5b014c7c0694a 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: 2022-10-13
+date: 2022-10-14
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 fc4cd7075c95c..020dd9437577f 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: 2022-10-13
+date: 2022-10-14
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 87eb0ca4239e5..0439d22f3e1b0 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog']
---
import eventLogObj from './event_log.devdocs.json';
diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx
index 8d383dd04bc63..07f25b5592b84 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: 2022-10-13
+date: 2022-10-14
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 0110beea0a830..b97850f178671 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: 2022-10-13
+date: 2022-10-14
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 70498224fe725..8ee4ab363e88f 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: 2022-10-13
+date: 2022-10-14
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 7f75a856a9f8a..01b9779c303de 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: 2022-10-13
+date: 2022-10-14
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 d915562f517ed..77e866e689778 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: 2022-10-13
+date: 2022-10-14
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 fc56222c21303..1011437ae1e1d 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: 2022-10-13
+date: 2022-10-14
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 4f0f35468da93..27aec8dea2ffd 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: 2022-10-13
+date: 2022-10-14
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 6ea78a426b00f..836e7bedb1e6a 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: 2022-10-13
+date: 2022-10-14
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 cbcdc174a0bd2..faeeacfabfd3f 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: 2022-10-13
+date: 2022-10-14
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 7d49523bfcede..94e1f192e8026 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: 2022-10-13
+date: 2022-10-14
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 d185ed80d375f..d1b8304c51d39 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: 2022-10-13
+date: 2022-10-14
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 a75a5099d8cbf..fd04d9f42ce63 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: 2022-10-13
+date: 2022-10-14
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 d5e95d79161de..7f06be4f1b41f 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY']
---
import expressionXYObj from './expression_x_y.devdocs.json';
diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx
index fb122a1a0d183..12dabf8516cfe 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: 2022-10-13
+date: 2022-10-14
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 cb4f5a47beb92..fd6c3ab75b9cf 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: 2022-10-13
+date: 2022-10-14
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 4dd5241b7e864..f413678b536a7 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: 2022-10-13
+date: 2022-10-14
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 d8ae8de7c78a5..1bdd39c60beb8 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: 2022-10-13
+date: 2022-10-14
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 18dd2dbbd8326..d81441b17ea2d 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files']
---
import filesObj from './files.devdocs.json';
diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx
index d773a828ed5c0..c0447d71298df 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: 2022-10-13
+date: 2022-10-14
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 9210e5f155a06..8e9ba7f45684c 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch']
---
import globalSearchObj from './global_search.devdocs.json';
diff --git a/api_docs/guided_onboarding.devdocs.json b/api_docs/guided_onboarding.devdocs.json
index 5b5809dbbe1e8..701721e92edd3 100644
--- a/api_docs/guided_onboarding.devdocs.json
+++ b/api_docs/guided_onboarding.devdocs.json
@@ -108,7 +108,7 @@
"label": "status",
"description": [],
"signature": [
- "\"complete\" | \"in_progress\" | \"inactive\" | \"active\""
+ "\"complete\" | \"in_progress\" | \"ready_to_complete\" | \"inactive\" | \"active\""
],
"path": "src/plugins/guided_onboarding/common/types.ts",
"deprecated": false,
diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx
index 68dbb0f83f797..10b43de72130a 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: 2022-10-13
+date: 2022-10-14
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 479a0c9fedc0a..4310a630f34da 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home']
---
import homeObj from './home.devdocs.json';
diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx
index 29afac21e3b8f..186519279e1b8 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: 2022-10-13
+date: 2022-10-14
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 7e1db0a05745c..0434e0878974b 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: 2022-10-13
+date: 2022-10-14
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 f8ed2d3c0f53e..ccd47d562583e 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: 2022-10-13
+date: 2022-10-14
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 0f1b903f620d1..e26714eb8cafb 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: 2022-10-13
+date: 2022-10-14
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 3a9118e7bbf8b..1b9eafd7f4838 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: 2022-10-13
+date: 2022-10-14
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 c2b1768cd69af..bd1891303fc21 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: 2022-10-13
+date: 2022-10-14
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 4b950ba190115..ac428f3150d40 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: 2022-10-13
+date: 2022-10-14
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 65bc270d4af3f..e95ee7e70935d 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: 2022-10-13
+date: 2022-10-14
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 9b4555587996f..7f7b670e95ea4 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts']
---
import kbnAlertsObj from './kbn_alerts.devdocs.json';
diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx
index 24973a77dda65..8bb00f0d887ae 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: 2022-10-13
+date: 2022-10-14
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 6ddd79212358e..f876f523e5273 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: 2022-10-13
+date: 2022-10-14
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 0dc05aac8b78d..0f201ca949aa1 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: 2022-10-13
+date: 2022-10-14
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 4932a398ad9e4..cb8d81d380d24 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: 2022-10-13
+date: 2022-10-14
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 65b1a4f1ba756..2d1e94bb29c62 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: 2022-10-13
+date: 2022-10-14
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 c1be6165b238c..afe87b71afc62 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory']
---
import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json';
diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx
index e3bb48e2e0811..619782af2efab 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: 2022-10-13
+date: 2022-10-14
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 5486e5f333bdb..11c063f49dba3 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace']
---
import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json';
diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx
index b218432f5ebcc..ac9994663428f 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: 2022-10-13
+date: 2022-10-14
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 c1e0fe3aaf76e..6174a4bf432e3 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: 2022-10-13
+date: 2022-10-14
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 1ce366a32d4fe..819ace3145acf 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components']
---
import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json';
diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx
index ad4519607eb28..216a6888c4a0a 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: 2022-10-13
+date: 2022-10-14
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 a141e3ec816a0..a2f5fba60997c 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: 2022-10-13
+date: 2022-10-14
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 257d08713f24c..3cbbf3a8b0e6e 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: 2022-10-13
+date: 2022-10-14
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 efd3e4379a169..63f7c5fae7aaf 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: 2022-10-13
+date: 2022-10-14
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 d801f0e8cfbd5..ec95959f24487 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode']
---
import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json';
diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx
index 9f87e2c6acc73..8639ce062be28 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: 2022-10-13
+date: 2022-10-14
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 0dbc5adbc45d7..6f026440a3126 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: 2022-10-13
+date: 2022-10-14
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 1713e0a26faa8..42f1850973a8a 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: 2022-10-13
+date: 2022-10-14
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 ff6a1d93cee14..ede74c3e33ab1 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema']
---
import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json';
diff --git a/api_docs/kbn_content_management_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx
index f28c1ca301628..b408f084be878 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: 2022-10-13
+date: 2022-10-14
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 932ae557c8c82..b68658aa33831 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: 2022-10-13
+date: 2022-10-14
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 0845bc6eb1dbc..ec73e5d071ff2 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: 2022-10-13
+date: 2022-10-14
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 280eb28952d1c..eda9625a5344e 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: 2022-10-13
+date: 2022-10-14
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 dda783350fca2..071292bce9026 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: 2022-10-13
+date: 2022-10-14
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 d60c3c52b3775..5a8e77d56a499 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: 2022-10-13
+date: 2022-10-14
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 ac55c2cde88e7..5141496a4b30f 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: 2022-10-13
+date: 2022-10-14
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 7c6e4368f3095..1237be00f25ce 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: 2022-10-13
+date: 2022-10-14
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 f18c33093816a..e231b5edd7cc8 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: 2022-10-13
+date: 2022-10-14
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 f1bf63e29b8c9..c897daef7c921 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: 2022-10-13
+date: 2022-10-14
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 f42ea015aee0b..b09c0628adaca 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: 2022-10-13
+date: 2022-10-14
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 b4608b508393a..aaf3d23b63cd9 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: 2022-10-13
+date: 2022-10-14
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 92bd848fa3899..2ac525d842e1c 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: 2022-10-13
+date: 2022-10-14
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_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx
index 0660c21f48732..212ab7afa2907 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: 2022-10-13
+date: 2022-10-14
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 65aafe170374e..430cf23529165 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: 2022-10-13
+date: 2022-10-14
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 81469e6c906aa..ba28547698c99 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: 2022-10-13
+date: 2022-10-14
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 7eedeaf9b0e97..582e110116765 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: 2022-10-13
+date: 2022-10-14
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 99414d1b3963d..307034fa3741a 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: 2022-10-13
+date: 2022-10-14
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 21aefe6dc31cb..1e1ed829a7891 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: 2022-10-13
+date: 2022-10-14
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 2b01f8b025569..f177dad9092f6 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: 2022-10-13
+date: 2022-10-14
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 1837d37440d5e..c07122276c046 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: 2022-10-13
+date: 2022-10-14
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 27376ddc167e0..372d4c67d5bb4 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: 2022-10-13
+date: 2022-10-14
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 9f3577505fe74..7ec82e6355cee 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: 2022-10-13
+date: 2022-10-14
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 387fed6489ed4..9ab241ae433ac 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: 2022-10-13
+date: 2022-10-14
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_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx
index e3ed025d9d87a..4eb03664d6c5b 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: 2022-10-13
+date: 2022-10-14
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 4dba90aff09b8..159aa0c1fc1a9 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: 2022-10-13
+date: 2022-10-14
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 dcf3b45235e27..ebaf334c48b94 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: 2022-10-13
+date: 2022-10-14
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 2910167c137a7..f9057f5617270 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: 2022-10-13
+date: 2022-10-14
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 4dbab16afe44c..bfcf35dc3f578 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: 2022-10-13
+date: 2022-10-14
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 23d22f0347e6f..fa2b0932de510 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: 2022-10-13
+date: 2022-10-14
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 305bc4011d3c5..55915243e1632 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: 2022-10-13
+date: 2022-10-14
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 f8522fa3b54f0..f7645609a4c44 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: 2022-10-13
+date: 2022-10-14
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 c5e253666a8e0..ae0ec6faa002d 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: 2022-10-13
+date: 2022-10-14
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 829547015add7..20d0bb33fa8c9 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: 2022-10-13
+date: 2022-10-14
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 93de60b0f64de..f32d204f036f7 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: 2022-10-13
+date: 2022-10-14
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 f40347c481362..13bd5b1e73932 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: 2022-10-13
+date: 2022-10-14
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 303c757685192..34a3abf15fd6e 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: 2022-10-13
+date: 2022-10-14
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 307aba572f572..51f73e69599eb 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: 2022-10-13
+date: 2022-10-14
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 f381780ff1621..0abdf0e9e12ed 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: 2022-10-13
+date: 2022-10-14
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 ec0275f4c068e..f0166494018c2 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: 2022-10-13
+date: 2022-10-14
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 ce0878b4721ab..4c12a773e7265 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: 2022-10-13
+date: 2022-10-14
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 6997ccab732e1..8177c47a3b86f 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: 2022-10-13
+date: 2022-10-14
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 d64b35a667e94..1b165cc132ac4 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: 2022-10-13
+date: 2022-10-14
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 15b397cdae940..69d2180d5740a 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: 2022-10-13
+date: 2022-10-14
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 916f093b1befa..53a67b3a1663a 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: 2022-10-13
+date: 2022-10-14
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 bf2d6d4324b9c..d78889dd618f8 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: 2022-10-13
+date: 2022-10-14
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 8acfac015abee..f6651cfd2048b 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: 2022-10-13
+date: 2022-10-14
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 b1b4ca0e49e2c..f3f4fe7b53773 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: 2022-10-13
+date: 2022-10-14
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 528059e177bfa..f7f115f1566c5 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: 2022-10-13
+date: 2022-10-14
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 f6f80612ce791..0ba4297747ace 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: 2022-10-13
+date: 2022-10-14
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 1d663390a388c..bbbd96bbe494b 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: 2022-10-13
+date: 2022-10-14
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 299c82e402225..c5f57a6c883ef 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: 2022-10-13
+date: 2022-10-14
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 c3ed353ec4826..e9b0aaddfb97d 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: 2022-10-13
+date: 2022-10-14
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 4d2a276cf7f3f..0dbce22cc47cb 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: 2022-10-13
+date: 2022-10-14
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 711953a27ec5a..2aeb4f6165558 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: 2022-10-13
+date: 2022-10-14
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 7c6d4b3835839..5123215a0efc0 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: 2022-10-13
+date: 2022-10-14
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 43204a6a9cd59..daf40fe512ebe 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: 2022-10-13
+date: 2022-10-14
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 1fb1fb2786666..3d9e99a97a464 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: 2022-10-13
+date: 2022-10-14
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 9faa5bc2b6137..4c03c0c1a4724 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: 2022-10-13
+date: 2022-10-14
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 ea177fc4d5002..775edabfb9835 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: 2022-10-13
+date: 2022-10-14
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 4c0525bce9ec5..14d93e4105fc7 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: 2022-10-13
+date: 2022-10-14
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 55a5d1f070aae..3841d7d285ff0 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: 2022-10-13
+date: 2022-10-14
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 620a1388e6792..714a76ef55feb 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: 2022-10-13
+date: 2022-10-14
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 ad1750c44201d..8c5cbd86552d8 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: 2022-10-13
+date: 2022-10-14
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 b3a4024ae81d9..946c471ad20a3 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks']
---
import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx
index 2e2244224cff6..f2fc8743dec08 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: 2022-10-13
+date: 2022-10-14
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 605c21ac98c3c..a714e9cc6f4ec 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: 2022-10-13
+date: 2022-10-14
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 885ae3946f5bd..b24ccb40a6e7e 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: 2022-10-13
+date: 2022-10-14
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 013d7c1bec5bf..bf364845ce652 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: 2022-10-13
+date: 2022-10-14
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 0e1a372fdefe0..afb3e93c55935 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: 2022-10-13
+date: 2022-10-14
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.mdx b/api_docs/kbn_core_injected_metadata_browser.mdx
index aa64438c1777b..22801f223555e 100644
--- a/api_docs/kbn_core_injected_metadata_browser.mdx
+++ b/api_docs/kbn_core_injected_metadata_browser.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser
title: "@kbn/core-injected-metadata-browser"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/core-injected-metadata-browser plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser']
---
import kbnCoreInjectedMetadataBrowserObj from './kbn_core_injected_metadata_browser.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 24007898d118c..c5cb736d207b8 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: 2022-10-13
+date: 2022-10-14
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 a0bee88b6c19c..93b45bd1db2f7 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: 2022-10-13
+date: 2022-10-14
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 bbd6d0002396b..9ae29f42cc95d 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: 2022-10-13
+date: 2022-10-14
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 85dfaec1eddc8..c1709d33ce0d7 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: 2022-10-13
+date: 2022-10-14
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 a49bb6261ca60..e28cba7d2425c 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: 2022-10-13
+date: 2022-10-14
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_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx
index 20173c54048b5..db8b4462a2abb 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: 2022-10-13
+date: 2022-10-14
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 b9d975fc0423b..87c1f449de2be 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: 2022-10-13
+date: 2022-10-14
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 fadc64dd7abaa..87f27b7f1a2d0 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: 2022-10-13
+date: 2022-10-14
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 f114fcb08c417..22ee987b7efbe 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: 2022-10-13
+date: 2022-10-14
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 395eb493b24c6..0aad11d9f2137 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks']
---
import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx
index 32af8a0882a53..ced6cbacf088f 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server']
---
import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json';
diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx
index 7daf0893bdae7..af35d94e359e8 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: 2022-10-13
+date: 2022-10-14
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 dfe7c445c0bd5..05c9718c7d43a 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: 2022-10-13
+date: 2022-10-14
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 14c4b8a5e1551..931eabbbe138a 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: 2022-10-13
+date: 2022-10-14
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 738442e3af703..b0474d94827d6 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: 2022-10-13
+date: 2022-10-14
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 073dfd67249bb..884ae287885d2 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: 2022-10-13
+date: 2022-10-14
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 4e7500ed54889..d20d963d710f6 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: 2022-10-13
+date: 2022-10-14
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 9336d4959948c..7a9006903b785 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: 2022-10-13
+date: 2022-10-14
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 95c2da9061225..0b23f381804d9 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: 2022-10-13
+date: 2022-10-14
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 04def10325f6e..ffcc433bf6af5 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: 2022-10-13
+date: 2022-10-14
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 ffebaf144c84a..9036867be221f 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: 2022-10-13
+date: 2022-10-14
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 6c23d5d025f75..712f8251d5c61 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: 2022-10-13
+date: 2022-10-14
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 865366e453cfc..70ce98466d4fe 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: 2022-10-13
+date: 2022-10-14
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 f3abb5bbfb8ad..b9c3a94cd202c 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: 2022-10-13
+date: 2022-10-14
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 6798150ce6006..69b37646668bc 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: 2022-10-13
+date: 2022-10-14
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_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx
index dc8687236c9bc..333a24c202e44 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: 2022-10-13
+date: 2022-10-14
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 47b3483514524..1bc472c28dd8b 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: 2022-10-13
+date: 2022-10-14
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 e11e48a77fb0f..e05036c1c725e 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: 2022-10-13
+date: 2022-10-14
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 5fae41f10a9e5..31008adb80bcf 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: 2022-10-13
+date: 2022-10-14
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 6ebdeb956fd4e..fea85ac884713 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: 2022-10-13
+date: 2022-10-14
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_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx
index 20aa7441881a6..7a8c95a97d676 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: 2022-10-13
+date: 2022-10-14
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 ad9055802199a..fa83aa76f9fb5 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: 2022-10-13
+date: 2022-10-14
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 e64e5b5541764..3c02a543f729d 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: 2022-10-13
+date: 2022-10-14
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 056df9040ed7d..68c6108d53597 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: 2022-10-13
+date: 2022-10-14
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 7e2b57df7c7e0..b14db41024525 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: 2022-10-13
+date: 2022-10-14
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 54d5fd1407508..67606ebbf5179 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks']
---
import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx
index a77d40386164e..fb5ed53a336a6 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: 2022-10-13
+date: 2022-10-14
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 65b694d6cac23..dcd94fad9e5d5 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: 2022-10-13
+date: 2022-10-14
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 228b2a5142725..d3f0ceaed3cce 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks']
---
import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx
index d0ebea2b1f95a..76dca2436e020 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: 2022-10-13
+date: 2022-10-14
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 0571269bebd9f..d4f9ecf0cd3a0 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: 2022-10-13
+date: 2022-10-14
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 bad24d39666a1..cb9441dd59b52 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: 2022-10-13
+date: 2022-10-14
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 b76039518582c..a13434c01d4a5 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: 2022-10-13
+date: 2022-10-14
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 d59c7e5124283..e52f41b3be8f7 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks']
---
import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json';
diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx
index 4bd70290bfb2f..31c988d7f9a4e 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: 2022-10-13
+date: 2022-10-14
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 b5f3421a03f60..01dbefbe3a456 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: 2022-10-13
+date: 2022-10-14
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 f8225a2d1b36f..7610eb55d8c14 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: 2022-10-13
+date: 2022-10-14
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 9b6a366a54049..ddb72189808d4 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: 2022-10-13
+date: 2022-10-14
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 5bdae98802672..6a8f1775f9938 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: 2022-10-13
+date: 2022-10-14
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 23c6303f781f1..d53c91895c42a 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: 2022-10-13
+date: 2022-10-14
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 af239cf48b3ae..decce4c4ad401 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: 2022-10-13
+date: 2022-10-14
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 e634e94f5669b..32298ea4b7bd8 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: 2022-10-13
+date: 2022-10-14
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 56fb65934aeaa..09e9a962fb073 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: 2022-10-13
+date: 2022-10-14
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 73c8ed98bb41b..01caa1df40885 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: 2022-10-13
+date: 2022-10-14
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 0fe20d9a77ca8..831d549444af9 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: 2022-10-13
+date: 2022-10-14
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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx
index dbb8bee66ea0b..3812354e12b63 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: 2022-10-13
+date: 2022-10-14
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_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx
index 17905a7849ba5..3f6a67a95736e 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: 2022-10-13
+date: 2022-10-14
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 ab66657998592..dffcc6b101cfa 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: 2022-10-13
+date: 2022-10-14
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 1f2bb0c19706c..dfb5b9f8354ec 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: 2022-10-13
+date: 2022-10-14
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 27cd800984c75..38f797b362de5 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: 2022-10-13
+date: 2022-10-14
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 b29904c0c8674..60c14feeb7f07 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: 2022-10-13
+date: 2022-10-14
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 6f1b46931ad27..03176e8c91ba1 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: 2022-10-13
+date: 2022-10-14
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 112a31dcee24e..d34af650d8dd9 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: 2022-10-13
+date: 2022-10-14
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 f158c9e813034..402fcdccd5caf 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: 2022-10-13
+date: 2022-10-14
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 c38ae7d4118a3..c5b88a3421e8b 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: 2022-10-13
+date: 2022-10-14
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 a6465f693e820..f211bb66b2f4f 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: 2022-10-13
+date: 2022-10-14
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 c89744f9f5778..7252e46db7ebc 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: 2022-10-13
+date: 2022-10-14
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 f9f13dce813b2..52add676219f3 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: 2022-10-13
+date: 2022-10-14
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 b0701abb5118d..24b67e6c76f81 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: 2022-10-13
+date: 2022-10-14
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 0f71192d008a6..fbd6a4d3cdad7 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: 2022-10-13
+date: 2022-10-14
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 1d91ad2e67db3..46233e26fbab7 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser']
---
import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json';
diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx
index d1fa9d3786b45..58b37afc7897a 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: 2022-10-13
+date: 2022-10-14
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 e9db73c80e329..235c80480f1d4 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: 2022-10-13
+date: 2022-10-14
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 26b1c70d9bced..0338ad7ba8da2 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: 2022-10-13
+date: 2022-10-14
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 79686f7850b40..a86c1995e87be 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: 2022-10-13
+date: 2022-10-14
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 b05bec4988f0d..e3363f9927c87 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: 2022-10-13
+date: 2022-10-14
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 57eeb56777e11..8b783d63b1e70 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: 2022-10-13
+date: 2022-10-14
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 d62ab83ebcff7..20d1b9e0144ce 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils']
---
import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json';
diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx
index 59d99761b93f3..86b7e9647bc46 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools']
---
import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json';
diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx
index 1dc26531545a1..d7d13318bb297 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: 2022-10-13
+date: 2022-10-14
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 3b9c570b113b1..85e98cbdeb15c 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: 2022-10-13
+date: 2022-10-14
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 7b1c1717ee7d5..8cb400d9399d2 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: 2022-10-13
+date: 2022-10-14
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 3fa373a22ad1a..0e9025ba267fe 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: 2022-10-13
+date: 2022-10-14
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 0c359f4f7e8e5..bf4fa667858a6 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports']
---
import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json';
diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx
index 41119a9d00319..b0c70bec6cc0c 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: 2022-10-13
+date: 2022-10-14
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 fa6ddcdd6d95c..0bbbda976916e 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: 2022-10-13
+date: 2022-10-14
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 340a7c896ee06..e8619d48201fa 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: 2022-10-13
+date: 2022-10-14
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 6a0a3f8e6726d..c52b256a5819b 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate']
---
import kbnGenerateObj from './kbn_generate.devdocs.json';
diff --git a/api_docs/kbn_get_repo_files.mdx b/api_docs/kbn_get_repo_files.mdx
index 4e168ef4af173..fe2e42a922202 100644
--- a/api_docs/kbn_get_repo_files.mdx
+++ b/api_docs/kbn_get_repo_files.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-get-repo-files
title: "@kbn/get-repo-files"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/get-repo-files plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/get-repo-files']
---
import kbnGetRepoFilesObj from './kbn_get_repo_files.devdocs.json';
diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx
index 2c7e2090a91b1..b845293fa719a 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: 2022-10-13
+date: 2022-10-14
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 71e9a366cbbbb..2280cea95ea08 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks']
---
import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json';
diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx
index d8bbdacea2d21..7ec6d9da1d167 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: 2022-10-13
+date: 2022-10-14
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 30eef0c1196cb..72ac2e99478bd 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: 2022-10-13
+date: 2022-10-14
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 7cfcdca31f79e..1998d0d5520c7 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n']
---
import kbnI18nObj from './kbn_i18n.devdocs.json';
diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx
index cd5e46f0c4235..1e1265090924e 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: 2022-10-13
+date: 2022-10-14
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 09b9919f46e5f..c3621ff358455 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: 2022-10-13
+date: 2022-10-14
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 b77b43358fb51..75e43e83fe804 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: 2022-10-13
+date: 2022-10-14
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 d080e4dc7fc69..2c58a2a334895 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: 2022-10-13
+date: 2022-10-14
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 921263ac94423..90b5f681cacb7 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys']
---
import kbnJourneysObj from './kbn_journeys.devdocs.json';
diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx
index 936419c6b285d..32e15e0991aaf 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema']
---
import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json';
diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx
index f1d9eaca02302..9c95fef63a351 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: 2022-10-13
+date: 2022-10-14
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 5028fe685abf5..cba8c0fc1853f 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: 2022-10-13
+date: 2022-10-14
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 ad72a93059af3..28c61e54ec2d9 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: 2022-10-13
+date: 2022-10-14
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.mdx b/api_docs/kbn_mapbox_gl.mdx
index 796c0a11d338e..46629467a890e 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: 2022-10-13
+date: 2022-10-14
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 909d35424ccd7..83afc2c06b970 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: 2022-10-13
+date: 2022-10-14
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_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx
index babfb00112ec5..d81c1f5608dc0 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: 2022-10-13
+date: 2022-10-14
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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx
index 07438956c25f5..590a62891fa6f 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash']
---
import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json';
diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx
index 5fd2150c55e3d..fe0437ddecca7 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco']
---
import kbnMonacoObj from './kbn_monaco.devdocs.json';
diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx
index af5e2740c0191..aa3ac9977962f 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: 2022-10-13
+date: 2022-10-14
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 36d6d11d964c6..5358c1464d3b0 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: 2022-10-13
+date: 2022-10-14
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 0cc36ab118d0f..ce5c1d380fea3 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: 2022-10-13
+date: 2022-10-14
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 e0eafa025e1bf..139dc072af92f 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: 2022-10-13
+date: 2022-10-14
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 5e8e571e096f7..92791b020dfaf 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: 2022-10-13
+date: 2022-10-14
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 3454c24690a27..c61e40ce4d5c1 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: 2022-10-13
+date: 2022-10-14
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 83ce9bc555f44..88461caa1d77a 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field']
---
import kbnReactFieldObj from './kbn_react_field.devdocs.json';
diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx
index 8edaf1daf0abb..9f0541f5a55fd 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier']
---
import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json';
diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx
index 7b33a739414ef..a874a65d25126 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils']
---
import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx
index c74bb8b86f6b1..9c925b1338223 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete']
---
import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx
index bb07f02b58305..39bc3999fafc6 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: 2022-10-13
+date: 2022-10-14
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 0be6ec752a657..9807bfb87229a 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components']
---
import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json';
diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx
index 7f63210b061fe..a9042d2232d08 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: 2022-10-13
+date: 2022-10-14
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 acf6f43badaee..5a9cd38f09b49 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: 2022-10-13
+date: 2022-10-14
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 3962948d0e0ae..2cd4406035039 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: 2022-10-13
+date: 2022-10-14
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 04ee34ca4c3e7..72cacb9ce2b3c 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: 2022-10-13
+date: 2022-10-14
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 4fc89c7ec606c..8576083e813f0 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: 2022-10-13
+date: 2022-10-14
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 e47c6f19d24af..4ac93e2d25960 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: 2022-10-13
+date: 2022-10-14
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 b41f1d06177e0..f14d26d2edf22 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: 2022-10-13
+date: 2022-10-14
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 909fe3ea66e3d..bd5855d0cd746 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: 2022-10-13
+date: 2022-10-14
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 d231fffd94181..78b6e7b88d4c7 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: 2022-10-13
+date: 2022-10-14
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 93a012258b767..0eba790a12640 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: 2022-10-13
+date: 2022-10-14
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 094976c30d2d9..503b13efc68d1 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: 2022-10-13
+date: 2022-10-14
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 dbb6c96a59e58..31c15c4a52037 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: 2022-10-13
+date: 2022-10-14
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 14e588f8b50f5..76930deff7aec 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: 2022-10-13
+date: 2022-10-14
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 7fbebab171a67..e81b04b3ae9eb 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: 2022-10-13
+date: 2022-10-14
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 dda901559468e..5d388d1b3c74e 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: 2022-10-13
+date: 2022-10-14
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_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx
index 61160386978e9..aa45daa55d3cf 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: 2022-10-13
+date: 2022-10-14
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_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx
index 9f89aa73432d5..0e4323167397b 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: 2022-10-13
+date: 2022-10-14
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 77f2fc244841c..2a75e4ca26742 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar']
---
import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json';
diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx
index 62bb89a7a9b24..6cb107b6b7685 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: 2022-10-13
+date: 2022-10-14
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 88d539bbba324..0718bbf83840c 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: 2022-10-13
+date: 2022-10-14
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_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx
index be2afdf972f3b..d9d770d2cfe89 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: 2022-10-13
+date: 2022-10-14
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_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx
index 780780183872b..b760c93c1987a 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: 2022-10-13
+date: 2022-10-14
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 ce9b8887ff99d..13c52febec86c 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: 2022-10-13
+date: 2022-10-14
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 cfd332cb2372d..ec6631008e9fb 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: 2022-10-13
+date: 2022-10-14
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 8a599cba5bc63..7e20d5a92be16 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: 2022-10-13
+date: 2022-10-14
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 e7bcd04174597..4a55d033fb255 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: 2022-10-13
+date: 2022-10-14
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 1caabc1075553..cace3c480477c 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: 2022-10-13
+date: 2022-10-14
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 489a3c7b274c2..6b7dc5b1d516d 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: 2022-10-13
+date: 2022-10-14
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 9312225be586e..332c17f903579 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: 2022-10-13
+date: 2022-10-14
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 608c69bd1e2f9..60dd7a32b04a8 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: 2022-10-13
+date: 2022-10-14
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 5d9359b6a226b..c43d04bd26a11 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: 2022-10-13
+date: 2022-10-14
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 e765b7acfc139..ecbf3828a144c 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: 2022-10-13
+date: 2022-10-14
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 9291b410c219b..214205caf4b4e 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: 2022-10-13
+date: 2022-10-14
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 0f9a76875a8b0..8e7a998461cee 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: 2022-10-13
+date: 2022-10-14
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_router.mdx b/api_docs/kbn_shared_ux_router.mdx
index b1c4bcca84749..045727e8f9622 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: 2022-10-13
+date: 2022-10-14
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 c2f8e1f83d46b..3e3407f1bbf06 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: 2022-10-13
+date: 2022-10-14
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 509eaaf0fec48..286d22c37bfd9 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: 2022-10-13
+date: 2022-10-14
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 826c8d4022f01..3a8e6c7e31c3b 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: 2022-10-13
+date: 2022-10-14
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 69619984c403f..7c57fe2abda11 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility']
---
import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json';
diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx
index 31a5f5fb60edc..3bc5fbf1173c1 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log']
---
import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json';
diff --git a/api_docs/kbn_sort_package_json.mdx b/api_docs/kbn_sort_package_json.mdx
index 62dab760e4a5b..bc2fbf01f59d1 100644
--- a/api_docs/kbn_sort_package_json.mdx
+++ b/api_docs/kbn_sort_package_json.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-package-json
title: "@kbn/sort-package-json"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/sort-package-json plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-package-json']
---
import kbnSortPackageJsonObj from './kbn_sort_package_json.devdocs.json';
diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx
index 01b6a220bf865..97e2338d71629 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: 2022-10-13
+date: 2022-10-14
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 b87735f14e680..8666564c891e0 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: 2022-10-13
+date: 2022-10-14
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 959d827c97d4b..e6ce5d7e8246f 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: 2022-10-13
+date: 2022-10-14
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 11b8436e5b02f..61c00ac271eca 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: 2022-10-13
+date: 2022-10-14
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 90a8a2253ff33..5c52d6c402e32 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: 2022-10-13
+date: 2022-10-14
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 c300b5f2b166e..bf22a5ec555d8 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: 2022-10-13
+date: 2022-10-14
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 3ac807b4a2f2a..86f65530886b3 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: 2022-10-13
+date: 2022-10-14
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 c61e10e481d27..f1b1798fab1b8 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log']
---
import kbnToolingLogObj from './kbn_tooling_log.devdocs.json';
diff --git a/api_docs/kbn_type_summarizer.mdx b/api_docs/kbn_type_summarizer.mdx
index db7d2d2208749..db8d1a8022b31 100644
--- a/api_docs/kbn_type_summarizer.mdx
+++ b/api_docs/kbn_type_summarizer.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer
title: "@kbn/type-summarizer"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/type-summarizer plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer']
---
import kbnTypeSummarizerObj from './kbn_type_summarizer.devdocs.json';
diff --git a/api_docs/kbn_type_summarizer_core.mdx b/api_docs/kbn_type_summarizer_core.mdx
index 0fabbc396e628..ad788a66355bb 100644
--- a/api_docs/kbn_type_summarizer_core.mdx
+++ b/api_docs/kbn_type_summarizer_core.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer-core
title: "@kbn/type-summarizer-core"
image: https://source.unsplash.com/400x175/?github
description: API docs for the @kbn/type-summarizer-core plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer-core']
---
import kbnTypeSummarizerCoreObj from './kbn_type_summarizer_core.devdocs.json';
diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx
index afd067b54c86f..99f07cca5249f 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: 2022-10-13
+date: 2022-10-14
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_theme.mdx b/api_docs/kbn_ui_theme.mdx
index b1fba7a953f3c..d361266f4b112 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: 2022-10-13
+date: 2022-10-14
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 edcf2a9ecf49f..2d3efbab3fe7a 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: 2022-10-13
+date: 2022-10-14
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 706b250ca9c30..d91016709162d 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: 2022-10-13
+date: 2022-10-14
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 9e2f55d44256b..6cd910e0cbd30 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: 2022-10-13
+date: 2022-10-14
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 24a679d142a6f..d282fab4950b8 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: 2022-10-13
+date: 2022-10-14
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 9395a8b06dc2f..c20fcee717e8b 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: 2022-10-13
+date: 2022-10-14
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 6218edc4db488..6dbe8ec638069 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview']
---
import kibanaOverviewObj from './kibana_overview.devdocs.json';
diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx
index 20ca815e9fe48..fe99963d954ae 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: 2022-10-13
+date: 2022-10-14
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 1ae0f55ee8b47..5f72dee209292 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: 2022-10-13
+date: 2022-10-14
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 b614a9cef39d5..4ea45e2d6386d 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity']
---
import kubernetesSecurityObj from './kubernetes_security.devdocs.json';
diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx
index 29bd92f4db760..d19ce3adcaead 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: 2022-10-13
+date: 2022-10-14
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 fc163ff44614d..383b3680cbafb 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: 2022-10-13
+date: 2022-10-14
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 0889602483dfd..a62e0b65cbab9 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: 2022-10-13
+date: 2022-10-14
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 35dbfba586fb5..9703f660b6515 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: 2022-10-13
+date: 2022-10-14
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 d1a0beb34b1bf..30d4ce56cb586 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: 2022-10-13
+date: 2022-10-14
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 b2935e8899670..4dd4ec5e1eab8 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: 2022-10-13
+date: 2022-10-14
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 d40b99e5b5795..752becaa2ceb6 100644
--- a/api_docs/maps.devdocs.json
+++ b/api_docs/maps.devdocs.json
@@ -4470,7 +4470,7 @@
"StyleDescriptor",
" | null | undefined; query?: ",
"Query",
- " | undefined; includeInFitToBounds?: boolean | undefined; }"
+ " | undefined; includeInFitToBounds?: boolean | undefined; parent?: string | undefined; }"
],
"path": "x-pack/plugins/maps/common/descriptor_types/layer_descriptor_types.ts",
"deprecated": false,
diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx
index da7f8d0f22b80..70ac834551a4e 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps']
---
import mapsObj from './maps.devdocs.json';
diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx
index d4352b0b1b887..9a6033e47298d 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms']
---
import mapsEmsObj from './maps_ems.devdocs.json';
diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx
index 74a1ec483cc1f..70d2472f68011 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: 2022-10-13
+date: 2022-10-14
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 280dde24913c9..ffb8396bac5cf 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: 2022-10-13
+date: 2022-10-14
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 71fe97576094d..19006dba40a9f 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: 2022-10-13
+date: 2022-10-14
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 b304315815ff7..b2e3637164e81 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: 2022-10-13
+date: 2022-10-14
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 71fe49172d536..fd6c0f9d3f4e8 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed']
---
import newsfeedObj from './newsfeed.devdocs.json';
diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx
index 2617e4c3ed390..f541a56f52200 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability']
---
import observabilityObj from './observability.devdocs.json';
diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx
index cbaaf7fb4735f..d9d8bb530bef2 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: 2022-10-13
+date: 2022-10-14
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 281fb6de01efa..dfcb932773724 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana']
---
@@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| API Count | Any Count | Missing comments | Missing exports |
|--------------|----------|-----------------|--------|
-| 32302 | 179 | 21767 | 1023 |
+| 32303 | 179 | 21767 | 1023 |
## Plugin Directory
@@ -155,7 +155,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana']
| | [Security solution](https://github.com/orgs/elastic/teams/security-solution) | - | 452 | 1 | 346 | 33 |
| | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 |
| translations | [Kibana Localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 |
-| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 517 | 1 | 489 | 49 |
+| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 518 | 1 | 489 | 49 |
| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds UI Actions service to Kibana | 133 | 0 | 92 | 11 |
| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Extends UI Actions plugin with more functionality | 206 | 0 | 142 | 9 |
| | [Data Discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list which can be integrated into apps | 122 | 0 | 117 | 2 |
diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx
index 7c78b017a7cbc..2d2bd5f7cab65 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil']
---
import presentationUtilObj from './presentation_util.devdocs.json';
diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx
index 03fd68b4dace8..a2ab179291b93 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: 2022-10-13
+date: 2022-10-14
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 09f7279acc3b0..64db429de0000 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: 2022-10-13
+date: 2022-10-14
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 84e0a16d1857b..3addd6c04342c 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: 2022-10-13
+date: 2022-10-14
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 d4be3ea7797a2..2d950f366d145 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup']
---
import rollupObj from './rollup.devdocs.json';
diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx
index 1a5cdf684f518..b8177a5349db5 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry']
---
import ruleRegistryObj from './rule_registry.devdocs.json';
diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx
index 6a63f3a173cc8..b950aff4a9dc1 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: 2022-10-13
+date: 2022-10-14
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 73a219490d72b..e42617d41f680 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: 2022-10-13
+date: 2022-10-14
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 4cda9e6326e05..272497ed10c72 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder']
---
import savedObjectsFinderObj from './saved_objects_finder.devdocs.json';
diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx
index 3b088d075d9fe..2669f7ef767e9 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: 2022-10-13
+date: 2022-10-14
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 917393033e0e7..e92816f0b4452 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging']
---
import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json';
diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx
index 1c2c4cafda3cd..da0c09083fca1 100644
--- a/api_docs/saved_objects_tagging_oss.mdx
+++ b/api_docs/saved_objects_tagging_oss.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss
title: "savedObjectsTaggingOss"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedObjectsTaggingOss plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss']
---
import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json';
diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx
index 6bbebd91df07c..6f7d29c36ed28 100644
--- a/api_docs/saved_search.mdx
+++ b/api_docs/saved_search.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch
title: "savedSearch"
image: https://source.unsplash.com/400x175/?github
description: API docs for the savedSearch plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch']
---
import savedSearchObj from './saved_search.devdocs.json';
diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx
index 968e4bdfb7d2f..85551152dec24 100644
--- a/api_docs/screenshot_mode.mdx
+++ b/api_docs/screenshot_mode.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode
title: "screenshotMode"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotMode plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode']
---
import screenshotModeObj from './screenshot_mode.devdocs.json';
diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx
index cb762b0c57883..c8d8da4c7e433 100644
--- a/api_docs/screenshotting.mdx
+++ b/api_docs/screenshotting.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting
title: "screenshotting"
image: https://source.unsplash.com/400x175/?github
description: API docs for the screenshotting plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting']
---
import screenshottingObj from './screenshotting.devdocs.json';
diff --git a/api_docs/security.mdx b/api_docs/security.mdx
index 6dbc5b530e8e1..d2c74e5c35cb5 100644
--- a/api_docs/security.mdx
+++ b/api_docs/security.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security
title: "security"
image: https://source.unsplash.com/400x175/?github
description: API docs for the security plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security']
---
import securityObj from './security.devdocs.json';
diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx
index f535c6aca25b3..054308e191638 100644
--- a/api_docs/security_solution.mdx
+++ b/api_docs/security_solution.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution
title: "securitySolution"
image: https://source.unsplash.com/400x175/?github
description: API docs for the securitySolution plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution']
---
import securitySolutionObj from './security_solution.devdocs.json';
diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx
index 0d114ac2efa70..69b68c2eba9a8 100644
--- a/api_docs/session_view.mdx
+++ b/api_docs/session_view.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView
title: "sessionView"
image: https://source.unsplash.com/400x175/?github
description: API docs for the sessionView plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView']
---
import sessionViewObj from './session_view.devdocs.json';
diff --git a/api_docs/share.mdx b/api_docs/share.mdx
index 246bd975b6244..3b436f7e11ab5 100644
--- a/api_docs/share.mdx
+++ b/api_docs/share.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share
title: "share"
image: https://source.unsplash.com/400x175/?github
description: API docs for the share plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share']
---
import shareObj from './share.devdocs.json';
diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx
index 778e9f2631c91..0e71d2a44587c 100644
--- a/api_docs/snapshot_restore.mdx
+++ b/api_docs/snapshot_restore.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore
title: "snapshotRestore"
image: https://source.unsplash.com/400x175/?github
description: API docs for the snapshotRestore plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore']
---
import snapshotRestoreObj from './snapshot_restore.devdocs.json';
diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx
index a08d22082148e..a1e9bb5e5f4c0 100644
--- a/api_docs/spaces.mdx
+++ b/api_docs/spaces.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces
title: "spaces"
image: https://source.unsplash.com/400x175/?github
description: API docs for the spaces plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces']
---
import spacesObj from './spaces.devdocs.json';
diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx
index 818254d238eb3..8da0b5dfe30ab 100644
--- a/api_docs/stack_alerts.mdx
+++ b/api_docs/stack_alerts.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts
title: "stackAlerts"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackAlerts plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts']
---
import stackAlertsObj from './stack_alerts.devdocs.json';
diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx
index 48c732f3e1cdf..9c0b90d429892 100644
--- a/api_docs/stack_connectors.mdx
+++ b/api_docs/stack_connectors.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors
title: "stackConnectors"
image: https://source.unsplash.com/400x175/?github
description: API docs for the stackConnectors plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors']
---
import stackConnectorsObj from './stack_connectors.devdocs.json';
diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx
index b920c33a9fb49..37c810bccb7fb 100644
--- a/api_docs/task_manager.mdx
+++ b/api_docs/task_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager
title: "taskManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the taskManager plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager']
---
import taskManagerObj from './task_manager.devdocs.json';
diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx
index 50d9e28747563..6a9da2e3d8f30 100644
--- a/api_docs/telemetry.mdx
+++ b/api_docs/telemetry.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry
title: "telemetry"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetry plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry']
---
import telemetryObj from './telemetry.devdocs.json';
diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx
index 49c39896be569..90931f6a3d4e5 100644
--- a/api_docs/telemetry_collection_manager.mdx
+++ b/api_docs/telemetry_collection_manager.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager
title: "telemetryCollectionManager"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionManager plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager']
---
import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json';
diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx
index 6742dca554e95..fa8c62da9a483 100644
--- a/api_docs/telemetry_collection_xpack.mdx
+++ b/api_docs/telemetry_collection_xpack.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack
title: "telemetryCollectionXpack"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryCollectionXpack plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack']
---
import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json';
diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx
index 71170397dd8e1..5ee8669701c62 100644
--- a/api_docs/telemetry_management_section.mdx
+++ b/api_docs/telemetry_management_section.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection
title: "telemetryManagementSection"
image: https://source.unsplash.com/400x175/?github
description: API docs for the telemetryManagementSection plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection']
---
import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json';
diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx
index fae7d35b28b7d..6dbf8f218887f 100644
--- a/api_docs/threat_intelligence.mdx
+++ b/api_docs/threat_intelligence.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence
title: "threatIntelligence"
image: https://source.unsplash.com/400x175/?github
description: API docs for the threatIntelligence plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence']
---
import threatIntelligenceObj from './threat_intelligence.devdocs.json';
diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx
index 197ea0b93a34a..dc77ccda78c8e 100644
--- a/api_docs/timelines.mdx
+++ b/api_docs/timelines.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines
title: "timelines"
image: https://source.unsplash.com/400x175/?github
description: API docs for the timelines plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines']
---
import timelinesObj from './timelines.devdocs.json';
diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx
index 27e02053609af..ff96d1a3e72ed 100644
--- a/api_docs/transform.mdx
+++ b/api_docs/transform.mdx
@@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform
title: "transform"
image: https://source.unsplash.com/400x175/?github
description: API docs for the transform plugin
-date: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform']
---
import transformObj from './transform.devdocs.json';
diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json
index e9e5908c5ee26..1b74e68bed0b8 100644
--- a/api_docs/triggers_actions_ui.devdocs.json
+++ b/api_docs/triggers_actions_ui.devdocs.json
@@ -8164,7 +8164,7 @@
"label": "CoreQueryParams",
"description": [],
"signature": [
- "{ readonly aggField?: string | undefined; readonly termSize?: number | undefined; readonly termField?: string | undefined; readonly index: string | string[]; readonly timeField: string; readonly aggType: string; readonly timeWindowSize: number; readonly timeWindowUnit: string; readonly groupBy: string; }"
+ "{ readonly aggField?: string | undefined; readonly termSize?: number | undefined; readonly termField?: string | undefined; readonly filterKuery?: string | undefined; readonly index: string | string[]; readonly timeField: string; readonly aggType: string; readonly timeWindowSize: number; readonly timeWindowUnit: string; readonly groupBy: string; }"
],
"path": "x-pack/plugins/triggers_actions_ui/server/data/lib/core_query_types.ts",
"deprecated": false,
@@ -8236,7 +8236,7 @@
"label": "TimeSeriesQuery",
"description": [],
"signature": [
- "{ readonly interval?: string | undefined; readonly aggField?: string | undefined; readonly termSize?: number | undefined; readonly termField?: string | undefined; readonly dateStart?: string | undefined; readonly dateEnd?: string | undefined; readonly index: string | string[]; readonly timeField: string; readonly aggType: string; readonly timeWindowSize: number; readonly timeWindowUnit: string; readonly groupBy: string; }"
+ "{ readonly interval?: string | undefined; readonly aggField?: string | undefined; readonly termSize?: number | undefined; readonly termField?: string | undefined; readonly dateStart?: string | undefined; readonly dateEnd?: string | undefined; readonly filterKuery?: string | undefined; readonly index: string | string[]; readonly timeField: string; readonly aggType: string; readonly timeWindowSize: number; readonly timeWindowUnit: string; readonly groupBy: string; }"
],
"path": "x-pack/plugins/triggers_actions_ui/server/data/lib/time_series_types.ts",
"deprecated": false,
@@ -8358,6 +8358,23 @@
"deprecated": false,
"trackAdoption": false
},
+ {
+ "parentPluginId": "triggersActionsUi",
+ "id": "def-server.CoreQueryParamsSchemaProperties.filterKuery",
+ "type": "Object",
+ "tags": [],
+ "label": "filterKuery",
+ "description": [
+ "// filter field"
+ ],
+ "signature": [
+ "Type",
+ ""
+ ],
+ "path": "x-pack/plugins/triggers_actions_ui/server/data/lib/core_query_types.ts",
+ "deprecated": false,
+ "trackAdoption": false
+ },
{
"parentPluginId": "triggersActionsUi",
"id": "def-server.CoreQueryParamsSchemaProperties.termSize",
diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx
index 16885f04df0fd..2148e1939ea24 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi']
---
import triggersActionsUiObj from './triggers_actions_ui.devdocs.json';
@@ -21,7 +21,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q
| Public API count | Any count | Items lacking comments | Missing exports |
|-------------------|-----------|------------------------|-----------------|
-| 517 | 1 | 489 | 49 |
+| 518 | 1 | 489 | 49 |
## Client
diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx
index 0e6e8ffe105cf..4ec201d732105 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: 2022-10-13
+date: 2022-10-14
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 863b74f7a45b2..5563c08371882 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: 2022-10-13
+date: 2022-10-14
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 24f2e54fef747..27c55ce6e644b 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList']
---
import unifiedFieldListObj from './unified_field_list.devdocs.json';
diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx
index a49ee1e7fafee..2c426b911f3d7 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: 2022-10-13
+date: 2022-10-14
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 3f8c6f31330dd..f0067d2093f5c 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: 2022-10-13
+date: 2022-10-14
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 36639a61773b1..f6b97fd615cad 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: 2022-10-13
+date: 2022-10-14
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 e3fe9d4770da4..55882ead7e50e 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: 2022-10-13
+date: 2022-10-14
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 b01561a87beb1..27b6bb43e27c8 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: 2022-10-13
+date: 2022-10-14
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 149ff1941dd59..2b38a0015b600 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: 2022-10-13
+date: 2022-10-14
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 0d8940eee6aff..55c0ddf204fc2 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: 2022-10-13
+date: 2022-10-14
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 50a3d43aaf024..7184c050b5be0 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: 2022-10-13
+date: 2022-10-14
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 f983d47428d5d..269a7121e31a4 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: 2022-10-13
+date: 2022-10-14
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 df710abda7b34..e236f9b93e075 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: 2022-10-13
+date: 2022-10-14
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 194ef7640a2ad..f4efbf7f4bfd5 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: 2022-10-13
+date: 2022-10-14
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 3c94789158f65..ccbb3a90eb417 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: 2022-10-13
+date: 2022-10-14
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 d8780d991a35d..1cd99fa5393d5 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: 2022-10-13
+date: 2022-10-14
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 4d7e6813b86da..59bf0ca2e9847 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: 2022-10-13
+date: 2022-10-14
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 572e99ae1f73a..13d2599680d2d 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: 2022-10-13
+date: 2022-10-14
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 5f2ca49cbd46d..8862a4dc51714 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: 2022-10-13
+date: 2022-10-14
tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations']
---
import visualizationsObj from './visualizations.devdocs.json';
diff --git a/examples/response_stream/common/api/reducer_stream/request_body_schema.ts b/examples/response_stream/common/api/reducer_stream/request_body_schema.ts
index 58ea487a8a539..8318a411ab86a 100644
--- a/examples/response_stream/common/api/reducer_stream/request_body_schema.ts
+++ b/examples/response_stream/common/api/reducer_stream/request_body_schema.ts
@@ -13,5 +13,7 @@ export const reducerStreamRequestBodySchema = schema.object({
simulateErrors: schema.maybe(schema.boolean()),
/** Maximum timeout between streaming messages. */
timeout: schema.maybe(schema.number()),
+ /** Setting to override headers derived compression */
+ compressResponse: schema.maybe(schema.boolean()),
});
export type ReducerStreamRequestBodySchema = TypeOf;
diff --git a/examples/response_stream/common/api/simple_string_stream/request_body_schema.ts b/examples/response_stream/common/api/simple_string_stream/request_body_schema.ts
index 8e891395e5dc8..3a9d0f4d7e225 100644
--- a/examples/response_stream/common/api/simple_string_stream/request_body_schema.ts
+++ b/examples/response_stream/common/api/simple_string_stream/request_body_schema.ts
@@ -11,6 +11,8 @@ import { schema, TypeOf } from '@kbn/config-schema';
export const simpleStringStreamRequestBodySchema = schema.object({
/** Maximum timeout between streaming messages. */
timeout: schema.number(),
+ /** Setting to override headers derived compression */
+ compressResponse: schema.maybe(schema.boolean()),
});
export type SimpleStringStreamRequestBodySchema = TypeOf<
typeof simpleStringStreamRequestBodySchema
diff --git a/examples/response_stream/public/containers/app/pages/page_reducer_stream/index.tsx b/examples/response_stream/public/containers/app/pages/page_reducer_stream/index.tsx
index 0755765374330..913f8b4064440 100644
--- a/examples/response_stream/public/containers/app/pages/page_reducer_stream/index.tsx
+++ b/examples/response_stream/public/containers/app/pages/page_reducer_stream/index.tsx
@@ -44,13 +44,14 @@ export const PageReducerStream: FC = () => {
const basePath = http?.basePath.get() ?? '';
const [simulateErrors, setSimulateErrors] = useState(false);
+ const [compressResponse, setCompressResponse] = useState(true);
const { dispatch, start, cancel, data, errors, isCancelled, isRunning } = useFetchStream<
ApiReducerStream,
typeof basePath
>(
`${basePath}/internal/response_stream/reducer_stream`,
- { simulateErrors },
+ { compressResponse, simulateErrors },
{ reducer: reducerStreamReducer, initialState }
);
@@ -144,6 +145,13 @@ export const PageReducerStream: FC = () => {
onChange={(e) => setSimulateErrors(!simulateErrors)}
compressed
/>
+ setCompressResponse(!compressResponse)}
+ compressed
+ />
);
diff --git a/examples/response_stream/public/containers/app/pages/page_simple_string_stream/index.tsx b/examples/response_stream/public/containers/app/pages/page_simple_string_stream/index.tsx
index cfa76688d9701..a305e907cfb45 100644
--- a/examples/response_stream/public/containers/app/pages/page_simple_string_stream/index.tsx
+++ b/examples/response_stream/public/containers/app/pages/page_simple_string_stream/index.tsx
@@ -6,9 +6,17 @@
* Side Public License, v 1.
*/
-import React, { FC } from 'react';
+import React, { useState, FC } from 'react';
-import { EuiButton, EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText } from '@elastic/eui';
+import {
+ EuiButton,
+ EuiCallOut,
+ EuiCheckbox,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiSpacer,
+ EuiText,
+} from '@elastic/eui';
import { useFetchStream } from '@kbn/aiops-utils';
@@ -21,10 +29,15 @@ export const PageSimpleStringStream: FC = () => {
const { core } = useDeps();
const basePath = core.http?.basePath.get() ?? '';
+ const [compressResponse, setCompressResponse] = useState(true);
+
const { dispatch, errors, start, cancel, data, isRunning } = useFetchStream<
ApiSimpleStringStream,
typeof basePath
- >(`${basePath}/internal/response_stream/simple_string_stream`, { timeout: 500 });
+ >(`${basePath}/internal/response_stream/simple_string_stream`, {
+ compressResponse,
+ timeout: 500,
+ });
const onClickHandler = async () => {
if (isRunning) {
@@ -58,6 +71,14 @@ export const PageSimpleStringStream: FC = () => {
+ setCompressResponse(!compressResponse)}
+ compressed
+ />
+
{data}
diff --git a/examples/response_stream/server/routes/reducer_stream.ts b/examples/response_stream/server/routes/reducer_stream.ts
index 7cc02d9b1a80f..e9fe6d02b68f6 100644
--- a/examples/response_stream/server/routes/reducer_stream.ts
+++ b/examples/response_stream/server/routes/reducer_stream.ts
@@ -31,17 +31,29 @@ export const defineReducerStreamRoute = (router: IRouter, logger: Logger) => {
const maxTimeoutMs = request.body.timeout ?? 250;
const simulateError = request.body.simulateErrors ?? false;
+ let logMessageCounter = 1;
+
+ function logDebugMessage(msg: string) {
+ logger.debug(`Response Stream Example #${logMessageCounter}: ${msg}`);
+ logMessageCounter++;
+ }
+
+ logDebugMessage('Starting stream.');
+
let shouldStop = false;
request.events.aborted$.subscribe(() => {
+ logDebugMessage('aborted$ subscription trigger.');
shouldStop = true;
});
request.events.completed$.subscribe(() => {
+ logDebugMessage('completed$ subscription trigger.');
shouldStop = true;
});
const { end, push, responseWithHeaders } = streamFactory(
request.headers,
- logger
+ logger,
+ request.body.compressResponse
);
const entities = [
diff --git a/examples/response_stream/server/routes/single_string_stream.ts b/examples/response_stream/server/routes/single_string_stream.ts
index dd3a784314c96..fde4947746dbf 100644
--- a/examples/response_stream/server/routes/single_string_stream.ts
+++ b/examples/response_stream/server/routes/single_string_stream.ts
@@ -35,7 +35,11 @@ export const defineSimpleStringStreamRoute = (router: IRouter, logger: Logger) =
shouldStop = true;
});
- const { end, push, responseWithHeaders } = streamFactory(request.headers, logger);
+ const { end, push, responseWithHeaders } = streamFactory(
+ request.headers,
+ logger,
+ request.body.compressResponse
+ );
const text =
'Elasticsearch is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents. Elasticsearch is developed in Java and is dual-licensed under the source-available Server Side Public License and the Elastic license, while other parts fall under the proprietary (source-available) Elastic License. Official clients are available in Java, .NET (C#), PHP, Python, Apache Groovy, Ruby and many other languages. According to the DB-Engines ranking, Elasticsearch is the most popular enterprise search engine.';
diff --git a/package.json b/package.json
index 6b72c857c310c..140727a894ca5 100644
--- a/package.json
+++ b/package.json
@@ -585,7 +585,7 @@
"react-fast-compare": "^2.0.4",
"react-focus-on": "^3.6.0",
"react-grid-layout": "^1.3.4",
- "react-hook-form": "^7.36.1",
+ "react-hook-form": "^7.37.0",
"react-intl": "^2.8.0",
"react-is": "^17.0.2",
"react-markdown": "^6.0.3",
@@ -1450,7 +1450,7 @@
"webpack-dev-server": "^4.9.3",
"webpack-merge": "^4.2.2",
"webpack-sources": "^1.4.1",
- "xml-crypto": "^2.1.4",
+ "xml-crypto": "^3.0.0",
"xmlbuilder": "13.0.2",
"yargs": "^15.4.1"
}
diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml
index fde4a364947cc..41cf7d3b45681 100644
--- a/packages/kbn-optimizer/limits.yml
+++ b/packages/kbn-optimizer/limits.yml
@@ -110,7 +110,7 @@ pageLoadAssetSize:
share: 71239
snapshotRestore: 79032
spaces: 57868
- stackAlerts: 29684
+ stackAlerts: 58316
stackConnectors: 36314
synthetics: 40958
telemetry: 51957
@@ -140,6 +140,6 @@ pageLoadAssetSize:
visTypeTimeseries: 55203
visTypeVega: 153573
visTypeVislib: 242838
- visTypeXy: 30000
+ visTypeXy: 31800
visualizations: 90000
watcher: 43598
diff --git a/src/plugins/chart_expressions/expression_xy/common/expression_functions/layered_xy_vis.test.ts b/src/plugins/chart_expressions/expression_xy/common/expression_functions/layered_xy_vis.test.ts
index 4664902d13876..3976f6977e2be 100644
--- a/src/plugins/chart_expressions/expression_xy/common/expression_functions/layered_xy_vis.test.ts
+++ b/src/plugins/chart_expressions/expression_xy/common/expression_functions/layered_xy_vis.test.ts
@@ -28,6 +28,7 @@ describe('layeredXyVis', () => {
args: { ...rest, layers: [sampleExtendedLayer] },
syncColors: false,
syncTooltips: false,
+ canNavigateToLens: false,
},
});
});
diff --git a/src/plugins/chart_expressions/expression_xy/common/expression_functions/layered_xy_vis_fn.ts b/src/plugins/chart_expressions/expression_xy/common/expression_functions/layered_xy_vis_fn.ts
index 8dcc58cda01a8..d6553ef3dd7b3 100644
--- a/src/plugins/chart_expressions/expression_xy/common/expression_functions/layered_xy_vis_fn.ts
+++ b/src/plugins/chart_expressions/expression_xy/common/expression_functions/layered_xy_vis_fn.ts
@@ -61,6 +61,7 @@ export const layeredXyVisFn: LayeredXyVisFn['fn'] = async (data, args, handlers)
(handlers.variables?.embeddableTitle as string) ??
handlers.getExecutionContext?.()?.description,
},
+ canNavigateToLens: Boolean(handlers.variables.canNavigateToLens),
syncColors: handlers?.isSyncColorsEnabled?.() ?? false,
syncTooltips: handlers?.isSyncTooltipsEnabled?.() ?? false,
},
diff --git a/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis.test.ts b/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis.test.ts
index 67c7ab8d1e294..a09c5f05adb08 100644
--- a/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis.test.ts
+++ b/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis.test.ts
@@ -38,6 +38,7 @@ describe('xyVis', () => {
},
],
},
+ canNavigateToLens: false,
syncColors: false,
syncTooltips: false,
},
@@ -346,6 +347,7 @@ describe('xyVis', () => {
},
],
},
+ canNavigateToLens: false,
syncColors: false,
syncTooltips: false,
},
diff --git a/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis_fn.ts b/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis_fn.ts
index e29f1e5ffff3c..849f2030a4697 100644
--- a/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis_fn.ts
+++ b/src/plugins/chart_expressions/expression_xy/common/expression_functions/xy_vis_fn.ts
@@ -136,6 +136,7 @@ export const xyVisFn: XyVisFn['fn'] = async (data, args, handlers) => {
(handlers.variables?.embeddableTitle as string) ??
handlers.getExecutionContext?.()?.description,
},
+ canNavigateToLens: Boolean(handlers.variables.canNavigateToLens),
syncColors: handlers?.isSyncColorsEnabled?.() ?? false,
syncTooltips: handlers?.isSyncTooltipsEnabled?.() ?? false,
},
diff --git a/src/plugins/chart_expressions/expression_xy/common/types/expression_renderers.ts b/src/plugins/chart_expressions/expression_xy/common/types/expression_renderers.ts
index de387b4113373..94567f563cdb1 100644
--- a/src/plugins/chart_expressions/expression_xy/common/types/expression_renderers.ts
+++ b/src/plugins/chart_expressions/expression_xy/common/types/expression_renderers.ts
@@ -18,6 +18,7 @@ export interface XYChartProps {
args: XYProps;
syncTooltips: boolean;
syncColors: boolean;
+ canNavigateToLens?: boolean;
}
export interface XYRender {
diff --git a/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx b/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx
index 45eca06c670b0..0d88480b00342 100644
--- a/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx
+++ b/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx
@@ -110,7 +110,7 @@ declare global {
}
}
-export type XYChartRenderProps = XYChartProps & {
+export type XYChartRenderProps = Omit & {
chartsThemeService: ChartsPluginSetup['theme'];
chartsActiveCursorService: ChartsPluginStart['activeCursor'];
data: DataPublicPluginStart;
diff --git a/src/plugins/chart_expressions/expression_xy/public/expression_renderers/xy_chart_renderer.tsx b/src/plugins/chart_expressions/expression_xy/public/expression_renderers/xy_chart_renderer.tsx
index 5606bad9050c7..e00f5b04bd590 100644
--- a/src/plugins/chart_expressions/expression_xy/public/expression_renderers/xy_chart_renderer.tsx
+++ b/src/plugins/chart_expressions/expression_xy/public/expression_renderers/xy_chart_renderer.tsx
@@ -52,6 +52,7 @@ interface XyChartRendererDeps {
const extractCounterEvents = (
originatingApp: string,
{ layers, yAxisConfigs }: XYChartProps['args'],
+ canNavigateToLens: boolean,
services: {
getDataLayers: typeof getDataLayers;
}
@@ -149,6 +150,7 @@ const extractCounterEvents = (
(aggregateLayers.length === 1 && dataLayer.splitAccessors?.length)
? 'aggregate_bucket'
: undefined,
+ canNavigateToLens ? `render_${byTypes.mixedXY ? 'mixed_xy' : type}_convertable` : undefined,
]
.filter(Boolean)
.map((item) => `render_${originatingApp}_${item}`);
@@ -188,9 +190,14 @@ export const getXyChartRenderer = ({
const visualizationType = extractVisualizationType(executionContext);
if (deps.usageCollection && containerType && visualizationType) {
- const uiEvents = extractCounterEvents(visualizationType, config.args, {
- getDataLayers,
- });
+ const uiEvents = extractCounterEvents(
+ visualizationType,
+ config.args,
+ Boolean(config.canNavigateToLens),
+ {
+ getDataLayers,
+ }
+ );
if (uiEvents) {
deps.usageCollection.reportUiCounter(containerType, METRIC_TYPE.COUNT, uiEvents);
diff --git a/src/plugins/controls/common/options_list/ip_search.test.ts b/src/plugins/controls/common/options_list/ip_search.test.ts
new file mode 100644
index 0000000000000..1c935b1875311
--- /dev/null
+++ b/src/plugins/controls/common/options_list/ip_search.test.ts
@@ -0,0 +1,129 @@
+/*
+ * 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 { getIpRangeQuery, getIpSegments, getMinMaxIp } from './ip_search';
+
+describe('test IP search functionality', () => {
+ test('get IP segments', () => {
+ expect(getIpSegments('')).toStrictEqual({ segments: [''], type: 'unknown' });
+ expect(getIpSegments('test')).toStrictEqual({ segments: ['test'], type: 'unknown' });
+ expect(getIpSegments('123.456')).toStrictEqual({ segments: ['123', '456'], type: 'ipv4' });
+ expect(getIpSegments('123..456...')).toStrictEqual({ segments: ['123', '456'], type: 'ipv4' });
+ expect(getIpSegments('abc:def:')).toStrictEqual({ segments: ['abc', 'def'], type: 'ipv6' });
+ expect(getIpSegments(':::x:::abc:::def:::')).toStrictEqual({
+ segments: ['x', 'abc', 'def'],
+ type: 'ipv6',
+ });
+ });
+
+ test('get min/max IP', () => {
+ expect(getMinMaxIp('ipv4', ['123'])).toStrictEqual({
+ min: '123.0.0.0',
+ max: '123.255.255.255',
+ });
+ expect(getMinMaxIp('ipv4', ['123', '456', '789'])).toStrictEqual({
+ min: '123.456.789.0',
+ max: '123.456.789.255',
+ });
+ expect(getMinMaxIp('ipv6', ['abc', 'def'])).toStrictEqual({
+ min: 'abc:def::',
+ max: 'abc:def:ffff:ffff:ffff:ffff:ffff:ffff',
+ });
+ expect(getMinMaxIp('ipv6', ['a', 'b', 'c', 'd', 'e', 'f', 'g'])).toStrictEqual({
+ min: 'a:b:c:d:e:f:g::',
+ max: 'a:b:c:d:e:f:g:ffff',
+ });
+ });
+
+ test('get IP range query', () => {
+ // invalid searches
+ expect(getIpRangeQuery('xyz')).toStrictEqual({
+ validSearch: false,
+ });
+ expect(getIpRangeQuery('123.456.OVER 9000')).toStrictEqual({
+ validSearch: false,
+ });
+ expect(getIpRangeQuery('abc:def:ghi')).toStrictEqual({
+ validSearch: false,
+ });
+
+ // full IP searches
+ expect(getIpRangeQuery('1.2.3.4')).toStrictEqual({
+ validSearch: true,
+ rangeQuery: [
+ {
+ key: 'ipv4',
+ mask: '1.2.3.4/32',
+ },
+ ],
+ });
+ expect(getIpRangeQuery('1.2.3.256')).toStrictEqual({
+ validSearch: false,
+ rangeQuery: undefined,
+ });
+ expect(getIpRangeQuery('fbbe:a363:9e14:987c:49cf:d4d0:d8c8:bc42')).toStrictEqual({
+ validSearch: true,
+ rangeQuery: [
+ {
+ key: 'ipv6',
+ mask: 'fbbe:a363:9e14:987c:49cf:d4d0:d8c8:bc42/128',
+ },
+ ],
+ });
+
+ // partial IP searches - ipv4
+ const partialIpv4 = getIpRangeQuery('12.34.');
+ expect(partialIpv4.validSearch).toBe(true);
+ expect(partialIpv4.rangeQuery?.[0]).toStrictEqual({
+ key: 'ipv4',
+ from: '12.34.0.0',
+ to: '12.34.255.255',
+ });
+ expect(getIpRangeQuery('123.456.7')).toStrictEqual({
+ validSearch: false,
+ rangeQuery: [],
+ });
+ expect(getIpRangeQuery('12:34.56')).toStrictEqual({
+ validSearch: false,
+ rangeQuery: [],
+ });
+
+ // partial IP searches - ipv6
+ const partialIpv6 = getIpRangeQuery('fbbe:a363:9e14:987c:49cf');
+ expect(partialIpv6.validSearch).toBe(true);
+ expect(partialIpv6.rangeQuery?.[0]).toStrictEqual({
+ key: 'ipv6',
+ from: 'fbbe:a363:9e14:987c:49cf::',
+ to: 'fbbe:a363:9e14:987c:49cf:ffff:ffff:ffff',
+ });
+
+ // partial IP searches - unknown type
+ let partialUnknownIp = getIpRangeQuery('1234');
+ expect(partialUnknownIp.validSearch).toBe(true);
+ expect(partialUnknownIp.rangeQuery?.length).toBe(1);
+ expect(partialUnknownIp.rangeQuery?.[0]).toStrictEqual({
+ key: 'ipv6',
+ from: '1234::',
+ to: '1234:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
+ });
+
+ partialUnknownIp = getIpRangeQuery('123');
+ expect(partialUnknownIp.validSearch).toBe(true);
+ expect(partialUnknownIp.rangeQuery?.length).toBe(2);
+ expect(partialUnknownIp.rangeQuery?.[0]).toStrictEqual({
+ key: 'ipv4',
+ from: '123.0.0.0',
+ to: '123.255.255.255',
+ });
+ expect(partialUnknownIp.rangeQuery?.[1]).toStrictEqual({
+ key: 'ipv6',
+ from: '123::',
+ to: '123:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
+ });
+ });
+});
diff --git a/src/plugins/controls/common/options_list/ip_search.ts b/src/plugins/controls/common/options_list/ip_search.ts
new file mode 100644
index 0000000000000..f371fbb1f6506
--- /dev/null
+++ b/src/plugins/controls/common/options_list/ip_search.ts
@@ -0,0 +1,118 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import ipaddr from 'ipaddr.js';
+
+export interface IpRangeQuery {
+ validSearch: boolean;
+ rangeQuery?: Array<{ key: string; from: string; to: string } | { key: string; mask: string }>;
+}
+interface IpSegments {
+ segments: string[];
+ type: 'ipv4' | 'ipv6' | 'unknown';
+}
+
+export const getIpSegments = (searchString: string): IpSegments => {
+ if (searchString.indexOf('.') !== -1) {
+ // ipv4 takes priority - so if search string contains both `.` and `:` then it will just be an invalid ipv4 search
+ const ipv4Segments = searchString.split('.').filter((segment) => segment !== '');
+ return { segments: ipv4Segments, type: 'ipv4' };
+ } else if (searchString.indexOf(':') !== -1) {
+ // note that currently, because of the logic of splitting here, searching for shorthand IPv6 IPs is not supported (for example,
+ // must search for `59fb:0:0:0:0:1005:cc57:6571` and not `59fb::1005:cc57:6571` to get the expected match)
+ const ipv6Segments = searchString.split(':').filter((segment) => segment !== '');
+ return { segments: ipv6Segments, type: 'ipv6' };
+ }
+ return { segments: [searchString], type: 'unknown' };
+};
+
+export const getMinMaxIp = (
+ type: 'ipv4' | 'ipv6',
+ segments: IpSegments['segments']
+): { min: string; max: string } => {
+ const isIpv4 = type === 'ipv4';
+ const minIp = isIpv4
+ ? segments.concat(Array(4 - segments.length).fill('0')).join('.')
+ : segments.join(':') + '::';
+ const maxIp = isIpv4
+ ? segments.concat(Array(4 - segments.length).fill('255')).join('.')
+ : segments.concat(Array(8 - segments.length).fill('ffff')).join(':');
+ return {
+ min: minIp,
+ max: maxIp,
+ };
+};
+
+const buildFullIpSearchRangeQuery = (segments: IpSegments): IpRangeQuery['rangeQuery'] => {
+ const { type: ipType, segments: ipSegments } = segments;
+
+ const isIpv4 = ipType === 'ipv4';
+ const searchIp = ipSegments.join(isIpv4 ? '.' : ':');
+ if (ipaddr.isValid(searchIp)) {
+ return [
+ {
+ key: ipType,
+ mask: isIpv4 ? searchIp + '/32' : searchIp + '/128',
+ },
+ ];
+ }
+ return undefined;
+};
+
+const buildPartialIpSearchRangeQuery = (segments: IpSegments): IpRangeQuery['rangeQuery'] => {
+ const { type: ipType, segments: ipSegments } = segments;
+
+ const ranges = [];
+ if (ipType === 'unknown' || ipType === 'ipv4') {
+ const { min: minIpv4, max: maxIpv4 } = getMinMaxIp('ipv4', ipSegments);
+
+ if (ipaddr.isValid(minIpv4) && ipaddr.isValid(maxIpv4)) {
+ ranges.push({
+ key: 'ipv4',
+ from: minIpv4,
+ to: maxIpv4,
+ });
+ }
+ }
+
+ if (ipType === 'unknown' || ipType === 'ipv6') {
+ const { min: minIpv6, max: maxIpv6 } = getMinMaxIp('ipv6', ipSegments);
+
+ if (ipaddr.isValid(minIpv6) && ipaddr.isValid(maxIpv6)) {
+ ranges.push({
+ key: 'ipv6',
+ from: minIpv6,
+ to: maxIpv6,
+ });
+ }
+ }
+
+ return ranges;
+};
+
+export const getIpRangeQuery = (searchString: string): IpRangeQuery => {
+ if (searchString.match(/^[A-Fa-f0-9.:]*$/) === null) {
+ return { validSearch: false };
+ }
+
+ const ipSegments = getIpSegments(searchString);
+ if (ipSegments.type === 'ipv4' && ipSegments.segments.length === 4) {
+ const ipv4RangeQuery = buildFullIpSearchRangeQuery(ipSegments);
+ return { validSearch: Boolean(ipv4RangeQuery), rangeQuery: ipv4RangeQuery };
+ }
+ if (ipSegments.type === 'ipv6' && ipSegments.segments.length === 8) {
+ const ipv6RangeQuery = buildFullIpSearchRangeQuery(ipSegments);
+ return { validSearch: Boolean(ipv6RangeQuery), rangeQuery: ipv6RangeQuery };
+ }
+
+ const partialRangeQuery = buildPartialIpSearchRangeQuery(ipSegments);
+ return {
+ validSearch: !(partialRangeQuery?.length === 0),
+ rangeQuery: partialRangeQuery,
+ };
+};
diff --git a/src/plugins/controls/common/options_list/mocks.tsx b/src/plugins/controls/common/options_list/mocks.tsx
index 2fd4d31a54b21..09f6d9caa33b4 100644
--- a/src/plugins/controls/common/options_list/mocks.tsx
+++ b/src/plugins/controls/common/options_list/mocks.tsx
@@ -18,7 +18,7 @@ const mockOptionsListComponentState = {
availableOptions: ['woof', 'bark', 'meow', 'quack', 'moo'],
invalidSelections: [],
validSelections: [],
- searchString: '',
+ searchString: { value: '', valid: true },
} as OptionsListComponentState;
const mockOptionsListEmbeddableInput = {
diff --git a/src/plugins/controls/public/options_list/components/options_list_popover.tsx b/src/plugins/controls/public/options_list/components/options_list_popover.tsx
index 0cdfcefb9baa5..8863a3d1978a3 100644
--- a/src/plugins/controls/public/options_list/components/options_list_popover.tsx
+++ b/src/plugins/controls/public/options_list/components/options_list_popover.tsx
@@ -26,8 +26,8 @@ import {
import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public';
import { optionsListReducers } from '../options_list_reducers';
-import { OptionsListStrings } from './options_list_strings';
import { OptionsListReduxState } from '../types';
+import { OptionsListStrings } from './options_list_strings';
export interface OptionsListPopoverProps {
width: number;
@@ -80,11 +80,12 @@ export const OptionsListPopover = ({ width, updateSearchString }: OptionsListPop
>
updateSearchString(event.target.value)}
- value={searchString}
+ value={searchString.value}
data-test-subj="optionsList-control-search-input"
placeholder={
totalCardinality
diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx
index 0ccd5d49cabc2..292e7cb6b0597 100644
--- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx
+++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx
@@ -35,7 +35,7 @@ import {
OptionsListEmbeddableInput,
OPTIONS_LIST_CONTROL,
} from '../..';
-import { optionsListReducers } from '../options_list_reducers';
+import { getDefaultComponentState, optionsListReducers } from '../options_list_reducers';
import { OptionsListControl } from '../components/options_list_control';
import { ControlsDataViewsService } from '../../services/data_views/types';
import { ControlsOptionsListService } from '../../services/options_list/types';
@@ -105,6 +105,7 @@ export class OptionsListEmbeddable extends Embeddable({
embeddable: this,
reducers: optionsListReducers,
+ initialComponentState: getDefaultComponentState(),
});
this.initialize();
@@ -277,73 +278,87 @@ export class OptionsListEmbeddable extends Embeddable {
+ dispatch(setLoading(false));
+ dispatch(publishFilters(newFilters));
+ });
} else {
- const valid: string[] = [];
- const invalid: string[] = [];
-
- for (const selectedOption of selectedOptions) {
- if (invalidSelections?.includes(selectedOption)) invalid.push(selectedOption);
- else valid.push(selectedOption);
- }
- dispatch(
- updateQueryResults({
- availableOptions: suggestions,
- invalidSelections: invalid,
- validSelections: valid,
- totalCardinality,
- })
- );
+ batch(() => {
+ dispatch(
+ updateQueryResults({
+ availableOptions: [],
+ })
+ );
+ dispatch(setLoading(false));
+ });
}
-
- // publish filter
- const newFilters = await this.buildFilter();
- batch(() => {
- dispatch(setLoading(false));
- dispatch(publishFilters(newFilters));
- });
};
private buildFilter = async () => {
diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx
index d0b779e566c31..ea36ede0e1c9d 100644
--- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx
+++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable_factory.tsx
@@ -57,7 +57,8 @@ export class OptionsListEmbeddableFactory
public isFieldCompatible = (dataControlField: DataControlField) => {
if (
(dataControlField.field.aggregatable && dataControlField.field.type === 'string') ||
- dataControlField.field.type === 'boolean'
+ dataControlField.field.type === 'boolean' ||
+ dataControlField.field.type === 'ip'
) {
dataControlField.compatibleControlTypes.push(this.type);
}
diff --git a/src/plugins/controls/public/options_list/options_list_reducers.ts b/src/plugins/controls/public/options_list/options_list_reducers.ts
index 3b48e6f989f6c..2a0c69126c135 100644
--- a/src/plugins/controls/public/options_list/options_list_reducers.ts
+++ b/src/plugins/controls/public/options_list/options_list_reducers.ts
@@ -12,6 +12,11 @@ import { Filter } from '@kbn/es-query';
import { OptionsListReduxState, OptionsListComponentState } from './types';
import { OptionsListField } from '../../common/options_list/types';
+import { getIpRangeQuery } from '../../common/options_list/ip_search';
+
+export const getDefaultComponentState = (): OptionsListReduxState['componentState'] => ({
+ searchString: { value: '', valid: true },
+});
export const optionsListReducers = {
deselectOption: (state: WritableDraft, action: PayloadAction) => {
@@ -38,7 +43,13 @@ export const optionsListReducers = {
}
},
setSearchString: (state: WritableDraft, action: PayloadAction) => {
- state.componentState.searchString = action.payload;
+ state.componentState.searchString.value = action.payload;
+ if (
+ action.payload !== '' && // empty string search is never invalid
+ state.componentState.field?.type === 'ip' // only IP searches can currently be invalid
+ ) {
+ state.componentState.searchString.valid = getIpRangeQuery(action.payload).validSearch;
+ }
},
selectOption: (state: WritableDraft, action: PayloadAction) => {
if (!state.explicitInput.selectedOptions) state.explicitInput.selectedOptions = [];
diff --git a/src/plugins/controls/public/options_list/types.ts b/src/plugins/controls/public/options_list/types.ts
index aca0c05fe0893..4001299a9ab53 100644
--- a/src/plugins/controls/public/options_list/types.ts
+++ b/src/plugins/controls/public/options_list/types.ts
@@ -10,6 +10,11 @@ import { ReduxEmbeddableState } from '@kbn/presentation-util-plugin/public';
import { ControlOutput } from '../types';
import { OptionsListEmbeddableInput, OptionsListField } from '../../common/options_list/types';
+interface SearchString {
+ value: string;
+ valid: boolean;
+}
+
// Component state is only used by public components.
export interface OptionsListComponentState {
field?: OptionsListField;
@@ -17,7 +22,7 @@ export interface OptionsListComponentState {
availableOptions?: string[];
invalidSelections?: string[];
validSelections?: string[];
- searchString: string;
+ searchString: SearchString;
}
// public only - redux embeddable state type
diff --git a/src/plugins/controls/server/options_list/options_list_queries.test.ts b/src/plugins/controls/server/options_list/options_list_queries.test.ts
index 399154c5518aa..40536822833da 100644
--- a/src/plugins/controls/server/options_list/options_list_queries.test.ts
+++ b/src/plugins/controls/server/options_list/options_list_queries.test.ts
@@ -102,53 +102,55 @@ describe('options list queries', () => {
});
});
- describe('suggestion aggregation and parsing', () => {
- test('creates case insensitive aggregation for a text / keyword field with a search string', () => {
- const optionsListRequestBodyMock: OptionsListRequestBody = {
- fieldName: 'coolTestField.keyword',
- textFieldName: 'coolTestField',
- searchString: 'cooool',
- fieldSpec: { aggregatable: true } as unknown as FieldSpec,
- };
- const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
- expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock))
- .toMatchInlineSnapshot(`
- Object {
- "aggs": Object {
- "keywordSuggestions": Object {
- "terms": Object {
- "field": "coolTestField.keyword",
- "shard_size": 10,
+ describe('suggestion aggregation', () => {
+ describe('text / keyword field', () => {
+ test('with a search string, creates case insensitive aggregation', () => {
+ const optionsListRequestBodyMock: OptionsListRequestBody = {
+ fieldName: 'coolTestField.keyword',
+ textFieldName: 'coolTestField',
+ searchString: 'cooool',
+ fieldSpec: { aggregatable: true } as unknown as FieldSpec,
+ };
+ const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
+ expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock))
+ .toMatchInlineSnapshot(`
+ Object {
+ "aggs": Object {
+ "keywordSuggestions": Object {
+ "terms": Object {
+ "field": "coolTestField.keyword",
+ "shard_size": 10,
+ },
},
},
- },
- "filter": Object {
- "match_phrase_prefix": Object {
- "coolTestField": "cooool",
+ "filter": Object {
+ "match_phrase_prefix": Object {
+ "coolTestField": "cooool",
+ },
},
- },
- }
- `);
- });
+ }
+ `);
+ });
- test('creates keyword aggregation for a text / keyword field without a search string', () => {
- const optionsListRequestBodyMock: OptionsListRequestBody = {
- fieldName: 'coolTestField.keyword',
- textFieldName: 'coolTestField',
- fieldSpec: { aggregatable: true } as unknown as FieldSpec,
- };
- const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
- expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock))
- .toMatchInlineSnapshot(`
- Object {
- "terms": Object {
- "execution_hint": "map",
- "field": "coolTestField.keyword",
- "include": ".*",
- "shard_size": 10,
- },
- }
- `);
+ test('without a search string, creates keyword aggregation', () => {
+ const optionsListRequestBodyMock: OptionsListRequestBody = {
+ fieldName: 'coolTestField.keyword',
+ textFieldName: 'coolTestField',
+ fieldSpec: { aggregatable: true } as unknown as FieldSpec,
+ };
+ const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
+ expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock))
+ .toMatchInlineSnapshot(`
+ Object {
+ "terms": Object {
+ "execution_hint": "map",
+ "field": "coolTestField.keyword",
+ "include": ".*",
+ "shard_size": 10,
+ },
+ }
+ `);
+ });
});
test('creates boolean aggregation for boolean field', () => {
@@ -216,6 +218,177 @@ describe('options list queries', () => {
`);
});
+ describe('IP field', () => {
+ test('without a search string, creates IP range aggregation with default range', () => {
+ const optionsListRequestBodyMock: OptionsListRequestBody = {
+ fieldName: 'clientip',
+ fieldSpec: { type: 'ip' } as unknown as FieldSpec,
+ };
+ const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
+ expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock))
+ .toMatchInlineSnapshot(`
+ Object {
+ "aggs": Object {
+ "filteredSuggestions": Object {
+ "terms": Object {
+ "execution_hint": "map",
+ "field": "clientip",
+ "shard_size": 10,
+ },
+ },
+ },
+ "ip_range": Object {
+ "field": "clientip",
+ "keyed": true,
+ "ranges": Array [
+ Object {
+ "from": "::",
+ "key": "ipv6",
+ "to": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
+ },
+ ],
+ },
+ }
+ `);
+ });
+
+ test('full IPv4 in the search string, creates IP range aggregation with CIDR mask', () => {
+ const optionsListRequestBodyMock: OptionsListRequestBody = {
+ fieldName: 'clientip',
+ fieldSpec: { type: 'ip' } as unknown as FieldSpec,
+ searchString: '41.77.243.255',
+ };
+ const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
+ expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock))
+ .toMatchInlineSnapshot(`
+ Object {
+ "aggs": Object {
+ "filteredSuggestions": Object {
+ "terms": Object {
+ "execution_hint": "map",
+ "field": "clientip",
+ "shard_size": 10,
+ },
+ },
+ },
+ "ip_range": Object {
+ "field": "clientip",
+ "keyed": true,
+ "ranges": Array [
+ Object {
+ "key": "ipv4",
+ "mask": "41.77.243.255/32",
+ },
+ ],
+ },
+ }
+ `);
+ });
+
+ test('full IPv6 in the search string, creates IP range aggregation with CIDR mask', () => {
+ const optionsListRequestBodyMock: OptionsListRequestBody = {
+ fieldName: 'clientip',
+ fieldSpec: { type: 'ip' } as unknown as FieldSpec,
+ searchString: 'f688:fb50:6433:bba2:604:f2c:194a:d3c5',
+ };
+ const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
+ expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock))
+ .toMatchInlineSnapshot(`
+ Object {
+ "aggs": Object {
+ "filteredSuggestions": Object {
+ "terms": Object {
+ "execution_hint": "map",
+ "field": "clientip",
+ "shard_size": 10,
+ },
+ },
+ },
+ "ip_range": Object {
+ "field": "clientip",
+ "keyed": true,
+ "ranges": Array [
+ Object {
+ "key": "ipv6",
+ "mask": "f688:fb50:6433:bba2:604:f2c:194a:d3c5/128",
+ },
+ ],
+ },
+ }
+ `);
+ });
+
+ test('partial IPv4 in the search string, creates IP range aggregation with min and max', () => {
+ const optionsListRequestBodyMock: OptionsListRequestBody = {
+ fieldName: 'clientip',
+ fieldSpec: { type: 'ip' } as unknown as FieldSpec,
+ searchString: '41.77',
+ };
+ const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
+ expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock))
+ .toMatchInlineSnapshot(`
+ Object {
+ "aggs": Object {
+ "filteredSuggestions": Object {
+ "terms": Object {
+ "execution_hint": "map",
+ "field": "clientip",
+ "shard_size": 10,
+ },
+ },
+ },
+ "ip_range": Object {
+ "field": "clientip",
+ "keyed": true,
+ "ranges": Array [
+ Object {
+ "from": "41.77.0.0",
+ "key": "ipv4",
+ "to": "41.77.255.255",
+ },
+ ],
+ },
+ }
+ `);
+ });
+
+ test('partial IPv46 in the search string, creates IP range aggregation with min and max', () => {
+ const optionsListRequestBodyMock: OptionsListRequestBody = {
+ fieldName: 'clientip',
+ fieldSpec: { type: 'ip' } as unknown as FieldSpec,
+ searchString: 'cdb6:',
+ };
+ const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
+ expect(suggestionAggBuilder.buildAggregation(optionsListRequestBodyMock))
+ .toMatchInlineSnapshot(`
+ Object {
+ "aggs": Object {
+ "filteredSuggestions": Object {
+ "terms": Object {
+ "execution_hint": "map",
+ "field": "clientip",
+ "shard_size": 10,
+ },
+ },
+ },
+ "ip_range": Object {
+ "field": "clientip",
+ "keyed": true,
+ "ranges": Array [
+ Object {
+ "from": "cdb6::",
+ "key": "ipv6",
+ "to": "cdb6:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
+ },
+ ],
+ },
+ }
+ `);
+ });
+ });
+ });
+
+ describe('suggestion parsing', () => {
test('parses keyword / text result', () => {
const optionsListRequestBodyMock: OptionsListRequestBody = {
fieldName: 'coolTestField.keyword',
@@ -318,4 +491,60 @@ describe('options list queries', () => {
`);
});
});
+
+ test('parses mixed IPv4 and IPv6 result', () => {
+ const optionsListRequestBodyMock: OptionsListRequestBody = {
+ fieldName: 'clientip',
+ fieldSpec: { type: 'ip' } as unknown as FieldSpec,
+ };
+ const suggestionAggBuilder = getSuggestionAggregationBuilder(optionsListRequestBodyMock);
+ rawSearchResponseMock.aggregations = {
+ suggestions: {
+ buckets: {
+ ipv4: {
+ from: '0.0.0.0',
+ to: '255.255.255.255',
+ filteredSuggestions: {
+ buckets: [
+ { doc_count: 8, key: '21.35.91.62' },
+ { doc_count: 8, key: '21.35.91.61' },
+ { doc_count: 11, key: '111.52.174.2' },
+ { doc_count: 1, key: '56.73.58.63' },
+ { doc_count: 9, key: '23.216.241.120' },
+ { doc_count: 10, key: '196.162.13.39' },
+ { doc_count: 7, key: '203.88.33.151' },
+ ],
+ },
+ },
+ ipv6: {
+ from: '::',
+ to: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
+ filteredSuggestions: {
+ buckets: [
+ { doc_count: 12, key: '52:ae76:5947:5e2a:551:fe6a:712a:c72' },
+ { doc_count: 1, key: 'fd:4aa0:c27c:b04:997f:2de1:51b4:8418' },
+ { doc_count: 9, key: '28c7:c9a4:42fd:16b0:4de5:e41e:28d9:9172' },
+ { doc_count: 6, key: '1ec:aa98:b0a6:d07c:590:18a0:8a33:2eb8' },
+ { doc_count: 10, key: 'f7a9:640b:b5a0:1219:8d75:ed94:3c3e:2e63' },
+ ],
+ },
+ },
+ },
+ },
+ };
+ expect(suggestionAggBuilder.parse(rawSearchResponseMock)).toMatchInlineSnapshot(`
+ Array [
+ "52:ae76:5947:5e2a:551:fe6a:712a:c72",
+ "111.52.174.2",
+ "196.162.13.39",
+ "f7a9:640b:b5a0:1219:8d75:ed94:3c3e:2e63",
+ "23.216.241.120",
+ "28c7:c9a4:42fd:16b0:4de5:e41e:28d9:9172",
+ "21.35.91.62",
+ "21.35.91.61",
+ "203.88.33.151",
+ "1ec:aa98:b0a6:d07c:590:18a0:8a33:2eb8",
+ ]
+ `);
+ });
});
diff --git a/src/plugins/controls/server/options_list/options_list_queries.ts b/src/plugins/controls/server/options_list/options_list_queries.ts
index 4e88c449a7e8e..d1fa89bbc9358 100644
--- a/src/plugins/controls/server/options_list/options_list_queries.ts
+++ b/src/plugins/controls/server/options_list/options_list_queries.ts
@@ -7,17 +7,21 @@
*/
import { get, isEmpty } from 'lodash';
-
import { SearchResponse } from '@elastic/elasticsearch/lib/api/types';
import { getFieldSubtypeNested } from '@kbn/data-views-plugin/common';
import { OptionsListRequestBody } from '../../common/options_list/types';
-
+import { getIpRangeQuery, type IpRangeQuery } from '../../common/options_list/ip_search';
export interface OptionsListAggregationBuilder {
buildAggregation: (req: OptionsListRequestBody) => unknown;
parse: (response: SearchResponse) => string[];
}
+interface EsBucket {
+ key: string;
+ doc_count: number;
+}
+
/**
* Validation aggregations
*/
@@ -62,6 +66,9 @@ export const getSuggestionAggregationBuilder = ({
if (fieldSpec?.type === 'boolean') {
return suggestionAggSubtypes.boolean;
}
+ if (fieldSpec?.type === 'ip') {
+ return suggestionAggSubtypes.ip;
+ }
if (fieldSpec && getFieldSubtypeNested(fieldSpec)) {
return suggestionAggSubtypes.subtypeNested;
}
@@ -71,6 +78,16 @@ export const getSuggestionAggregationBuilder = ({
const getEscapedQuery = (q: string = '') =>
q.replace(/[.?+*|{}[\]()"\\#@&<>~]/g, (match) => `\\${match}`);
+const getIpBuckets = (rawEsResult: any, combinedBuckets: EsBucket[], type: 'ipv4' | 'ipv6') => {
+ const results = get(
+ rawEsResult,
+ `aggregations.suggestions.buckets.${type}.filteredSuggestions.buckets`
+ );
+ if (results) {
+ results.forEach((suggestion: EsBucket) => combinedBuckets.push(suggestion));
+ }
+};
+
const suggestionAggSubtypes: { [key: string]: OptionsListAggregationBuilder } = {
/**
* the "Keyword only" query / parser should be used when the options list is built on a field which has only keyword mappings.
@@ -139,6 +156,65 @@ const suggestionAggSubtypes: { [key: string]: OptionsListAggregationBuilder } =
),
},
+ /**
+ * the "IP" query / parser should be used when the options list is built on a field of type IP.
+ */
+ ip: {
+ buildAggregation: ({ fieldName, searchString }: OptionsListRequestBody) => {
+ let ipRangeQuery: IpRangeQuery = {
+ validSearch: true,
+ rangeQuery: [
+ {
+ key: 'ipv6',
+ from: '::',
+ to: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
+ },
+ ],
+ };
+
+ if (searchString) {
+ ipRangeQuery = getIpRangeQuery(searchString);
+ if (!ipRangeQuery.validSearch) {
+ // ideally should be prevented on the client side but, if somehow an invalid search gets through to the server,
+ // simply don't return an aggregation query for the ES search request
+ return undefined;
+ }
+ }
+
+ return {
+ ip_range: {
+ field: fieldName,
+ ranges: ipRangeQuery.rangeQuery,
+ keyed: true,
+ },
+ aggs: {
+ filteredSuggestions: {
+ terms: {
+ field: fieldName,
+ execution_hint: 'map',
+ shard_size: 10,
+ },
+ },
+ },
+ };
+ },
+ parse: (rawEsResult) => {
+ if (!Boolean(rawEsResult.aggregations?.suggestions)) {
+ // if this is happens, that means there is an invalid search that snuck through to the server side code;
+ // so, might as well early return with no suggestions
+ return [];
+ }
+
+ const buckets: EsBucket[] = [];
+ getIpBuckets(rawEsResult, buckets, 'ipv4'); // modifies buckets array directly, i.e. "by reference"
+ getIpBuckets(rawEsResult, buckets, 'ipv6');
+ return buckets
+ .sort((bucketA: EsBucket, bucketB: EsBucket) => bucketB.doc_count - bucketA.doc_count)
+ .slice(0, 10) // only return top 10 results
+ .map((bucket: EsBucket) => bucket.key);
+ },
+ },
+
/**
* the "Subtype Nested" query / parser should be used when the options list is built on a field with subtype nested.
*/
diff --git a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts
index 0d7654f318f31..c9af30bb07b82 100644
--- a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts
+++ b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts
@@ -95,9 +95,12 @@ export const setupOptionsListSuggestionsRoute = (
const suggestionBuilder = getSuggestionAggregationBuilder(request);
const validationBuilder = getValidationAggregationBuilder();
- const suggestionAggregations = {
- suggestions: suggestionBuilder.buildAggregation(request),
- };
+ const builtSuggestionAggregation = suggestionBuilder.buildAggregation(request);
+ const suggestionAggregation = builtSuggestionAggregation
+ ? {
+ suggestions: builtSuggestionAggregation,
+ }
+ : {};
const builtValidationAggregation = validationBuilder.buildAggregation(request);
const validationAggregations = builtValidationAggregation
? {
@@ -114,7 +117,7 @@ export const setupOptionsListSuggestionsRoute = (
},
},
aggs: {
- ...suggestionAggregations,
+ ...suggestionAggregation,
...validationAggregations,
unique_terms: {
cardinality: {
diff --git a/src/plugins/data/server/search/session/session_service.test.ts b/src/plugins/data/server/search/session/session_service.test.ts
index 36b5d16e68a78..38a4f027765df 100644
--- a/src/plugins/data/server/search/session/session_service.test.ts
+++ b/src/plugins/data/server/search/session/session_service.test.ts
@@ -762,7 +762,13 @@ describe('SearchSessionService', () => {
expect(savedObjectsClient.update).toHaveBeenCalledTimes(2); // 3 trackIds calls batched into 2 update calls (2 different sessions)
expect(savedObjectsClient.create).not.toHaveBeenCalled();
- const [type1, id1, callAttributes1] = savedObjectsClient.update.mock.calls[0];
+ const sessionId1UpdateCallArgs = savedObjectsClient.update.mock.calls.find(
+ (args) => args[1] === sessionId1
+ );
+
+ expect(sessionId1UpdateCallArgs).toBeDefined();
+
+ const [type1, id1, callAttributes1] = sessionId1UpdateCallArgs!;
expect(type1).toBe(SEARCH_SESSION_TYPE);
expect(id1).toBe(sessionId1);
expect(callAttributes1).toHaveProperty('idMapping', {
@@ -776,7 +782,11 @@ describe('SearchSessionService', () => {
},
});
- const [type2, id2, callAttributes2] = savedObjectsClient.update.mock.calls[1];
+ const sessionId2UpdateCallArgs = savedObjectsClient.update.mock.calls.find(
+ (args) => args[1] === sessionId2
+ );
+ expect(sessionId2UpdateCallArgs).toBeDefined();
+ const [type2, id2, callAttributes2] = sessionId2UpdateCallArgs!;
expect(type2).toBe(SEARCH_SESSION_TYPE);
expect(id2).toBe(sessionId2);
expect(callAttributes2).toHaveProperty('idMapping', {
diff --git a/src/plugins/guided_onboarding/public/constants/guides_config/search.ts b/src/plugins/guided_onboarding/public/constants/guides_config/search.ts
index f91c0af1ba446..3c083a3bd96c1 100644
--- a/src/plugins/guided_onboarding/public/constants/guides_config/search.ts
+++ b/src/plugins/guided_onboarding/public/constants/guides_config/search.ts
@@ -25,8 +25,8 @@ export const searchConfig: GuideConfig = {
'Vivamus pretium, elit dictum lacinia aliquet, libero nibh dictum enim, a rhoncus leo magna in sapien.',
],
location: {
- appID: 'guidedOnboardingExample',
- path: 'stepOne',
+ appID: 'enterpriseSearch',
+ path: '',
},
},
{
diff --git a/src/plugins/vis_types/gauge/public/convert_to_lens/configurations/goal.test.ts b/src/plugins/vis_types/gauge/public/convert_to_lens/configurations/goal.test.ts
index ce59f275bedfb..a8070e90449ec 100644
--- a/src/plugins/vis_types/gauge/public/convert_to_lens/configurations/goal.test.ts
+++ b/src/plugins/vis_types/gauge/public/convert_to_lens/configurations/goal.test.ts
@@ -60,7 +60,7 @@ describe('getConfiguration', () => {
const metricAccessor = 'metric-id';
const breakdownByAccessor = 'bucket-id';
const metrics = [metricAccessor];
- const buckets = [breakdownByAccessor];
+ const buckets = { all: [breakdownByAccessor], customBuckets: {} };
const maxAccessor = 'max-accessor-id';
const collapseFn = 'sum';
expect(
@@ -69,7 +69,7 @@ describe('getConfiguration', () => {
buckets,
maxAccessor,
columnsWithoutReferenced: [],
- bucketCollapseFn: { [metricAccessor]: collapseFn },
+ bucketCollapseFn: { [collapseFn]: [breakdownByAccessor] },
})
).toEqual({
breakdownByAccessor,
diff --git a/src/plugins/vis_types/gauge/public/convert_to_lens/configurations/goal.ts b/src/plugins/vis_types/gauge/public/convert_to_lens/configurations/goal.ts
index d27ae644ea480..995dc5302288e 100644
--- a/src/plugins/vis_types/gauge/public/convert_to_lens/configurations/goal.ts
+++ b/src/plugins/vis_types/gauge/public/convert_to_lens/configurations/goal.ts
@@ -22,14 +22,22 @@ export const getConfiguration = (
bucketCollapseFn,
}: {
metrics: string[];
- buckets: string[];
+ buckets: {
+ all: string[];
+ customBuckets: Record;
+ };
maxAccessor: string;
columnsWithoutReferenced: Column[];
- bucketCollapseFn?: Record;
+ bucketCollapseFn?: Record;
}
): MetricVisConfiguration => {
const [metricAccessor] = metrics;
- const [breakdownByAccessor] = buckets;
+ const [breakdownByAccessor] = buckets.all;
+ const collapseFn = bucketCollapseFn
+ ? Object.keys(bucketCollapseFn).find((key) =>
+ bucketCollapseFn[key].includes(breakdownByAccessor)
+ )
+ : undefined;
return {
layerId,
layerType: 'data',
@@ -38,7 +46,7 @@ export const getConfiguration = (
breakdownByAccessor,
maxAccessor,
showBar: Boolean(maxAccessor),
- collapseFn: Object.values(bucketCollapseFn ?? {})[0],
+ collapseFn,
subtitle: gauge.labels.show && gauge.style.subText ? gauge.style.subText : undefined,
};
};
diff --git a/src/plugins/vis_types/gauge/public/convert_to_lens/gauge.test.ts b/src/plugins/vis_types/gauge/public/convert_to_lens/gauge.test.ts
index f7c07dafd85c6..0da750bfdcef0 100644
--- a/src/plugins/vis_types/gauge/public/convert_to_lens/gauge.test.ts
+++ b/src/plugins/vis_types/gauge/public/convert_to_lens/gauge.test.ts
@@ -104,22 +104,26 @@ describe('convertToLens', () => {
});
test('should return null if metrics count is more than 1', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- metrics: ['1', '2'],
- buckets: [],
- columns: [{ columnId: '2' }, { columnId: '1' }],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: ['1', '2'],
+ buckets: { all: [] },
+ columns: [{ columnId: '2' }, { columnId: '1' }],
+ },
+ ]);
const result = await convertToLens(vis, timefilter);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
});
test('should return null if metric column data type is different from number', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- metrics: ['1'],
- buckets: [],
- columns: [{ columnId: '2' }, { columnId: '1', dataType: 'string' }],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: ['1'],
+ buckets: { all: [] },
+ columns: [{ columnId: '2' }, { columnId: '1', dataType: 'string' }],
+ },
+ ]);
const result = await convertToLens(vis, timefilter);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
@@ -129,15 +133,17 @@ describe('convertToLens', () => {
layerType: 'data',
};
- mockGetColumnsFromVis.mockReturnValue({
- metrics: ['1'],
- buckets: [],
- columns: [{ columnId: '1', dataType: 'number' }],
- columnsWithoutReferenced: [
- { columnId: '1', meta: { aggId: 'agg-1' } },
- { columnId: '2', meta: { aggId: 'agg-2' } },
- ],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: ['1'],
+ buckets: { all: [] },
+ columns: [{ columnId: '1', dataType: 'number' }],
+ columnsWithoutReferenced: [
+ { columnId: '1', meta: { aggId: 'agg-1' } },
+ { columnId: '2', meta: { aggId: 'agg-2' } },
+ ],
+ },
+ ]);
mockGetConfiguration.mockReturnValue(config);
const result = await convertToLens(vis, timefilter);
diff --git a/src/plugins/vis_types/gauge/public/convert_to_lens/gauge.ts b/src/plugins/vis_types/gauge/public/convert_to_lens/gauge.ts
index be664d3500a7c..080d5e84561a9 100644
--- a/src/plugins/vis_types/gauge/public/convert_to_lens/gauge.ts
+++ b/src/plugins/vis_types/gauge/public/convert_to_lens/gauge.ts
@@ -53,7 +53,7 @@ export const convertToLens: ConvertGaugeVisToLensVisualization = async (vis, tim
const percentageModeConfig = getPercentageModeConfig(vis.params.gauge, false);
- const result = getColumnsFromVis(
+ const layers = getColumnsFromVis(
vis,
timefilter,
dataView,
@@ -63,17 +63,19 @@ export const convertToLens: ConvertGaugeVisToLensVisualization = async (vis, tim
{ dropEmptyRowsInDateHistogram: true, ...percentageModeConfig }
);
- if (result === null) {
+ if (layers === null) {
return null;
}
+ const [layerConfig] = layers;
+
// for now, multiple metrics are not supported
- if (result.metrics.length > 1 || result.buckets.length) {
+ if (layerConfig.metrics.length > 1 || layerConfig.buckets.all.length) {
return null;
}
- if (result.metrics[0]) {
- const metric = result.columns.find(({ columnId }) => columnId === result.metrics[0]);
+ if (layerConfig.metrics[0]) {
+ const metric = layerConfig.columns.find(({ columnId }) => columnId === layerConfig.metrics[0]);
if (metric?.dataType !== 'number') {
return null;
}
@@ -82,11 +84,11 @@ export const convertToLens: ConvertGaugeVisToLensVisualization = async (vis, tim
const layerId = uuid();
const indexPatternId = dataView.id!;
- const metricAccessor = result.metrics[0];
+ const metricAccessor = layerConfig.metrics[0];
const { min, max, isPercentageMode } = percentageModeConfig as PercentageModeConfigWithMinMax;
const minColumn = createStaticValueColumn(isPercentageMode ? 0 : min);
const maxColumn = createStaticValueColumn(isPercentageMode ? 1 : max);
- const columns = [...result.columns, minColumn, maxColumn];
+ const columns = [...layerConfig.columns, minColumn, maxColumn];
return {
type: 'lnsGauge',
diff --git a/src/plugins/vis_types/gauge/public/convert_to_lens/goal.test.ts b/src/plugins/vis_types/gauge/public/convert_to_lens/goal.test.ts
index 4d9247293e7a8..88566694f55bf 100644
--- a/src/plugins/vis_types/gauge/public/convert_to_lens/goal.test.ts
+++ b/src/plugins/vis_types/gauge/public/convert_to_lens/goal.test.ts
@@ -104,31 +104,37 @@ describe('convertToLens', () => {
});
test('should return null if metrics count is more than 1', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- metrics: ['1', '2'],
- columns: [{ columnId: '2' }, { columnId: '1' }],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: ['1', '2'],
+ columns: [{ columnId: '2' }, { columnId: '1' }],
+ },
+ ]);
const result = await convertToLens(vis, timefilter);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
});
test('should return null if buckets count is more than 1', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- metrics: [],
- buckets: ['1', '2'],
- columns: [{ columnId: '2' }, { columnId: '1' }],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: [],
+ buckets: { all: ['1', '2'] },
+ columns: [{ columnId: '2' }, { columnId: '1' }],
+ },
+ ]);
const result = await convertToLens(vis, timefilter);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
});
test('should return null if metric column data type is different from number', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- metrics: ['1'],
- buckets: ['2'],
- columns: [{ columnId: '2' }, { columnId: '1', dataType: 'string' }],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: ['1'],
+ buckets: { all: ['2'] },
+ columns: [{ columnId: '2' }, { columnId: '1', dataType: 'string' }],
+ },
+ ]);
const result = await convertToLens(vis, timefilter);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
@@ -139,15 +145,17 @@ describe('convertToLens', () => {
metricAccessor: '1',
};
- mockGetColumnsFromVis.mockReturnValue({
- metrics: ['1'],
- buckets: ['2'],
- columns: [{ columnId: '2' }, { columnId: '1', dataType: 'number' }],
- columnsWithoutReferenced: [
- { columnId: '1', meta: { aggId: 'agg-1' } },
- { columnId: '2', meta: { aggId: 'agg-2' } },
- ],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: ['1'],
+ buckets: { all: ['2'] },
+ columns: [{ columnId: '2' }, { columnId: '1', dataType: 'number' }],
+ columnsWithoutReferenced: [
+ { columnId: '1', meta: { aggId: 'agg-1' } },
+ { columnId: '2', meta: { aggId: 'agg-2' } },
+ ],
+ },
+ ]);
mockGetConfiguration.mockReturnValue(config);
const result = await convertToLens(vis, timefilter);
diff --git a/src/plugins/vis_types/gauge/public/convert_to_lens/goal.ts b/src/plugins/vis_types/gauge/public/convert_to_lens/goal.ts
index a57dfedb02581..624ce45b3e848 100644
--- a/src/plugins/vis_types/gauge/public/convert_to_lens/goal.ts
+++ b/src/plugins/vis_types/gauge/public/convert_to_lens/goal.ts
@@ -53,7 +53,7 @@ export const convertToLens: ConvertGoalVisToLensVisualization = async (vis, time
const percentageModeConfig = getPercentageModeConfig(vis.params.gauge, false);
- const result = getColumnsFromVis(
+ const layers = getColumnsFromVis(
vis,
timefilter,
dataView,
@@ -63,17 +63,19 @@ export const convertToLens: ConvertGoalVisToLensVisualization = async (vis, time
{ dropEmptyRowsInDateHistogram: true, ...percentageModeConfig }
);
- if (result === null) {
+ if (layers === null) {
return null;
}
+ const [layerConfig] = layers;
+
// for now, multiple metrics are not supported
- if (result.metrics.length > 1 || result.buckets.length > 1) {
+ if (layerConfig.metrics.length > 1 || layerConfig.buckets.all.length > 1) {
return null;
}
- if (result.metrics[0]) {
- const metric = result.columns.find(({ columnId }) => columnId === result.metrics[0]);
+ if (layerConfig.metrics[0]) {
+ const metric = layerConfig.columns.find(({ columnId }) => columnId === layerConfig.metrics[0]);
if (metric?.dataType !== 'number') {
return null;
}
@@ -81,7 +83,7 @@ export const convertToLens: ConvertGoalVisToLensVisualization = async (vis, time
const { isPercentageMode, max } = percentageModeConfig as PercentageModeConfigWithMinMax;
const maxColumn = createStaticValueColumn(isPercentageMode ? 1 : max);
- const columns = [...result.columns, maxColumn];
+ const columns = [...layerConfig.columns, maxColumn];
const layerId = uuid();
const indexPatternId = dataView.id!;
@@ -100,7 +102,7 @@ export const convertToLens: ConvertGoalVisToLensVisualization = async (vis, time
vis.params,
getPalette(vis.params.gauge, percentageModeConfig, true),
{
- ...result,
+ ...layerConfig,
maxAccessor: maxColumn.columnId,
}
),
diff --git a/src/plugins/vis_types/metric/public/convert_to_lens/configurations/index.test.ts b/src/plugins/vis_types/metric/public/convert_to_lens/configurations/index.test.ts
index 29669c0286529..5ccfb169c91ae 100644
--- a/src/plugins/vis_types/metric/public/convert_to_lens/configurations/index.test.ts
+++ b/src/plugins/vis_types/metric/public/convert_to_lens/configurations/index.test.ts
@@ -48,9 +48,9 @@ describe('getConfiguration', () => {
expect(
getConfiguration(layerId, params, palette, {
metrics: [metric],
- buckets: [bucket],
+ buckets: { all: [bucket], customBuckets: { metric: bucket } },
columnsWithoutReferenced: [],
- bucketCollapseFn: { [metric]: collapseFn },
+ bucketCollapseFn: { [collapseFn]: [bucket] },
})
).toEqual({
breakdownByAccessor: bucket,
diff --git a/src/plugins/vis_types/metric/public/convert_to_lens/configurations/index.ts b/src/plugins/vis_types/metric/public/convert_to_lens/configurations/index.ts
index ae62b82408eeb..7b1b42a0211f5 100644
--- a/src/plugins/vis_types/metric/public/convert_to_lens/configurations/index.ts
+++ b/src/plugins/vis_types/metric/public/convert_to_lens/configurations/index.ts
@@ -21,19 +21,27 @@ export const getConfiguration = (
bucketCollapseFn,
}: {
metrics: string[];
- buckets: string[];
+ buckets: {
+ all: string[];
+ customBuckets: Record;
+ };
columnsWithoutReferenced: Column[];
- bucketCollapseFn?: Record;
+ bucketCollapseFn?: Record;
}
): MetricVisConfiguration => {
const [metricAccessor] = metrics;
- const [breakdownByAccessor] = buckets;
+ const [breakdownByAccessor] = buckets.all;
+ const collapseFn = bucketCollapseFn
+ ? Object.keys(bucketCollapseFn).find((key) =>
+ bucketCollapseFn[key].includes(breakdownByAccessor)
+ )
+ : undefined;
return {
layerId,
layerType: 'data',
palette: params.metric.metricColorMode !== 'None' ? palette : undefined,
metricAccessor,
breakdownByAccessor,
- collapseFn: Object.values(bucketCollapseFn ?? {})[0],
+ collapseFn,
};
};
diff --git a/src/plugins/vis_types/metric/public/convert_to_lens/index.test.ts b/src/plugins/vis_types/metric/public/convert_to_lens/index.test.ts
index e0c50cad16719..b3ad4ccf6be59 100644
--- a/src/plugins/vis_types/metric/public/convert_to_lens/index.test.ts
+++ b/src/plugins/vis_types/metric/public/convert_to_lens/index.test.ts
@@ -83,31 +83,37 @@ describe('convertToLens', () => {
});
test('should return null if metrics count is more than 1', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- metrics: ['1', '2'],
- columns: [{ columnId: '2' }, { columnId: '1' }],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: ['1', '2'],
+ columns: [{ columnId: '2' }, { columnId: '1' }],
+ },
+ ]);
const result = await convertToLens(vis, timefilter);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
});
test('should return null if buckets count is more than 1', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- metrics: [],
- buckets: ['1', '2'],
- columns: [{ columnId: '2' }, { columnId: '1' }],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: [],
+ buckets: { all: ['1', '2'] },
+ columns: [{ columnId: '2' }, { columnId: '1' }],
+ },
+ ]);
const result = await convertToLens(vis, timefilter);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
});
test('should return null if metric column data type is different from number', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- metrics: ['1'],
- buckets: ['2'],
- columns: [{ columnId: '2' }, { columnId: '1', dataType: 'string' }],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: ['1'],
+ buckets: { all: ['2'] },
+ columns: [{ columnId: '2' }, { columnId: '1', dataType: 'string' }],
+ },
+ ]);
const result = await convertToLens(vis, timefilter);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
@@ -118,15 +124,17 @@ describe('convertToLens', () => {
metricAccessor: '1',
};
- mockGetColumnsFromVis.mockReturnValue({
- metrics: ['1'],
- buckets: ['2'],
- columns: [{ columnId: '2' }, { columnId: '1', dataType: 'number' }],
- columnsWithoutReferenced: [
- { columnId: '1', meta: { aggId: 'agg-1' } },
- { columnId: '2', meta: { aggId: 'agg-2' } },
- ],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ metrics: ['1'],
+ buckets: { all: ['2'] },
+ columns: [{ columnId: '2' }, { columnId: '1', dataType: 'number' }],
+ columnsWithoutReferenced: [
+ { columnId: '1', meta: { aggId: 'agg-1' } },
+ { columnId: '2', meta: { aggId: 'agg-2' } },
+ ],
+ },
+ ]);
mockGetConfiguration.mockReturnValue(config);
const result = await convertToLens(vis, timefilter);
diff --git a/src/plugins/vis_types/metric/public/convert_to_lens/index.ts b/src/plugins/vis_types/metric/public/convert_to_lens/index.ts
index 55f9e500b0a29..5b9cb985a2799 100644
--- a/src/plugins/vis_types/metric/public/convert_to_lens/index.ts
+++ b/src/plugins/vis_types/metric/public/convert_to_lens/index.ts
@@ -46,7 +46,7 @@ export const convertToLens: ConvertMetricVisToLensVisualization = async (vis, ti
await Promise.all([convertToLensModule, import('./configurations')]);
const percentageModeConfig = getPercentageModeConfig(vis.params.metric);
- const result = getColumnsFromVis(
+ const layers = getColumnsFromVis(
vis,
timefilter,
dataView,
@@ -56,17 +56,19 @@ export const convertToLens: ConvertMetricVisToLensVisualization = async (vis, ti
{ dropEmptyRowsInDateHistogram: true, ...percentageModeConfig }
);
- if (result === null) {
+ if (layers === null) {
return null;
}
+ const [layerConfig] = layers;
+
// for now, multiple metrics are not supported
- if (result.metrics.length > 1 || result.buckets.length > 1) {
+ if (layerConfig.metrics.length > 1 || layerConfig.buckets.all.length > 1) {
return null;
}
- if (result.metrics[0]) {
- const metric = result.columns.find(({ columnId }) => columnId === result.metrics[0]);
+ if (layerConfig.metrics[0]) {
+ const metric = layerConfig.columns.find(({ columnId }) => columnId === layerConfig.metrics[0]);
if (metric?.dataType !== 'number') {
return null;
}
@@ -81,7 +83,7 @@ export const convertToLens: ConvertMetricVisToLensVisualization = async (vis, ti
{
indexPatternId,
layerId,
- columns: result.columns.map(excludeMetaFromColumn),
+ columns: layerConfig.columns.map(excludeMetaFromColumn),
columnOrder: [],
},
],
@@ -89,7 +91,7 @@ export const convertToLens: ConvertMetricVisToLensVisualization = async (vis, ti
layerId,
vis.params,
getPalette(vis.params.metric, percentageModeConfig),
- result
+ layerConfig
),
indexPatternIds: [indexPatternId],
};
diff --git a/src/plugins/vis_types/pie/public/convert_to_lens/configurations/index.test.ts b/src/plugins/vis_types/pie/public/convert_to_lens/configurations/index.test.ts
index 0a10a5bd7c0c0..87ec0d3b57b3f 100644
--- a/src/plugins/vis_types/pie/public/convert_to_lens/configurations/index.test.ts
+++ b/src/plugins/vis_types/pie/public/convert_to_lens/configurations/index.test.ts
@@ -19,7 +19,7 @@ describe('getConfiguration', () => {
expect(
getConfiguration('test1', samplePieVis as any, {
metrics: ['metric-1'],
- buckets: ['bucket-1'],
+ buckets: { all: ['bucket-1'], customBuckets: {} },
})
).toEqual({
layers: [
@@ -55,7 +55,7 @@ describe('getConfiguration', () => {
{ ...samplePieVis, params: { ...samplePieVis.params, legendDisplay: 'hide' } } as any,
{
metrics: ['metric-1'],
- buckets: ['bucket-1'],
+ buckets: { all: ['bucket-1'], customBuckets: {} },
}
)
).toEqual({
@@ -73,7 +73,7 @@ describe('getConfiguration', () => {
{ ...samplePieVis, params: { ...samplePieVis.params, legendDisplay: 'show' } } as any,
{
metrics: ['metric-1'],
- buckets: ['bucket-1'],
+ buckets: { all: ['bucket-1'], customBuckets: {} },
}
)
).toEqual({
@@ -92,7 +92,7 @@ describe('getConfiguration', () => {
{ ...samplePieVis, params: { ...samplePieVis.params, legendDisplay } } as any,
{
metrics: ['metric-1'],
- buckets: ['bucket-1'],
+ buckets: { all: ['bucket-1'], customBuckets: {} },
}
)
).toEqual({
diff --git a/src/plugins/vis_types/pie/public/convert_to_lens/configurations/index.ts b/src/plugins/vis_types/pie/public/convert_to_lens/configurations/index.ts
index 9a3420581c1fd..d1d1daf9fe009 100644
--- a/src/plugins/vis_types/pie/public/convert_to_lens/configurations/index.ts
+++ b/src/plugins/vis_types/pie/public/convert_to_lens/configurations/index.ts
@@ -68,12 +68,15 @@ export const getConfiguration = (
buckets,
}: {
metrics: string[];
- buckets: string[];
+ buckets: {
+ all: string[];
+ customBuckets: Record;
+ };
}
): PartitionVisConfiguration => {
return {
shape: vis.params.isDonut ? 'donut' : 'pie',
- layers: getLayers(layerId, vis, metrics, buckets),
+ layers: getLayers(layerId, vis, metrics, buckets.all),
palette: vis.params.palette,
};
};
diff --git a/src/plugins/vis_types/pie/public/convert_to_lens/index.test.ts b/src/plugins/vis_types/pie/public/convert_to_lens/index.test.ts
index c1e39d741f84d..bf4dfbd3ffc72 100644
--- a/src/plugins/vis_types/pie/public/convert_to_lens/index.test.ts
+++ b/src/plugins/vis_types/pie/public/convert_to_lens/index.test.ts
@@ -40,28 +40,34 @@ describe('convertToLens', () => {
});
test('should return null if more than three split slice levels', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- buckets: ['1', '2', '3', '4'],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ buckets: { all: ['1', '2', '3', '4'] },
+ },
+ ]);
const result = await convertToLens(samplePieVis as any, {} as any);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
});
test('should return null if no one split slices', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- buckets: [],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ buckets: { all: [] },
+ },
+ ]);
const result = await convertToLens(samplePieVis as any, {} as any);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(result).toBeNull();
});
test('should state for valid vis', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- buckets: ['2'],
- columns: [{ columnId: '2' }, { columnId: '1' }],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ buckets: { all: ['2'] },
+ columns: [{ columnId: '2' }, { columnId: '1' }],
+ },
+ ]);
const result = await convertToLens(samplePieVis as any, {} as any);
expect(mockGetColumnsFromVis).toBeCalledTimes(1);
expect(mockGetConfiguration).toBeCalledTimes(1);
diff --git a/src/plugins/vis_types/pie/public/convert_to_lens/index.ts b/src/plugins/vis_types/pie/public/convert_to_lens/index.ts
index 5b1973507c7df..c7231af7098c8 100644
--- a/src/plugins/vis_types/pie/public/convert_to_lens/index.ts
+++ b/src/plugins/vis_types/pie/public/convert_to_lens/index.ts
@@ -44,19 +44,21 @@ export const convertToLens: ConvertPieToLensVisualization = async (vis, timefilt
}
const { getColumnsFromVis } = await convertToLensModule;
- const result = getColumnsFromVis(vis, timefilter, dataView, {
+ const layers = getColumnsFromVis(vis, timefilter, dataView, {
buckets: [],
splits: ['segment'],
unsupported: ['split_row', 'split_column'],
});
- if (result === null) {
+ if (layers === null) {
return null;
}
+ const [layerConfig] = layers;
+
// doesn't support more than three split slice levels
// doesn't support pie without at least one split slice
- if (result.buckets.length > 3 || !result.buckets.length) {
+ if (layerConfig.buckets.all.length > 3 || !layerConfig.buckets.all.length) {
return null;
}
@@ -69,11 +71,11 @@ export const convertToLens: ConvertPieToLensVisualization = async (vis, timefilt
{
indexPatternId,
layerId,
- columns: result.columns.map(excludeMetaFromColumn),
+ columns: layerConfig.columns.map(excludeMetaFromColumn),
columnOrder: [],
},
],
- configuration: getConfiguration(layerId, vis, result),
+ configuration: getConfiguration(layerId, vis, layerConfig),
indexPatternIds: [indexPatternId],
};
};
diff --git a/src/plugins/vis_types/table/public/components/table_vis_options.tsx b/src/plugins/vis_types/table/public/components/table_vis_options.tsx
index 7023716025b21..9d6b1d9a7454c 100644
--- a/src/plugins/vis_types/table/public/components/table_vis_options.tsx
+++ b/src/plugins/vis_types/table/public/components/table_vis_options.tsx
@@ -133,6 +133,7 @@ function TableOptions({
paramName="showTotal"
value={stateParams.showTotal}
setValue={setValue}
+ data-test-subj="showTotal"
/>
{
expect(
getConfiguration('test1', params, {
metrics: ['metric-1'],
- buckets: ['bucket-1'],
+ buckets: { all: ['bucket-1'], customBuckets: { 'metric-1': 'bucket-1' } },
columnsWithoutReferenced: [
{
columnId: 'metric-1',
@@ -48,7 +48,7 @@ describe('getConfiguration', () => {
},
},
],
- bucketCollapseFn: { 'bucket-1': 'sum' },
+ bucketCollapseFn: { sum: ['bucket-1'] },
})
).toEqual({
columns: [
diff --git a/src/plugins/vis_types/table/public/convert_to_lens/configurations/index.ts b/src/plugins/vis_types/table/public/convert_to_lens/configurations/index.ts
index d98cb917b40ac..5079b25258a75 100644
--- a/src/plugins/vis_types/table/public/convert_to_lens/configurations/index.ts
+++ b/src/plugins/vis_types/table/public/convert_to_lens/configurations/index.ts
@@ -12,19 +12,21 @@ import { TableVisParams } from '../../../common';
const getColumns = (
params: TableVisParams,
metrics: string[],
- buckets: string[],
columns: Column[],
- bucketCollapseFn?: Record
+ bucketCollapseFn?: Record
) => {
const { showTotal, totalFunc } = params;
- return columns.map(({ columnId }) => ({
- columnId,
- alignment: 'left' as const,
- ...(showTotal && metrics.includes(columnId) ? { summaryRow: totalFunc } : {}),
- ...(bucketCollapseFn && bucketCollapseFn[columnId]
- ? { collapseFn: bucketCollapseFn[columnId] }
- : {}),
- }));
+ return columns.map(({ columnId }) => {
+ const collapseFn = bucketCollapseFn
+ ? Object.keys(bucketCollapseFn).find((key) => bucketCollapseFn[key].includes(columnId))
+ : undefined;
+ return {
+ columnId,
+ alignment: 'left' as const,
+ ...(showTotal && metrics.includes(columnId) ? { summaryRow: totalFunc } : {}),
+ ...(collapseFn ? { collapseFn } : {}),
+ };
+ });
};
const getPagination = ({ perPage }: TableVisParams): PagingState => {
@@ -54,15 +56,18 @@ export const getConfiguration = (
bucketCollapseFn,
}: {
metrics: string[];
- buckets: string[];
+ buckets: {
+ all: string[];
+ customBuckets: Record;
+ };
columnsWithoutReferenced: Column[];
- bucketCollapseFn?: Record;
+ bucketCollapseFn?: Record;
}
): TableVisConfiguration => {
return {
layerId,
layerType: 'data',
- columns: getColumns(params, metrics, buckets, columnsWithoutReferenced, bucketCollapseFn),
+ columns: getColumns(params, metrics, columnsWithoutReferenced, bucketCollapseFn),
paging: getPagination(params),
...getRowHeight(params),
};
diff --git a/src/plugins/vis_types/table/public/convert_to_lens/index.test.ts b/src/plugins/vis_types/table/public/convert_to_lens/index.test.ts
index 5c1ad0578be11..f11f18f754eb9 100644
--- a/src/plugins/vis_types/table/public/convert_to_lens/index.test.ts
+++ b/src/plugins/vis_types/table/public/convert_to_lens/index.test.ts
@@ -63,14 +63,16 @@ describe('convertToLens', () => {
});
test('should return null if can not build percentage column', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- buckets: ['2'],
- columns: [{ columnId: '2' }, { columnId: '1' }],
- columnsWithoutReferenced: [
- { columnId: '1', meta: { aggId: 'agg-1' } },
- { columnId: '2', meta: { aggId: 'agg-2' } },
- ],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ buckets: { all: ['2'] },
+ columns: [{ columnId: '2' }, { columnId: '1' }],
+ columnsWithoutReferenced: [
+ { columnId: '1', meta: { aggId: 'agg-1' } },
+ { columnId: '2', meta: { aggId: 'agg-2' } },
+ ],
+ },
+ ]);
mockGetVisSchemas.mockReturnValue({
metric: [{ label: 'Count', aggId: 'agg-1' }],
});
@@ -83,14 +85,16 @@ describe('convertToLens', () => {
});
test('should return correct state for valid vis', async () => {
- mockGetColumnsFromVis.mockReturnValue({
- buckets: ['2'],
- columns: [{ columnId: '2' }, { columnId: '1' }],
- columnsWithoutReferenced: [
- { columnId: '1', meta: { aggId: 'agg-1' } },
- { columnId: '2', meta: { aggId: 'agg-2' } },
- ],
- });
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ buckets: { all: ['2'] },
+ columns: [{ columnId: '2' }, { columnId: '1' }],
+ columnsWithoutReferenced: [
+ { columnId: '1', meta: { aggId: 'agg-1' } },
+ { columnId: '2', meta: { aggId: 'agg-2' } },
+ ],
+ },
+ ]);
mockGetVisSchemas.mockReturnValue({
metric: [{ label: 'Count', aggId: 'agg-1' }],
});
diff --git a/src/plugins/vis_types/table/public/convert_to_lens/index.ts b/src/plugins/vis_types/table/public/convert_to_lens/index.ts
index 1b37e36f1d982..e69faccbfd7ec 100644
--- a/src/plugins/vis_types/table/public/convert_to_lens/index.ts
+++ b/src/plugins/vis_types/table/public/convert_to_lens/index.ts
@@ -46,7 +46,7 @@ export const convertToLens: ConvertTableToLensVisualization = async (vis, timefi
}
const { getColumnsFromVis, getPercentageColumnFormulaColumn } = await convertToLensModule;
- const result = getColumnsFromVis(
+ const layers = getColumnsFromVis(
vis,
timefilter,
dataView,
@@ -57,10 +57,12 @@ export const convertToLens: ConvertTableToLensVisualization = async (vis, timefi
{ dropEmptyRowsInDateHistogram: true, isPercentageMode: false }
);
- if (result === null) {
+ if (layers === null) {
return null;
}
+ const [layerConfig] = layers;
+
if (vis.params.percentageCol) {
const visSchemas = getVisSchemas(vis, {
timefilter,
@@ -78,12 +80,12 @@ export const convertToLens: ConvertTableToLensVisualization = async (vis, timefi
if (!percentageColumn) {
return null;
}
- result.columns.splice(
- result.columnsWithoutReferenced.findIndex((c) => c.meta.aggId === metricAgg.aggId) + 1,
+ layerConfig.columns.splice(
+ layerConfig.columnsWithoutReferenced.findIndex((c) => c.meta.aggId === metricAgg.aggId) + 1,
0,
percentageColumn
);
- result.columnsWithoutReferenced.push(percentageColumn);
+ layerConfig.columnsWithoutReferenced.push(percentageColumn);
}
const layerId = uuid();
@@ -94,11 +96,11 @@ export const convertToLens: ConvertTableToLensVisualization = async (vis, timefi
{
indexPatternId,
layerId,
- columns: result.columns.map(excludeMetaFromColumn),
+ columns: layerConfig.columns.map(excludeMetaFromColumn),
columnOrder: [],
},
],
- configuration: getConfiguration(layerId, vis.params, result),
+ configuration: getConfiguration(layerId, vis.params, layerConfig),
indexPatternIds: [indexPatternId],
};
};
diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/index.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/index.ts
index b1b15339b37a6..dc4005c6649c1 100644
--- a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/index.ts
+++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/index.ts
@@ -31,5 +31,6 @@ export { convertToDateHistogramColumn } from './date_histogram';
export { convertToTermsColumn } from './terms';
export { convertToCounterRateColumn } from './counter_rate';
export { convertToStandartDeviationColumn } from './std_deviation';
+export { convertVarianceToFormulaColumn } from './variance';
export * from './types';
diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/parent_pipeline.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/parent_pipeline.ts
index 522585c5c568a..2fcba37bf0d03 100644
--- a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/parent_pipeline.ts
+++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/parent_pipeline.ts
@@ -237,7 +237,11 @@ const convertMovingAvgOrDerivativeToColumns = (
const [nestedFieldId, _] = subMetricField?.split('[') ?? [];
// support nested aggs with formula
const additionalSubFunction = metrics.find(({ id }) => id === nestedFieldId);
- if (additionalSubFunction || pipelineAgg.name === 'counter_rate') {
+ if (
+ additionalSubFunction ||
+ pipelineAgg.name === 'counter_rate' ||
+ subFunctionMetric.type === 'variance'
+ ) {
const formula = getPipelineSeriesFormula(metric, metrics, subFunctionMetric, {
metaValue,
reducedTimeRange,
diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/variance.test.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/variance.test.ts
new file mode 100644
index 0000000000000..e4695f23b742e
--- /dev/null
+++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/variance.test.ts
@@ -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 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 { stubLogstashDataView } from '@kbn/data-views-plugin/common/data_view.stub';
+import { createSeries } from '../__mocks__';
+import { FormulaColumn } from './types';
+import { Metric } from '../../../../common/types';
+import { TSVB_METRIC_TYPES } from '../../../../common/enums';
+import { convertVarianceToFormulaColumn } from './variance';
+
+describe('convertVarianceToFormulaColumn', () => {
+ const series = createSeries();
+ const dataView = stubLogstashDataView;
+ const metric: Metric = {
+ id: 'some-id',
+ type: TSVB_METRIC_TYPES.VARIANCE,
+ };
+ const field = dataView.fields[0].name;
+
+ test.each<
+ [string, Parameters, Partial | null]
+ >([
+ ['null if field is not provided', [{ series, metrics: [metric], dataView }], null],
+ [
+ 'correct formula column',
+ [{ series, metrics: [{ ...metric, field }], dataView }],
+ {
+ meta: { metricId: 'some-id' },
+ operationType: 'formula',
+ params: {
+ formula: 'pow(standard_deviation(bytes), 2)',
+ },
+ },
+ ],
+ ])('should return %s', (_, input, expected) => {
+ if (expected === null) {
+ expect(convertVarianceToFormulaColumn(...input)).toBeNull();
+ } else {
+ expect(convertVarianceToFormulaColumn(...input)).toEqual(expect.objectContaining(expected));
+ }
+ });
+});
diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/variance.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/variance.ts
new file mode 100644
index 0000000000000..920317e65c224
--- /dev/null
+++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/convert/variance.ts
@@ -0,0 +1,30 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 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 { getFormulaEquivalent } from '../metrics';
+import { createFormulaColumn } from './formula';
+import { CommonColumnsConverterArgs } from './types';
+
+export const convertVarianceToFormulaColumn = (
+ { series, metrics, dataView }: CommonColumnsConverterArgs,
+ reducedTimeRange?: string
+) => {
+ const metric = metrics[metrics.length - 1];
+
+ const field = metric.field ? dataView.getFieldByName(metric.field) : undefined;
+ if (!field) {
+ return null;
+ }
+
+ const script = getFormulaEquivalent(metric, metrics, {
+ reducedTimeRange,
+ timeShift: series.offset_time,
+ });
+ if (!script) return null;
+ return createFormulaColumn(script, { series, metric, dataView });
+};
diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/metrics_helpers.test.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/metrics_helpers.test.ts
index 447312786ee02..944727505f682 100644
--- a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/metrics_helpers.test.ts
+++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/metrics_helpers.test.ts
@@ -62,6 +62,12 @@ describe('getFormulaEquivalent', () => {
mode: 'upper',
};
+ const variance: Metric = {
+ id: 'some-random-value',
+ type: TSVB_METRIC_TYPES.VARIANCE,
+ field: 'test-1',
+ };
+
const sibblingPipelineMetric: Metric[] = [
{
id: 'test-1',
@@ -141,6 +147,11 @@ describe('getFormulaEquivalent', () => {
[stdDeviationMetricWithUpperMode, [stdDeviationMetricWithUpperMode], {}],
'average(test-1) + 1.5 * standard_deviation(test-1)',
],
+ [
+ 'correct formula if metric is variance',
+ [variance, [variance], {}],
+ 'pow(standard_deviation(test-1), 2)',
+ ],
[
'correct formula if metric is supported',
[supportedMetric, [supportedMetric], {}],
diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/metrics_helpers.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/metrics_helpers.ts
index eda3ec437fc8a..8d970f2f7262d 100644
--- a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/metrics_helpers.ts
+++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/metrics_helpers.ts
@@ -144,6 +144,12 @@ export const getFormulaEquivalent = (
case 'static': {
return `${currentMetric.value}`;
}
+ case 'variance': {
+ return `${aggFormula}(standard_deviation(${currentMetric.field}${addAdditionalArgs({
+ reducedTimeRange,
+ timeShift,
+ })}), 2)`;
+ }
case 'std_deviation': {
if (currentMetric.mode === 'lower') {
return `average(${currentMetric.field}${addAdditionalArgs({
diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/supported_metrics.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/supported_metrics.ts
index 8be4b444be099..debe064940c8e 100644
--- a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/supported_metrics.ts
+++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/metrics/supported_metrics.ts
@@ -55,6 +55,7 @@ interface LocalSupportedMetrics {
[TSVB_METRIC_TYPES.STATIC]: Metric;
[TSVB_METRIC_TYPES.POSITIVE_RATE]: Metric;
[TSVB_METRIC_TYPES.MOVING_AVERAGE]: Metric;
+ [TSVB_METRIC_TYPES.VARIANCE]: Metric;
}
type UnsupportedSupportedMetrics = Exclude;
@@ -250,6 +251,15 @@ export const SUPPORTED_METRICS: SupportedMetrics = {
supportedPanelTypes,
supportedTimeRangeModes,
},
+ variance: {
+ name: 'formula',
+ isFormula: true,
+ formula: 'pow',
+ isFullReference: false,
+ isFieldRequired: true,
+ supportedPanelTypes,
+ supportedTimeRangeModes,
+ },
} as const;
type SupportedMetricsKeys = keyof LocalSupportedMetrics;
diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/series/metrics_columns.test.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/series/metrics_columns.test.ts
index 4461072c8df62..58cf955dab83a 100644
--- a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/series/metrics_columns.test.ts
+++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/series/metrics_columns.test.ts
@@ -23,6 +23,7 @@ const mockConvertToStaticValueColumn = jest.fn();
const mockConvertStaticValueToFormulaColumn = jest.fn();
const mockConvertToStandartDeviationColumn = jest.fn();
const mockConvertMetricAggregationColumnWithoutSpecialParams = jest.fn();
+const mockConvertVarianceToFormulaColumn = jest.fn();
jest.mock('../convert', () => ({
convertMathToFormulaColumn: jest.fn(() => mockConvertMathToFormulaColumn()),
@@ -38,6 +39,7 @@ jest.mock('../convert', () => ({
convertMetricAggregationColumnWithoutSpecialParams: jest.fn(() =>
mockConvertMetricAggregationColumnWithoutSpecialParams()
),
+ convertVarianceToFormulaColumn: jest.fn(() => mockConvertVarianceToFormulaColumn()),
}));
describe('getMetricsColumns', () => {
@@ -163,6 +165,11 @@ describe('getMetricsColumns', () => {
],
mockConvertToStandartDeviationColumn,
],
+ [
+ 'call convertVarianceToFormulaColumn if metric type is variance',
+ [createSeries({ metrics: [{ type: TSVB_METRIC_TYPES.VARIANCE, id: '1' }] }), dataView, 1],
+ mockConvertVarianceToFormulaColumn,
+ ],
[
'call convertMetricAggregationColumnWithoutSpecialParams if metric type is another supported type',
[createSeries({ metrics: [{ type: METRIC_TYPES.AVG, id: '1' }] }), dataView, 1],
diff --git a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/series/metrics_columns.ts b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/series/metrics_columns.ts
index 8f7d4ded0d076..6ec978e4a685a 100644
--- a/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/series/metrics_columns.ts
+++ b/src/plugins/vis_types/timeseries/public/convert_to_lens/lib/series/metrics_columns.ts
@@ -25,6 +25,7 @@ import {
convertMetricAggregationColumnWithoutSpecialParams,
convertToCounterRateColumn,
convertToStandartDeviationColumn,
+ convertVarianceToFormulaColumn,
} from '../convert';
import { getValidColumns } from './columns';
@@ -120,6 +121,10 @@ export const getMetricsColumns = (
const column = convertToLastValueColumn(columnsConverterArgs, reducedTimeRange);
return getValidColumns(column);
}
+ case 'variance': {
+ const column = convertVarianceToFormulaColumn(columnsConverterArgs, reducedTimeRange);
+ return getValidColumns(column);
+ }
case 'static': {
const column = isStaticValueColumnSupported
? convertToStaticValueColumn(columnsConverterArgs, {
diff --git a/src/plugins/vis_types/xy/kibana.json b/src/plugins/vis_types/xy/kibana.json
index fa942c1530142..474a70431fc73 100644
--- a/src/plugins/vis_types/xy/kibana.json
+++ b/src/plugins/vis_types/xy/kibana.json
@@ -3,7 +3,7 @@
"version": "kibana",
"ui": true,
"server": true,
- "requiredPlugins": ["charts", "visualizations", "data", "expressions"],
+ "requiredPlugins": ["charts", "visualizations", "data", "expressions", "dataViews"],
"requiredBundles": ["kibanaUtils", "visDefaultEditor"],
"extraPublicDirs": ["common/index"],
"owner": {
diff --git a/src/plugins/vis_types/xy/public/convert_to_lens/configurations/index.test.ts b/src/plugins/vis_types/xy/public/convert_to_lens/configurations/index.test.ts
new file mode 100644
index 0000000000000..2d8c7da9ba801
--- /dev/null
+++ b/src/plugins/vis_types/xy/public/convert_to_lens/configurations/index.test.ts
@@ -0,0 +1,160 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import { Column } from '@kbn/visualizations-plugin/common/convert_to_lens';
+import { getConfiguration } from '.';
+import { Layer } from '..';
+import { ChartType } from '../..';
+import { sampleAreaVis } from '../../sample_vis.test.mocks';
+import { ChartMode, InterpolationMode } from '../../types';
+
+describe('getConfiguration', () => {
+ const layers: Layer[] = [
+ {
+ indexPatternId: '',
+ layerId: 'layer-1',
+ columns: [
+ { columnId: '1', isBucketed: false },
+ { columnId: '2', isBucketed: true, isSplit: false, operationType: 'date_histogram' },
+ { columnId: '3', isBucketed: true, isSplit: true },
+ ] as Column[],
+ metrics: ['1'],
+ columnOrder: [],
+ seriesIdsMap: { 1: '1' },
+ collapseFn: 'max',
+ isReferenceLineLayer: false,
+ },
+ {
+ indexPatternId: '',
+ layerId: 'layer-2',
+ columns: [
+ { columnId: '4', isBucketed: false },
+ { columnId: '5', isBucketed: true, isSplit: false, operationType: 'date_histogram' },
+ ] as Column[],
+ metrics: ['4'],
+ columnOrder: [],
+ seriesIdsMap: { 4: '2' },
+ collapseFn: undefined,
+ isReferenceLineLayer: false,
+ },
+ {
+ indexPatternId: '',
+ layerId: 'layer-3',
+ columns: [{ columnId: '7', isBucketed: false }] as Column[],
+ columnOrder: [],
+ metrics: ['7'],
+ seriesIdsMap: {},
+ collapseFn: undefined,
+ isReferenceLineLayer: true,
+ },
+ ];
+ const series = [
+ {
+ show: true,
+ type: ChartType.Area,
+ mode: ChartMode.Stacked,
+ data: {
+ label: 'Sum of total_quantity',
+ id: '1',
+ },
+ drawLinesBetweenPoints: true,
+ showCircles: true,
+ circlesRadius: 5,
+ interpolate: InterpolationMode.Linear,
+ valueAxis: 'ValueAxis-1',
+ },
+ {
+ show: true,
+ type: ChartType.Line,
+ mode: ChartMode.Stacked,
+ data: {
+ label: 'Sum of total_quantity 1',
+ id: '2',
+ },
+ drawLinesBetweenPoints: true,
+ showCircles: true,
+ circlesRadius: 5,
+ interpolate: InterpolationMode.Linear,
+ valueAxis: 'ValueAxis-1',
+ },
+ ];
+
+ test('should return correct configuration', () => {
+ expect(getConfiguration(layers, series, sampleAreaVis as any)).toEqual({
+ axisTitlesVisibilitySettings: { x: true, yLeft: true, yRight: true },
+ curveType: 'LINEAR',
+ fillOpacity: 0.5,
+ fittingFunction: undefined,
+ gridlinesVisibilitySettings: { x: false, yLeft: false, yRight: true },
+ labelsOrientation: { x: -0, yLeft: -0, yRight: -90 },
+ layers: [
+ {
+ accessors: ['1'],
+ collapseFn: 'max',
+ isHistogram: true,
+ layerId: 'layer-1',
+ layerType: 'data',
+ palette: { name: 'default' },
+ seriesType: 'area_stacked',
+ simpleView: false,
+ splitAccessor: '3',
+ xAccessor: '2',
+ xScaleType: 'ordinal',
+ yConfig: [{ axisMode: 'left', forAccessor: '1' }],
+ },
+ {
+ accessors: ['4'],
+ collapseFn: undefined,
+ isHistogram: true,
+ layerId: 'layer-2',
+ layerType: 'data',
+ palette: { name: 'default' },
+ seriesType: 'area_stacked',
+ simpleView: false,
+ splitAccessor: undefined,
+ xAccessor: '5',
+ xScaleType: 'ordinal',
+ yConfig: [{ axisMode: 'left', forAccessor: '4' }],
+ },
+ {
+ accessors: ['7'],
+ layerId: 'layer-3',
+ layerType: 'referenceLine',
+ yConfig: [
+ {
+ axisMode: 'left',
+ color: '#E7664C',
+ forAccessor: '7',
+ lineStyle: 'solid',
+ lineWidth: 1,
+ },
+ ],
+ },
+ ],
+ legend: {
+ isVisible: true,
+ legendSize: 'small',
+ maxLines: 1,
+ position: 'top',
+ shouldTruncate: true,
+ showSingleSeries: true,
+ },
+ tickLabelsVisibilitySettings: { x: true, yLeft: true, yRight: true },
+ valueLabels: 'hide',
+ valuesInLegend: false,
+ xTitle: undefined,
+ yLeftExtent: { enforce: true, lowerBound: undefined, mode: 'full', upperBound: undefined },
+ yLeftScale: 'linear',
+ yRightExtent: undefined,
+ yRightScale: 'linear',
+ yRightTitle: undefined,
+ yTitle: 'Sum of total_quantity',
+ showCurrentTimeMarker: false,
+ });
+ });
+});
diff --git a/src/plugins/vis_types/xy/public/convert_to_lens/configurations/index.ts b/src/plugins/vis_types/xy/public/convert_to_lens/configurations/index.ts
new file mode 100644
index 0000000000000..fa9cc01c6a7ca
--- /dev/null
+++ b/src/plugins/vis_types/xy/public/convert_to_lens/configurations/index.ts
@@ -0,0 +1,277 @@
+/*
+ * 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 { Position, ScaleType as ECScaleType } from '@elastic/charts';
+import {
+ SeriesTypes,
+ Column,
+ XYConfiguration,
+ XYDataLayerConfig,
+ XYReferenceLineLayerConfig,
+} from '@kbn/visualizations-plugin/common/convert_to_lens';
+import { Vis } from '@kbn/visualizations-plugin/public';
+import { Layer } from '..';
+import { ChartType } from '../../../common';
+import {
+ CategoryAxis,
+ ChartMode,
+ InterpolationMode,
+ Scale,
+ ScaleType,
+ SeriesParam,
+ ValueAxis,
+ VisParams,
+} from '../../types';
+import { getCurveType, getLineStyle, getMode, getYAxisPosition } from '../../utils/common';
+
+function getYScaleType(scale?: Scale): XYConfiguration['yLeftScale'] | undefined {
+ const type = scale?.type;
+ if (type === ScaleType.SquareRoot) {
+ return ECScaleType.Sqrt;
+ }
+
+ return type;
+}
+
+function getXScaleType(xColumn?: Column) {
+ if (xColumn?.dataType === 'date') return ECScaleType.Time;
+
+ if (xColumn?.dataType !== 'number') {
+ return ECScaleType.Ordinal;
+ }
+
+ return ECScaleType.Linear;
+}
+
+function getLabelOrientation(data?: CategoryAxis, isTimeChart = false) {
+ // lens doesn't support 75 as rotate option, we should use 45 instead
+ return -(data?.labels.rotate === 75 ? 45 : data?.labels.rotate ?? (isTimeChart ? 0 : 90));
+}
+
+function getExtents(axis: ValueAxis, series: SeriesParam[]) {
+ // for area and bar charts we should include 0 to bounds
+ const isAssignedToAreaOrBar = series.some(
+ (s) => s.valueAxis === axis.id && (s.type === 'histogram' || s.type === 'area')
+ );
+ return {
+ mode: getMode(axis.scale),
+ lowerBound:
+ axis.scale.min !== null
+ ? isAssignedToAreaOrBar && axis.scale.min && axis.scale.min > 0
+ ? 0
+ : axis.scale.min
+ : undefined,
+ upperBound:
+ axis.scale.max !== null
+ ? isAssignedToAreaOrBar && axis.scale.max && axis.scale.max < 0
+ ? 0
+ : axis.scale.max
+ : undefined,
+ enforce: true,
+ };
+}
+
+function getSeriesType(
+ type?: ChartType,
+ mode?: ChartMode,
+ isHorizontal?: boolean,
+ isPercentage?: boolean
+): XYDataLayerConfig['seriesType'] {
+ let seriesType: XYDataLayerConfig['seriesType'] =
+ type === 'histogram' ? SeriesTypes.BAR : type ?? SeriesTypes.AREA;
+
+ // only bar chart supports horizontal mode
+ if (isHorizontal && seriesType === SeriesTypes.BAR) {
+ seriesType = (seriesType + '_horizontal') as XYDataLayerConfig['seriesType'];
+ }
+
+ // line percentage should convert to area percentage
+ if (isPercentage) {
+ seriesType = ((seriesType !== SeriesTypes.LINE ? seriesType : SeriesTypes.AREA) +
+ '_percentage') as XYDataLayerConfig['seriesType'];
+ }
+
+ // percentage chart should be stacked
+ // line stacked should convert to area stacked
+ if (isPercentage || mode === 'stacked') {
+ seriesType = ((seriesType !== SeriesTypes.LINE ? seriesType : SeriesTypes.AREA) +
+ '_stacked') as XYDataLayerConfig['seriesType'];
+ }
+
+ return seriesType;
+}
+
+function getDataLayers(
+ layers: Layer[],
+ series: SeriesParam[],
+ vis: Vis
+): XYDataLayerConfig[] {
+ const overwriteColors: Record = vis.uiState.get('vis.colors', {});
+ return layers.map((layer) => {
+ const xColumn = layer.columns.find((c) => c.isBucketed && !c.isSplit);
+ const splitAccessor = layer.columns.find(
+ (column) => column.isBucketed && column.isSplit
+ )?.columnId;
+ // as type and mode will be the same for all metrics we can use first to define it
+ const firstSeries = series.find((s) => s.data.id === layer.seriesIdsMap[layer.metrics[0]]);
+ const isHistogram =
+ xColumn?.operationType === 'date_histogram' ||
+ (xColumn?.operationType === 'range' && xColumn.params.type === 'histogram');
+ const firstYAxis = (vis.params.valueAxes ?? vis.type.visConfig.defaults.valueAxes).find(
+ (axis) => axis.id === firstSeries?.valueAxis
+ );
+ const isPercentage = firstYAxis?.scale.mode === 'percentage';
+ const isHorizontal =
+ firstYAxis?.position !== Position.Left && firstYAxis?.position !== Position.Right;
+ const seriesType = getSeriesType(
+ firstSeries?.type,
+ firstSeries?.mode,
+ isHorizontal,
+ isPercentage
+ );
+
+ return {
+ layerId: layer.layerId,
+ accessors: layer.metrics,
+ layerType: 'data',
+ seriesType,
+ xAccessor: xColumn?.columnId,
+ simpleView: false,
+ splitAccessor,
+ palette: vis.params.palette ?? vis.type.visConfig.defaults.palette,
+ yConfig: layer.metrics.map((metricId) => {
+ const serie = series.find((s) => s.data.id === layer.seriesIdsMap[metricId]);
+ const yAxis = (vis.params.valueAxes ?? vis.type.visConfig.defaults.valueAxes).find(
+ (axis) => axis.id === serie?.valueAxis
+ );
+ return {
+ forAccessor: metricId,
+ axisMode: getYAxisPosition(yAxis?.position ?? 'left'),
+ color:
+ !splitAccessor && serie?.data.label ? overwriteColors[serie?.data.label] : undefined,
+ };
+ }),
+ xScaleType: getXScaleType(xColumn),
+ isHistogram,
+ collapseFn: layer.collapseFn,
+ };
+ });
+}
+
+function getReferenceLineLayers(
+ layers: Layer[],
+ vis: Vis
+): XYReferenceLineLayerConfig[] {
+ const thresholdLineConfig = vis.params.thresholdLine ?? vis.type.visConfig.defaults.thresholdLine;
+ // threshold line is always assigned to the first value axis
+ const yAxis = (vis.params.valueAxes ?? vis.type.visConfig.defaults.valueAxes)[0];
+ return layers.map((layer) => {
+ return {
+ layerType: 'referenceLine',
+ layerId: layer.layerId,
+ accessors: layer.metrics,
+ yConfig: layer.metrics.map((metricId) => {
+ return {
+ forAccessor: metricId,
+ axisMode: getYAxisPosition(yAxis?.position ?? 'left'),
+ color: thresholdLineConfig.color,
+ lineWidth: thresholdLineConfig.width !== null ? thresholdLineConfig.width : undefined,
+ lineStyle: getLineStyle(thresholdLineConfig.style),
+ };
+ }),
+ };
+ });
+}
+
+export const getConfiguration = (
+ layers: Layer[],
+ series: SeriesParam[],
+ vis: Vis
+): XYConfiguration => {
+ const legendDisplayFromUiState = vis.uiState.get('vis.legendOpen') ?? true;
+ const yRightAxis = (vis.params.valueAxes ?? vis.type.visConfig.defaults.valueAxes).find(
+ (axis) => getYAxisPosition(axis.position) === Position.Right
+ );
+ const yLeftAxis = (vis.params.valueAxes ?? vis.type.visConfig.defaults.valueAxes).find(
+ (axis) => getYAxisPosition(axis.position) === Position.Left
+ );
+ // as we have only one x-axis
+ const xAxis = (vis.params.categoryAxes ?? vis.type.visConfig.defaults.categoryAxes)[0];
+ const axisTitlesVisibilitySettings = {
+ x: xAxis.show,
+ yLeft: yLeftAxis?.show ?? true,
+ yRight: yRightAxis?.show ?? true,
+ };
+ const xColumn = layers[0].columns.find((c) => c.isBucketed && !c.isSplit);
+ const isTimeChart = xColumn?.operationType === 'date_histogram';
+ const fittingFunction = vis.params.fittingFunction ?? vis.type.visConfig.defaults.fittingFunction;
+ return {
+ layers: [
+ ...getDataLayers(
+ layers.filter((l) => !l.isReferenceLineLayer),
+ series,
+ vis
+ ),
+ ...getReferenceLineLayers(
+ layers.filter((l) => l.isReferenceLineLayer),
+ vis
+ ),
+ ],
+ legend: {
+ isVisible:
+ legendDisplayFromUiState && (vis.params.addLegend ?? vis.type.visConfig.defaults.addLegend),
+ position: vis.params.legendPosition ?? vis.type.visConfig.defaults.legendPosition,
+ legendSize: vis.params.legendSize ?? vis.type.visConfig.defaults.legendSize,
+ shouldTruncate: vis.params.truncateLegend ?? vis.type.visConfig.defaults.truncateLegend,
+ maxLines: vis.params.maxLegendLines ?? vis.type.visConfig.defaults.maxLegendLines,
+ showSingleSeries: true,
+ },
+ fittingFunction: fittingFunction
+ ? fittingFunction[0].toUpperCase() + fittingFunction.slice(1)
+ : undefined,
+ fillOpacity: vis.params.fillOpacity ?? vis.type.visConfig.defaults.fillOpacity,
+ gridlinesVisibilitySettings: {
+ x: vis.params.grid.categoryLines ?? vis.type.visConfig.defaults.grid?.categoryLines,
+ yLeft:
+ (vis.params.grid.valueAxis ?? vis.type.visConfig.defaults.grid?.valueAxis) ===
+ yLeftAxis?.id,
+ yRight:
+ (vis.params.grid.valueAxis ?? vis.type.visConfig.defaults.grid?.valueAxis) ===
+ yRightAxis?.id,
+ },
+ axisTitlesVisibilitySettings,
+ tickLabelsVisibilitySettings: {
+ x: axisTitlesVisibilitySettings.x && (xAxis.labels.show ?? true),
+ yLeft: axisTitlesVisibilitySettings.yLeft && (yLeftAxis?.labels.show ?? true),
+ yRight: axisTitlesVisibilitySettings.yRight && (yRightAxis?.labels.show ?? true),
+ },
+ labelsOrientation: {
+ x: getLabelOrientation(xAxis, isTimeChart),
+ yLeft: getLabelOrientation(yLeftAxis),
+ yRight: getLabelOrientation(yRightAxis),
+ },
+ yLeftScale: getYScaleType(yLeftAxis?.scale) ?? ECScaleType.Linear,
+ yRightScale: getYScaleType(yRightAxis?.scale) ?? ECScaleType.Linear,
+ yLeftExtent: yLeftAxis?.scale ? getExtents(yLeftAxis, series) : undefined,
+ yRightExtent: yRightAxis?.scale ? getExtents(yRightAxis, series) : undefined,
+ yTitle: yLeftAxis?.title.text,
+ yRightTitle: yRightAxis?.title.text,
+ xTitle: xAxis.title.text,
+ valueLabels:
+ vis.params.labels.show ?? vis.type.visConfig.defaults.labels?.show ? 'show' : 'hide',
+ valuesInLegend: Boolean(vis.params.labels.show ?? vis.type.visConfig.defaults.labels?.show),
+ showCurrentTimeMarker: isTimeChart
+ ? Boolean(vis.params.addTimeMarker ?? vis.type.visConfig.defaults.addTimeMarker)
+ : undefined,
+ curveType: getCurveType(
+ series[0].interpolate === InterpolationMode.StepAfter
+ ? InterpolationMode.Linear
+ : series[0].interpolate
+ ),
+ };
+};
diff --git a/src/plugins/vis_types/xy/public/convert_to_lens/index.test.ts b/src/plugins/vis_types/xy/public/convert_to_lens/index.test.ts
new file mode 100644
index 0000000000000..c77794e22ab78
--- /dev/null
+++ b/src/plugins/vis_types/xy/public/convert_to_lens/index.test.ts
@@ -0,0 +1,202 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 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 { convertToLens } from '.';
+import { sampleAreaVis } from '../sample_vis.test.mocks';
+
+const mockGetColumnsFromVis = jest.fn();
+const mockCreateStaticValueColumn = jest.fn().mockReturnValue({ operationType: 'static_value' });
+const mockGetVisSchemas = jest.fn().mockReturnValue({
+ metric: [{ aggId: '1' }],
+});
+const mockGetConfiguration = jest.fn().mockReturnValue({});
+
+jest.mock('../services', () => ({
+ getDataViewsStart: jest.fn(() => ({ get: () => ({}), getDefault: () => ({}) })),
+}));
+
+jest.mock('../utils/get_series_params', () => ({
+ getSeriesParams: jest.fn(() => undefined),
+}));
+
+jest.mock('@kbn/visualizations-plugin/public', () => ({
+ convertToLensModule: Promise.resolve({
+ getColumnsFromVis: jest.fn(() => mockGetColumnsFromVis()),
+ createStaticValueColumn: jest.fn(() => mockCreateStaticValueColumn()),
+ }),
+ getDataViewByIndexPatternId: jest.fn(() => ({ id: 'index-pattern' })),
+ getVisSchemas: jest.fn(() => mockGetVisSchemas()),
+}));
+
+jest.mock('./configurations', () => ({
+ getConfiguration: jest.fn(() => mockGetConfiguration()),
+}));
+
+describe('convertToLens', () => {
+ afterEach(() => {
+ jest.clearAllMocks();
+ });
+
+ test('should return null if getColumnsFromVis returns null', async () => {
+ mockGetColumnsFromVis.mockReturnValue(null);
+ const result = await convertToLens(sampleAreaVis as any, { getAbsoluteTime: () => {} } as any);
+ expect(mockGetColumnsFromVis).toBeCalledTimes(1);
+ expect(result).toBeNull();
+ });
+
+ test('should return null if multi split series defined', async () => {
+ mockGetVisSchemas.mockReturnValue({
+ metric: [{ aggId: '1' }],
+ group: [{}, {}],
+ });
+ const result = await convertToLens(sampleAreaVis as any, { getAbsoluteTime: () => {} } as any);
+ expect(mockGetVisSchemas).toBeCalledTimes(1);
+ expect(result).toBeNull();
+ });
+
+ test('should return null if sibling pipeline agg defined together with split series', async () => {
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ buckets: { all: ['1'], customBuckets: { metric1: '2' } },
+ },
+ ]);
+ mockGetVisSchemas.mockReturnValue({
+ metric: [{ aggId: '1' }],
+ group: [{}],
+ });
+ const result = await convertToLens(sampleAreaVis as any, { getAbsoluteTime: () => {} } as any);
+ expect(mockGetColumnsFromVis).toBeCalledTimes(1);
+ expect(result).toBeNull();
+ });
+
+ test('should return null if defined several layers with terms split series which uses one of the metrics as order agg', async () => {
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ buckets: { all: ['1'], customBuckets: { metric1: '2' } },
+ columns: [{ isSplit: true, params: { orderBy: { type: 'column' } } }],
+ },
+ {
+ buckets: { all: ['2'], customBuckets: { metric1: '2' } },
+ columns: [{}],
+ },
+ ]);
+ mockGetVisSchemas.mockReturnValue({
+ metric: [{ aggId: '1' }, { aggId: '2' }],
+ });
+ const result = await convertToLens(sampleAreaVis as any, { getAbsoluteTime: () => {} } as any);
+ expect(mockGetColumnsFromVis).toBeCalledTimes(1);
+ expect(result).toBeNull();
+ });
+
+ test('should return null if more than one axis left/right/top/bottom defined', async () => {
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ buckets: { all: ['1'], customBuckets: {} },
+ columns: [],
+ },
+ ]);
+ mockGetVisSchemas.mockReturnValue({
+ metric: [{ aggId: '1' }, { aggId: '2' }],
+ });
+ const result = await convertToLens(
+ {
+ ...sampleAreaVis,
+ params: {
+ ...sampleAreaVis.params,
+ valueAxes: [
+ ...sampleAreaVis.params.valueAxes,
+ {
+ id: 'ValueAxis-2',
+ name: 'LeftAxis-2',
+ type: 'value',
+ position: 'left',
+ data: {
+ id: '2',
+ },
+ },
+ ],
+ seriesParams: [
+ ...sampleAreaVis.params.seriesParams,
+ { show: true, valueAxis: 'ValueAxis-2', data: { id: '2' } },
+ ],
+ },
+ } as any,
+ { getAbsoluteTime: () => {} } as any
+ );
+ expect(mockGetColumnsFromVis).toBeCalledTimes(1);
+ expect(result).toBeNull();
+ });
+
+ test('should state for valid vis', async () => {
+ mockGetColumnsFromVis.mockReturnValue([
+ {
+ buckets: { all: ['2', '3'], customBuckets: { 1: '3' } },
+ columns: [
+ { columnId: '2', isBucketed: true },
+ { columnId: '1', meta: { aggId: '1' } },
+ { columnId: '3', isBucketed: true },
+ ],
+ bucketCollapseFn: { sum: ['3'] },
+ metrics: ['1'],
+ },
+ {
+ buckets: { all: ['2'], customBuckets: {} },
+ columns: [
+ { columnId: '2', isBucketed: true },
+ { columnId: '1', meta: { aggId: '2' } },
+ ],
+ metrics: ['1'],
+ bucketCollapseFn: {},
+ },
+ ]);
+ mockGetVisSchemas.mockReturnValue({
+ metric: [{ aggId: '1' }],
+ });
+ const result = await convertToLens(
+ {
+ ...sampleAreaVis,
+ params: {
+ ...sampleAreaVis.params,
+ valueAxes: [
+ ...sampleAreaVis.params.valueAxes,
+ {
+ id: 'ValueAxis-2',
+ name: 'LeftAxis-2',
+ type: 'value',
+ position: 'left',
+ data: {
+ id: '2',
+ },
+ },
+ ],
+ seriesParams: [
+ ...sampleAreaVis.params.seriesParams,
+ { show: true, valueAxis: 'ValueAxis-2', data: { id: '2' } },
+ ],
+ thresholdLine: { ...sampleAreaVis.params.thresholdLine, show: true },
+ },
+ } as any,
+ { getAbsoluteTime: () => {} } as any
+ );
+ expect(mockGetColumnsFromVis).toBeCalledTimes(1);
+ expect(mockGetConfiguration).toBeCalledTimes(1);
+ expect(mockCreateStaticValueColumn).toBeCalledTimes(1);
+ expect(result?.type).toEqual('lnsXY');
+ expect(result?.layers.length).toEqual(3);
+ expect(result?.layers[0].columns).toEqual([
+ { columnId: '2', isBucketed: true },
+ { columnId: '1' },
+ { columnId: '3', isBucketed: true },
+ ]);
+ expect(result?.layers[1].columns).toEqual([
+ { columnId: '2', isBucketed: true },
+ { columnId: '1' },
+ ]);
+ expect(result?.layers[2].columns).toEqual([{ operationType: 'static_value' }]);
+ });
+});
diff --git a/src/plugins/vis_types/xy/public/convert_to_lens/index.ts b/src/plugins/vis_types/xy/public/convert_to_lens/index.ts
new file mode 100644
index 0000000000000..3b4339828c6d5
--- /dev/null
+++ b/src/plugins/vis_types/xy/public/convert_to_lens/index.ts
@@ -0,0 +1,214 @@
+/*
+ * 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 { METRIC_TYPES } from '@kbn/data-plugin/public';
+import { Column, ColumnWithMeta } from '@kbn/visualizations-plugin/common';
+import {
+ convertToLensModule,
+ getVisSchemas,
+ getDataViewByIndexPatternId,
+} from '@kbn/visualizations-plugin/public';
+import { getDataViewsStart } from '../services';
+import { getSeriesParams } from '../utils/get_series_params';
+import { ConvertXYToLensVisualization } from './types';
+
+export interface Layer {
+ indexPatternId: string;
+ layerId: string;
+ columns: Column[];
+ metrics: string[];
+ columnOrder: never[];
+ seriesIdsMap: Record;
+ isReferenceLineLayer: boolean;
+ collapseFn?: string;
+}
+
+const SIBBLING_PIPELINE_AGGS: string[] = [
+ METRIC_TYPES.AVG_BUCKET,
+ METRIC_TYPES.SUM_BUCKET,
+ METRIC_TYPES.MAX_BUCKET,
+ METRIC_TYPES.MIN_BUCKET,
+];
+
+export const isColumnWithMeta = (column: Column): column is ColumnWithMeta => {
+ if ((column as ColumnWithMeta).meta) {
+ return true;
+ }
+ return false;
+};
+
+export const excludeMetaFromColumn = (column: Column) => {
+ if (isColumnWithMeta(column)) {
+ const { meta, ...rest } = column;
+ return rest;
+ }
+ return column;
+};
+
+export const convertToLens: ConvertXYToLensVisualization = async (vis, timefilter) => {
+ if (!timefilter) {
+ return null;
+ }
+
+ const dataViews = getDataViewsStart();
+ const dataView = await getDataViewByIndexPatternId(vis.data.indexPattern?.id, dataViews);
+
+ if (!dataView) {
+ return null;
+ }
+
+ const visSchemas = getVisSchemas(vis, {
+ timefilter,
+ timeRange: timefilter.getAbsoluteTime(),
+ });
+
+ // doesn't support multi split series
+ if (visSchemas.group && visSchemas.group.length > 1) {
+ return null;
+ }
+
+ const firstValueAxesId = vis.params.valueAxes[0].id;
+ const updatedSeries = getSeriesParams(
+ vis.data.aggs,
+ vis.params.seriesParams,
+ 'metric',
+ firstValueAxesId
+ );
+
+ const finalSeriesParams = updatedSeries ?? vis.params.seriesParams;
+ const visibleSeries = finalSeriesParams.filter(
+ (param) => param.show && visSchemas.metric.some((m) => m.aggId?.split('.')[0] === param.data.id)
+ );
+
+ const [{ getColumnsFromVis, createStaticValueColumn }, { getConfiguration }] = await Promise.all([
+ convertToLensModule,
+ import('./configurations'),
+ ]);
+ const dataLayers = getColumnsFromVis(
+ vis,
+ timefilter,
+ dataView,
+ {
+ buckets: ['segment'],
+ splits: ['group'],
+ unsupported: ['split_row', 'split_column', 'radius'],
+ },
+ {
+ dropEmptyRowsInDateHistogram: true,
+ supportMixedSiblingPipelineAggs: true,
+ isPercentageMode: false,
+ },
+ visibleSeries
+ .reduce>((acc, s) => {
+ const series = acc.find(({ type, mode }) => type === s.type && mode === s.mode);
+ // sibling pipeline agg always generate new layer because of custom bucket
+ if (
+ series &&
+ visSchemas.metric.some(
+ (m) =>
+ m.aggId?.split('.')[0] === s.data.id && !SIBBLING_PIPELINE_AGGS.includes(m.aggType)
+ )
+ ) {
+ series.metrics.push(s.data.id);
+ } else {
+ acc.push({ metrics: [s.data.id], type: s.type, mode: s.mode });
+ }
+ return acc;
+ }, [])
+ .map(({ metrics }) => ({ metrics }))
+ );
+
+ if (dataLayers === null) {
+ return null;
+ }
+
+ // doesn't support several layers with terms split series which uses one of the metrics as order agg
+ if (
+ dataLayers.length > 1 &&
+ dataLayers.some((l) =>
+ l.columns.some(
+ (c) => c.isSplit && 'orderBy' in c.params && c.params.orderBy.type === 'column'
+ )
+ )
+ ) {
+ return null;
+ }
+
+ // doesn't support sibling pipeline aggs and split series together
+ if (
+ visSchemas.group?.length &&
+ dataLayers.some((l) => Object.keys(l.buckets.customBuckets).length)
+ ) {
+ return null;
+ }
+
+ const visibleYAxes = vis.params.valueAxes.filter((axis) =>
+ visibleSeries.some((seriesParam) => seriesParam.valueAxis === axis.id)
+ );
+
+ const positions = visibleYAxes.map((axis) => axis.position);
+ const uniqPoisitions = new Set(positions);
+
+ // doesn't support more than one axis left/right/top/bottom
+ if (visibleYAxes.length > 1 && uniqPoisitions.size !== positions.length) {
+ return null;
+ }
+
+ const indexPatternId = dataView.id!;
+
+ const uuid = await import('uuid/v4');
+
+ const layers = dataLayers.map((l) => {
+ const layerId = uuid.default();
+ const seriesIdsMap: Record = {};
+ visibleSeries.forEach((s) => {
+ const column = l.columns.find(
+ (c) => !c.isBucketed && c.meta.aggId.split('.')[0] === s.data.id
+ );
+ if (column) {
+ seriesIdsMap[column.columnId] = s.data.id;
+ }
+ });
+ const collapseFn = l.bucketCollapseFn
+ ? Object.keys(l.bucketCollapseFn).find((key) =>
+ l.bucketCollapseFn[key].includes(l.buckets.customBuckets[l.metrics[0]])
+ )
+ : undefined;
+ return {
+ indexPatternId,
+ layerId,
+ columns: l.columns.map(excludeMetaFromColumn),
+ metrics: l.metrics,
+ columnOrder: [],
+ seriesIdsMap,
+ collapseFn,
+ isReferenceLineLayer: false,
+ };
+ });
+
+ if (vis.params.thresholdLine.show) {
+ const staticValueColumn = createStaticValueColumn(vis.params.thresholdLine.value || 0);
+ layers.push({
+ indexPatternId,
+ layerId: uuid.default(),
+ columns: [staticValueColumn],
+ columnOrder: [],
+ metrics: [staticValueColumn.columnId],
+ isReferenceLineLayer: true,
+ collapseFn: undefined,
+ seriesIdsMap: {},
+ });
+ }
+
+ return {
+ type: 'lnsXY',
+ layers: layers.map(({ seriesIdsMap, collapseFn, isReferenceLineLayer, ...rest }) => rest),
+ configuration: getConfiguration(layers, visibleSeries, vis),
+ indexPatternIds: [indexPatternId],
+ };
+};
diff --git a/src/plugins/vis_types/xy/public/convert_to_lens/types.ts b/src/plugins/vis_types/xy/public/convert_to_lens/types.ts
new file mode 100644
index 0000000000000..5fa52b4221107
--- /dev/null
+++ b/src/plugins/vis_types/xy/public/convert_to_lens/types.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 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 { TimefilterContract } from '@kbn/data-plugin/public';
+import { NavigateToLensContext, XYConfiguration } from '@kbn/visualizations-plugin/common';
+import { Vis } from '@kbn/visualizations-plugin/public';
+import { VisParams } from '../types';
+
+export type ConvertXYToLensVisualization = (
+ vis: Vis,
+ timefilter?: TimefilterContract
+) => Promise | null>;
diff --git a/src/plugins/vis_types/xy/public/plugin.ts b/src/plugins/vis_types/xy/public/plugin.ts
index 4561006e43e92..ad75af4dfffdb 100644
--- a/src/plugins/vis_types/xy/public/plugin.ts
+++ b/src/plugins/vis_types/xy/public/plugin.ts
@@ -6,10 +6,11 @@
* Side Public License, v 1.
*/
-import type { CoreSetup, Plugin } from '@kbn/core/public';
+import type { CoreSetup, CoreStart, Plugin } from '@kbn/core/public';
import type { VisualizationsSetup } from '@kbn/visualizations-plugin/public';
import type { ChartsPluginSetup } from '@kbn/charts-plugin/public';
-import { setUISettings, setPalettesService } from './services';
+import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public';
+import { setUISettings, setPalettesService, setDataViewsStart } from './services';
import { visTypesDefinitions } from './vis_types';
@@ -24,6 +25,11 @@ export interface VisTypeXyPluginSetupDependencies {
charts: ChartsPluginSetup;
}
+/** @internal */
+export interface VisTypeXyPluginStartDependencies {
+ dataViews: DataViewsPublicPluginStart;
+}
+
type VisTypeXyCoreSetup = CoreSetup<{}, VisTypeXyPluginStart>;
/** @internal */
@@ -42,7 +48,8 @@ export class VisTypeXyPlugin
return {};
}
- public start() {
+ public start(core: CoreStart, { dataViews }: VisTypeXyPluginStartDependencies) {
+ setDataViewsStart(dataViews);
return {};
}
}
diff --git a/src/plugins/vis_types/xy/public/sample_vis.test.mocks.ts b/src/plugins/vis_types/xy/public/sample_vis.test.mocks.ts
index e55debd7c77ba..b2660b7c66551 100644
--- a/src/plugins/vis_types/xy/public/sample_vis.test.mocks.ts
+++ b/src/plugins/vis_types/xy/public/sample_vis.test.mocks.ts
@@ -8,6 +8,8 @@
import { LegendSize } from '@kbn/visualizations-plugin/common';
+const mockUiStateGet = jest.fn().mockReturnValue(() => false);
+
export const sampleAreaVis = {
type: {
name: 'area',
@@ -1918,5 +1920,10 @@ export const sampleAreaVis = {
},
},
isHierarchical: () => false,
- uiState: {},
+ uiState: {
+ vis: {
+ legendOpen: false,
+ },
+ get: mockUiStateGet,
+ },
};
diff --git a/src/plugins/vis_types/xy/public/services.ts b/src/plugins/vis_types/xy/public/services.ts
index 2358bcb5ede2e..7513f6188ef0e 100644
--- a/src/plugins/vis_types/xy/public/services.ts
+++ b/src/plugins/vis_types/xy/public/services.ts
@@ -8,6 +8,7 @@
import type { CoreSetup } from '@kbn/core/public';
import type { ChartsPluginSetup } from '@kbn/charts-plugin/public';
+import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public';
import { createGetterSetter } from '@kbn/kibana-utils-plugin/public';
@@ -16,3 +17,6 @@ export const [getUISettings, setUISettings] =
export const [getPalettesService, setPalettesService] =
createGetterSetter('xy charts.palette');
+
+export const [getDataViewsStart, setDataViewsStart] =
+ createGetterSetter('dataViews');
diff --git a/src/plugins/vis_types/xy/public/to_ast.ts b/src/plugins/vis_types/xy/public/to_ast.ts
index 4041075b98c4d..b584fbac26bba 100644
--- a/src/plugins/vis_types/xy/public/to_ast.ts
+++ b/src/plugins/vis_types/xy/public/to_ast.ts
@@ -18,8 +18,8 @@ import {
} from '@kbn/visualizations-plugin/public';
import { buildExpression, buildExpressionFunction } from '@kbn/expressions-plugin/public';
import { BUCKET_TYPES } from '@kbn/data-plugin/public';
-import { TimeRangeBounds } from '@kbn/data-plugin/common';
-import { PaletteOutput } from '@kbn/charts-plugin/common/expressions/palette/types';
+import type { TimeRangeBounds } from '@kbn/data-plugin/common';
+import type { PaletteOutput } from '@kbn/charts-plugin/common/expressions/palette/types';
import {
Dimensions,
Dimension,
@@ -30,32 +30,15 @@ import {
ValueAxis,
Scale,
ChartMode,
- InterpolationMode,
ScaleType,
} from './types';
import { ChartType } from '../common';
import { getSeriesParams } from './utils/get_series_params';
import { getSafeId } from './utils/accessors';
-
-interface Bounds {
- min?: string | number;
- max?: string | number;
-}
+import { Bounds, getCurveType, getLineStyle, getMode, getYAxisPosition } from './utils/common';
type YDimension = Omit & { accessor: string };
-const getCurveType = (type?: InterpolationMode) => {
- switch (type) {
- case 'cardinal':
- return 'CURVE_MONOTONE_X';
- case 'step-after':
- return 'CURVE_STEP_AFTER';
- case 'linear':
- default:
- return 'LINEAR';
- }
-};
-
const prepareLengend = (params: VisParams, legendSize?: LegendSize) => {
const legend = buildExpressionFunction('legendConfig', {
isVisible: params.addLegend,
@@ -162,16 +145,6 @@ const prepareLayers = (
return buildExpression([dataLayer]);
};
-const getMode = (scale: Scale, bounds?: Bounds) => {
- if (scale.defaultYExtents) {
- return 'dataBounds';
- }
-
- if (scale.setYExtents || bounds) {
- return 'custom';
- }
-};
-
const getLabelArgs = (data: CategoryAxis, isTimeChart?: boolean) => {
return {
truncate: data.labels.truncate,
@@ -215,18 +188,6 @@ function getScaleType(
return type;
}
-function getYAxisPosition(position: Position) {
- if (position === Position.Top) {
- return Position.Right;
- }
-
- if (position === Position.Bottom) {
- return Position.Left;
- }
-
- return position;
-}
-
function getXAxisPosition(position: Position) {
if (position === Position.Left) {
return Position.Bottom;
@@ -274,16 +235,6 @@ const prepareYAxis = (data: ValueAxis, showGridLines?: boolean) => {
return buildExpression([yAxisConfig]);
};
-const getLineStyle = (style: ThresholdLine['style']) => {
- switch (style) {
- case 'full':
- return 'solid';
- case 'dashed':
- case 'dot-dashed':
- return style;
- }
-};
-
const prepareReferenceLine = (thresholdLine: ThresholdLine, axisId: string) => {
const referenceLine = buildExpressionFunction('referenceLine', {
value: thresholdLine.value,
@@ -483,6 +434,7 @@ export const toExpressionAst: VisToExpressionAst = async (vis, params
splitColumnAccessor: dimensions.splitColumn?.map(prepareVisDimension),
splitRowAccessor: dimensions.splitRow?.map(prepareVisDimension),
valueLabels: vis.params.labels.show ? 'show' : 'hide',
+ valuesInLegend: vis.params.labels.show,
singleTable: true,
});
diff --git a/src/plugins/vis_types/xy/public/utils/common.ts b/src/plugins/vis_types/xy/public/utils/common.ts
new file mode 100644
index 0000000000000..522cac2aa00ac
--- /dev/null
+++ b/src/plugins/vis_types/xy/public/utils/common.ts
@@ -0,0 +1,62 @@
+/*
+ * 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 { Position } from '@elastic/charts';
+import type { AxisExtentConfig } from '@kbn/visualizations-plugin/common/convert_to_lens';
+import type { InterpolationMode, Scale, ThresholdLine } from '../types';
+
+export interface Bounds {
+ min?: string | number;
+ max?: string | number;
+}
+
+export const getCurveType = (type?: InterpolationMode) => {
+ switch (type) {
+ case 'cardinal':
+ return 'CURVE_MONOTONE_X';
+ case 'step-after':
+ return 'CURVE_STEP_AFTER';
+ case 'linear':
+ default:
+ return 'LINEAR';
+ }
+};
+
+export const getMode = (scale: Scale, bounds?: Bounds): AxisExtentConfig['mode'] => {
+ if (scale.defaultYExtents) {
+ return 'dataBounds';
+ }
+
+ if (scale.setYExtents || bounds) {
+ return 'custom';
+ }
+
+ return 'full';
+};
+
+export const getYAxisPosition = (position: Position) => {
+ if (position === Position.Top) {
+ return Position.Right;
+ }
+
+ if (position === Position.Bottom) {
+ return Position.Left;
+ }
+
+ return position;
+};
+
+export const getLineStyle = (style: ThresholdLine['style']) => {
+ switch (style) {
+ case 'full':
+ return 'solid';
+ case 'dashed':
+ case 'dot-dashed':
+ return style;
+ }
+};
diff --git a/src/plugins/vis_types/xy/public/vis_types/get_vis_type_from_params.ts b/src/plugins/vis_types/xy/public/vis_types/get_vis_type_from_params.ts
index c1f79b041e807..1f7ead86843d9 100644
--- a/src/plugins/vis_types/xy/public/vis_types/get_vis_type_from_params.ts
+++ b/src/plugins/vis_types/xy/public/vis_types/get_vis_type_from_params.ts
@@ -6,7 +6,7 @@
* Side Public License, v 1.
*/
-import { VisParams } from '@kbn/visualizations-plugin/common';
+import type { VisParams } from '@kbn/visualizations-plugin/common';
export const getVisTypeFromParams = (params?: VisParams) => {
let type = params?.seriesParams?.[0]?.type;
diff --git a/src/plugins/vis_types/xy/public/vis_types/index.ts b/src/plugins/vis_types/xy/public/vis_types/index.ts
index 93c973b5316c9..2f7a03b6aaf1c 100644
--- a/src/plugins/vis_types/xy/public/vis_types/index.ts
+++ b/src/plugins/vis_types/xy/public/vis_types/index.ts
@@ -6,14 +6,27 @@
* Side Public License, v 1.
*/
+import type { VisTypeDefinition } from '@kbn/visualizations-plugin/public';
+import type { VisParams } from '../types';
import { areaVisTypeDefinition } from './area';
import { lineVisTypeDefinition } from './line';
import { histogramVisTypeDefinition } from './histogram';
import { horizontalBarVisTypeDefinition } from './horizontal_bar';
+import { convertToLens } from '../convert_to_lens';
export const visTypesDefinitions = [
areaVisTypeDefinition,
lineVisTypeDefinition,
histogramVisTypeDefinition,
horizontalBarVisTypeDefinition,
-];
+].map>((defenition) => {
+ return {
+ ...defenition,
+ navigateToLens: async (vis, timefilter) => (vis ? convertToLens(vis, timefilter) : null),
+ getExpressionVariables: async (vis, timeFilter) => {
+ return {
+ canNavigateToLens: Boolean(vis?.params ? await convertToLens(vis, timeFilter) : null),
+ };
+ },
+ };
+});
diff --git a/src/plugins/visualizations/common/convert_to_lens/lib/convert/sibling_pipeline.ts b/src/plugins/visualizations/common/convert_to_lens/lib/convert/sibling_pipeline.ts
index 03e1d955dd045..a8389cb8601e4 100644
--- a/src/plugins/visualizations/common/convert_to_lens/lib/convert/sibling_pipeline.ts
+++ b/src/plugins/visualizations/common/convert_to_lens/lib/convert/sibling_pipeline.ts
@@ -13,7 +13,7 @@ import { convertToSchemaConfig } from '../../../vis_schemas';
export const convertToSiblingPipelineColumns = (
columnConverterArgs: ExtendedColumnConverterArgs
): AggBasedColumn | null => {
- const { aggParams, label } = columnConverterArgs.agg;
+ const { aggParams, label, aggId } = columnConverterArgs.agg;
if (!aggParams) {
return null;
}
@@ -23,7 +23,7 @@ export const convertToSiblingPipelineColumns = (
}
const customMetricColumn = convertMetricToColumns(
- { ...convertToSchemaConfig(aggParams.customMetric), label },
+ { ...convertToSchemaConfig(aggParams.customMetric), label, aggId },
columnConverterArgs.dataView,
columnConverterArgs.aggs
);
diff --git a/src/plugins/visualizations/common/convert_to_lens/lib/convert/types.ts b/src/plugins/visualizations/common/convert_to_lens/lib/convert/types.ts
index 3dfaee67a61e0..8e6f9ec9443bb 100644
--- a/src/plugins/visualizations/common/convert_to_lens/lib/convert/types.ts
+++ b/src/plugins/visualizations/common/convert_to_lens/lib/convert/types.ts
@@ -58,7 +58,7 @@ export type SiblingPipelineMetric =
| METRIC_TYPES.MIN_BUCKET
| METRIC_TYPES.MAX_BUCKET;
-export type BucketColumn = DateHistogramColumn | TermsColumn | FiltersColumn;
+export type BucketColumn = DateHistogramColumn | TermsColumn | FiltersColumn | RangeColumn;
export interface CommonColumnConverterArgs<
Agg extends SupportedAggregation = SupportedAggregation
> {
diff --git a/src/plugins/visualizations/common/convert_to_lens/lib/utils.test.ts b/src/plugins/visualizations/common/convert_to_lens/lib/utils.test.ts
index 73118b6ad4f03..1f91201aff503 100644
--- a/src/plugins/visualizations/common/convert_to_lens/lib/utils.test.ts
+++ b/src/plugins/visualizations/common/convert_to_lens/lib/utils.test.ts
@@ -365,7 +365,7 @@ describe('getCustomBucketsFromSiblingAggs', () => {
},
params: {},
aggType: METRIC_TYPES.AVG_BUCKET,
- aggId: 'some-agg-id',
+ aggId: 'some-agg-id-1',
aggParams: {
customBucket: bucketWithSerialize1,
},
@@ -381,7 +381,7 @@ describe('getCustomBucketsFromSiblingAggs', () => {
},
params: {},
aggType: METRIC_TYPES.AVG_BUCKET,
- aggId: 'some-agg-id',
+ aggId: 'some-agg-id-2',
aggParams: {
customBucket: bucketWithSerialize2,
},
@@ -399,7 +399,7 @@ describe('getCustomBucketsFromSiblingAggs', () => {
},
params: {},
aggType: METRIC_TYPES.AVG_BUCKET,
- aggId: 'some-agg-id',
+ aggId: 'some-agg-id-3',
aggParams: {
customBucket: bucketWithSerialize3,
},
@@ -407,8 +407,8 @@ describe('getCustomBucketsFromSiblingAggs', () => {
test("should filter out duplicated custom buckets, ignoring id's", () => {
expect(getCustomBucketsFromSiblingAggs([metric1, metric2, metric3])).toEqual([
- bucketWithSerialize1,
- bucketWithSerialize2,
+ { customBucket: bucketWithSerialize1, metricIds: ['some-agg-id-1', 'some-agg-id-3'] },
+ { customBucket: bucketWithSerialize2, metricIds: ['some-agg-id-2'] },
]);
});
});
diff --git a/src/plugins/visualizations/common/convert_to_lens/lib/utils.ts b/src/plugins/visualizations/common/convert_to_lens/lib/utils.ts
index c4e5c5474bf0c..ce50312d92cf3 100644
--- a/src/plugins/visualizations/common/convert_to_lens/lib/utils.ts
+++ b/src/plugins/visualizations/common/convert_to_lens/lib/utils.ts
@@ -151,19 +151,19 @@ export const isStdDevAgg = (metric: SchemaConfig): metric is SchemaConfig {
- return metrics.reduce((acc, metric) => {
- if (
- isSiblingPipeline(metric) &&
- metric.aggParams?.customBucket &&
- acc.every(
- (bucket) =>
- !isEqual(
- omit(metric.aggParams?.customBucket?.serialize(), ['id']),
- omit(bucket.serialize(), ['id'])
- )
- )
- ) {
- acc.push(metric.aggParams.customBucket);
+ return metrics.reduce>((acc, metric) => {
+ if (isSiblingPipeline(metric) && metric.aggParams?.customBucket && metric.aggId) {
+ const customBucket = acc.find((bucket) =>
+ isEqual(
+ omit(metric.aggParams?.customBucket?.serialize(), ['id']),
+ omit(bucket.customBucket.serialize(), ['id'])
+ )
+ );
+ if (customBucket) {
+ customBucket.metricIds.push(metric.aggId);
+ } else {
+ acc.push({ customBucket: metric.aggParams.customBucket, metricIds: [metric.aggId] });
+ }
}
return acc;
diff --git a/src/plugins/visualizations/common/convert_to_lens/types/configurations.ts b/src/plugins/visualizations/common/convert_to_lens/types/configurations.ts
index 44a56411d8ea5..fcda8568a93c0 100644
--- a/src/plugins/visualizations/common/convert_to_lens/types/configurations.ts
+++ b/src/plugins/visualizations/common/convert_to_lens/types/configurations.ts
@@ -162,6 +162,7 @@ export interface XYConfiguration {
fillOpacity?: number;
hideEndzones?: boolean;
valuesInLegend?: boolean;
+ showCurrentTimeMarker?: boolean;
}
export interface SortingState {
diff --git a/src/plugins/visualizations/common/convert_to_lens/utils.ts b/src/plugins/visualizations/common/convert_to_lens/utils.ts
index 3536282d830d3..51c7e8239a439 100644
--- a/src/plugins/visualizations/common/convert_to_lens/utils.ts
+++ b/src/plugins/visualizations/common/convert_to_lens/utils.ts
@@ -6,9 +6,9 @@
* Side Public License, v 1.
*/
-import { DataViewField } from '@kbn/data-views-plugin/common';
-import { SupportedMetric } from './lib/convert/supported_metrics';
-import { Layer, XYAnnotationsLayerConfig, XYLayerConfig } from './types';
+import type { DataViewField } from '@kbn/data-views-plugin/common';
+import type { SupportedMetric } from './lib/convert/supported_metrics';
+import type { Layer, XYAnnotationsLayerConfig, XYLayerConfig } from './types';
export const isAnnotationsLayer = (
layer: Pick
diff --git a/src/plugins/visualizations/public/convert_to_lens/schemas.test.ts b/src/plugins/visualizations/public/convert_to_lens/schemas.test.ts
index 5b8b7832730b9..54975d08b8486 100644
--- a/src/plugins/visualizations/public/convert_to_lens/schemas.test.ts
+++ b/src/plugins/visualizations/public/convert_to_lens/schemas.test.ts
@@ -21,6 +21,7 @@ import { getColumnsFromVis } from './schemas';
const mockConvertMetricToColumns = jest.fn();
const mockConvertBucketToColumns = jest.fn();
const mockGetCutomBucketsFromSiblingAggs = jest.fn();
+const mockGetCustomBucketColumns = jest.fn();
const mockGetVisSchemas = jest.fn();
const mockGetBucketCollapseFn = jest.fn();
@@ -55,6 +56,7 @@ jest.mock('./utils', () => ({
getMetricsWithoutDuplicates: jest.fn(() => mockGetMetricsWithoutDuplicates()),
isValidVis: jest.fn(() => mockIsValidVis()),
sortColumns: jest.fn(() => mockSortColumns()),
+ getCustomBucketColumns: jest.fn(() => mockGetCustomBucketColumns()),
}));
describe('getColumnsFromVis', () => {
@@ -73,6 +75,7 @@ describe('getColumnsFromVis', () => {
jest.clearAllMocks();
mockGetVisSchemas.mockReturnValue({});
mockIsValidVis.mockReturnValue(true);
+ mockGetCustomBucketColumns.mockReturnValue({ customBucketColumns: [], customBucketsMap: {} });
});
test('should return null if vis is not valid', () => {
@@ -107,7 +110,10 @@ describe('getColumnsFromVis', () => {
test('should return null if one sibling agg was provided and it is not supported', () => {
const buckets: AggConfig[] = [aggConfig];
mockGetCutomBucketsFromSiblingAggs.mockReturnValue(buckets);
- mockConvertBucketToColumns.mockReturnValue(null);
+ mockGetCustomBucketColumns.mockReturnValue({
+ customBucketColumns: [null],
+ customBucketsMap: {},
+ });
mockGetMetricsWithoutDuplicates.mockReturnValue([{}]);
const result = getColumnsFromVis(vis, dataServiceMock.query.timefilter.timefilter, dataView, {
@@ -120,7 +126,7 @@ describe('getColumnsFromVis', () => {
expect(mockIsValidVis).toBeCalledTimes(1);
expect(mockGetCutomBucketsFromSiblingAggs).toBeCalledTimes(1);
expect(mockGetMetricsWithoutDuplicates).toBeCalledTimes(1);
- expect(mockConvertBucketToColumns).toBeCalledTimes(1);
+ expect(mockGetCustomBucketColumns).toBeCalledTimes(1);
expect(mockGetBucketColumns).toBeCalledTimes(0);
});
@@ -190,7 +196,7 @@ describe('getColumnsFromVis', () => {
expect(mockSortColumns).toBeCalledTimes(0);
});
- test('should return columns', () => {
+ test('should return one layer with columns', () => {
const buckets: AggConfig[] = [aggConfig];
const bucketColumns = [
{
@@ -238,13 +244,18 @@ describe('getColumnsFromVis', () => {
buckets: [],
});
- expect(result).toEqual({
- bucketCollapseFn,
- buckets: [bucketId],
- columns: [...metrics, ...buckets],
- columnsWithoutReferenced,
- metrics: [metricId],
- });
+ expect(result).toEqual([
+ {
+ bucketCollapseFn,
+ buckets: {
+ all: [bucketId],
+ customBuckets: {},
+ },
+ columns: [...metrics, ...buckets],
+ columnsWithoutReferenced,
+ metrics: [metricId],
+ },
+ ]);
expect(mockGetVisSchemas).toBeCalledTimes(1);
expect(mockIsValidVis).toBeCalledTimes(1);
expect(mockGetCutomBucketsFromSiblingAggs).toBeCalledTimes(1);
@@ -254,4 +265,84 @@ describe('getColumnsFromVis', () => {
expect(mockSortColumns).toBeCalledTimes(1);
expect(mockGetColumnsWithoutReferenced).toBeCalledTimes(1);
});
+
+ test('should return several layer with columns if series is provided', () => {
+ const buckets: AggConfig[] = [aggConfig];
+ const bucketColumns = [
+ {
+ sourceField: 'some-field',
+ columnId: 'col3',
+ operationType: 'date_histogram',
+ isBucketed: false,
+ isSplit: false,
+ dataType: 'string',
+ params: { interval: '1h' },
+ meta: { aggId: 'agg-id-1' },
+ },
+ ];
+ const mectricAggs = [{ aggId: 'col-id-3' }, { aggId: 'col-id-4' }];
+ const metrics = [
+ {
+ sourceField: 'some-field',
+ columnId: 'col2',
+ operationType: 'max',
+ isBucketed: false,
+ isSplit: false,
+ dataType: 'string',
+ params: {},
+ meta: { aggId: 'col-id-3' },
+ },
+ {
+ sourceField: 'some-field',
+ columnId: 'col3',
+ operationType: 'max',
+ isBucketed: false,
+ isSplit: false,
+ dataType: 'string',
+ params: {},
+ meta: { aggId: 'col-id-4' },
+ },
+ ];
+
+ const columnsWithoutReferenced = ['col2'];
+ const metricId = 'metric1';
+ const bucketId = 'bucket1';
+ const bucketCollapseFn = 'max';
+
+ mockGetCutomBucketsFromSiblingAggs.mockReturnValue([]);
+ mockGetMetricsWithoutDuplicates.mockReturnValue(mectricAggs);
+ mockConvertMetricToColumns.mockReturnValue(metrics);
+ mockConvertBucketToColumns.mockReturnValue(bucketColumns);
+ mockGetBucketColumns.mockReturnValue(bucketColumns);
+ mockGetColumnsWithoutReferenced.mockReturnValue(columnsWithoutReferenced);
+ mockSortColumns.mockReturnValue([...metrics, ...buckets]);
+ mockGetColumnIds.mockReturnValueOnce([metricId]);
+ mockGetColumnIds.mockReturnValueOnce([bucketId]);
+ mockGetColumnIds.mockReturnValueOnce([metricId]);
+ mockGetColumnIds.mockReturnValueOnce([bucketId]);
+ mockGetBucketCollapseFn.mockReturnValueOnce(bucketCollapseFn);
+ mockGetBucketCollapseFn.mockReturnValueOnce(bucketCollapseFn);
+
+ const result = getColumnsFromVis(
+ vis,
+ dataServiceMock.query.timefilter.timefilter,
+ dataView,
+ {
+ splits: [],
+ buckets: [],
+ },
+ undefined,
+ [{ metrics: ['col-id-3'] }, { metrics: ['col-id-4'] }]
+ );
+
+ expect(result?.length).toEqual(2);
+ expect(mockGetVisSchemas).toBeCalledTimes(1);
+ expect(mockIsValidVis).toBeCalledTimes(1);
+ expect(mockGetCutomBucketsFromSiblingAggs).toBeCalledTimes(1);
+ expect(mockGetMetricsWithoutDuplicates).toBeCalledTimes(1);
+ expect(mockConvertMetricToColumns).toBeCalledTimes(2);
+ expect(mockGetBucketColumns).toBeCalledTimes(4);
+ expect(mockSortColumns).toBeCalledTimes(2);
+ expect(mockGetColumnsWithoutReferenced).toBeCalledTimes(2);
+ });
});
diff --git a/src/plugins/visualizations/public/convert_to_lens/schemas.ts b/src/plugins/visualizations/public/convert_to_lens/schemas.ts
index ecfbbf34ad9c9..3a225e540faae 100644
--- a/src/plugins/visualizations/public/convert_to_lens/schemas.ts
+++ b/src/plugins/visualizations/public/convert_to_lens/schemas.ts
@@ -7,16 +7,17 @@
*/
import type { DataView } from '@kbn/data-views-plugin/common';
-import { METRIC_TYPES, TimefilterContract } from '@kbn/data-plugin/public';
+import { IAggConfig, METRIC_TYPES, TimefilterContract } from '@kbn/data-plugin/public';
import { AggBasedColumn, PercentageModeConfig, SchemaConfig } from '../../common';
import { convertMetricToColumns } from '../../common/convert_to_lens/lib/metrics';
-import { convertBucketToColumns } from '../../common/convert_to_lens/lib/buckets';
import { getCustomBucketsFromSiblingAggs } from '../../common/convert_to_lens/lib/utils';
+import { BucketColumn } from '../../common/convert_to_lens/lib';
import type { Vis } from '../types';
import { getVisSchemas, Schemas } from '../vis_schemas';
import {
getBucketCollapseFn,
getBucketColumns,
+ getCustomBucketColumns,
getColumnIds,
getColumnsWithoutReferenced,
getMetricsWithoutDuplicates,
@@ -31,66 +32,44 @@ const areVisSchemasValid = (visSchemas: Schemas, unsupported: Array(
- vis: Vis,
- timefilter: TimefilterContract,
+const createLayer = (
+ visSchemas: Schemas,
+ allMetrics: Array>,
+ metricsForLayer: Array>,
+ customBucketsWithMetricIds: Array<{
+ customBucket: IAggConfig;
+ metricIds: string[];
+ }>,
dataView: DataView,
{
splits = [],
buckets = [],
- unsupported = [],
}: {
splits?: Array;
buckets?: Array;
- unsupported?: Array;
} = {},
- config?: {
- dropEmptyRowsInDateHistogram?: boolean;
- } & (PercentageModeConfig | void)
+ percentageModeConfig: PercentageModeConfig,
+ dropEmptyRowsInDateHistogram?: boolean
) => {
- const { dropEmptyRowsInDateHistogram, ...percentageModeConfig } = config ?? {
- isPercentageMode: false,
- };
- const visSchemas = getVisSchemas(vis, {
- timefilter,
- timeRange: timefilter.getAbsoluteTime(),
- });
-
- if (!isValidVis(visSchemas) || !areVisSchemasValid(visSchemas, unsupported)) {
- return null;
- }
-
- const customBuckets = getCustomBucketsFromSiblingAggs(visSchemas.metric);
-
- // doesn't support sibbling pipeline aggs with different bucket aggs
- if (customBuckets.length > 1) {
+ const metricColumns = metricsForLayer.flatMap((m) =>
+ convertMetricToColumns(m, dataView, allMetrics, percentageModeConfig)
+ );
+ if (metricColumns.includes(null)) {
return null;
}
+ const metricColumnsWithoutNull = metricColumns as AggBasedColumn[];
- const metricsWithoutDuplicates = getMetricsWithoutDuplicates(visSchemas.metric);
- const aggs = metricsWithoutDuplicates as Array>;
-
- const metricColumns = aggs.flatMap((m) =>
- convertMetricToColumns(m, dataView, aggs, percentageModeConfig)
+ const { customBucketColumns, customBucketsMap } = getCustomBucketColumns(
+ customBucketsWithMetricIds,
+ metricColumnsWithoutNull,
+ dataView,
+ allMetrics,
+ dropEmptyRowsInDateHistogram
);
- if (metricColumns.includes(null)) {
+ if (customBucketColumns.includes(null)) {
return null;
}
- const metrics = metricColumns as AggBasedColumn[];
- const customBucketColumns = [];
-
- if (customBuckets.length) {
- const customBucketColumn = convertBucketToColumns(
- { agg: customBuckets[0], dataView, metricColumns: metrics, aggs },
- false,
- dropEmptyRowsInDateHistogram
- );
- if (!customBucketColumn) {
- return null;
- }
- customBucketColumns.push(customBucketColumn);
- }
const bucketColumns = getBucketColumns(
visSchemas,
@@ -117,19 +96,121 @@ export const getColumnsFromVis = (
}
const columns = sortColumns(
- [...metrics, ...bucketColumns, ...splitBucketColumns, ...customBucketColumns],
+ [
+ ...metricColumnsWithoutNull,
+ ...bucketColumns,
+ ...splitBucketColumns,
+ ...(customBucketColumns as BucketColumn[]),
+ ],
visSchemas,
[...buckets, ...splits],
- metricsWithoutDuplicates
+ metricsForLayer
);
const columnsWithoutReferenced = getColumnsWithoutReferenced(columns);
return {
metrics: getColumnIds(columnsWithoutReferenced.filter((с) => !с.isBucketed)),
- buckets: getColumnIds(columnsWithoutReferenced.filter((c) => c.isBucketed)),
- bucketCollapseFn: getBucketCollapseFn(visSchemas.metric, customBucketColumns),
+ buckets: {
+ all: getColumnIds(columnsWithoutReferenced.filter((c) => c.isBucketed)),
+ customBuckets: customBucketsMap,
+ },
+ bucketCollapseFn: getBucketCollapseFn(
+ visSchemas.metric,
+ customBucketColumns as BucketColumn[],
+ customBucketsMap,
+ metricColumnsWithoutNull
+ ),
columnsWithoutReferenced,
columns,
};
};
+
+export const getColumnsFromVis = (
+ vis: Vis,
+ timefilter: TimefilterContract,
+ dataView: DataView,
+ {
+ splits = [],
+ buckets = [],
+ unsupported = [],
+ }: {
+ splits?: Array;
+ buckets?: Array;
+ unsupported?: Array;
+ } = {},
+ config?: {
+ dropEmptyRowsInDateHistogram?: boolean;
+ supportMixedSiblingPipelineAggs?: boolean;
+ } & (PercentageModeConfig | void),
+ series?: Array<{ metrics: string[] }>
+) => {
+ const { dropEmptyRowsInDateHistogram, supportMixedSiblingPipelineAggs, ...percentageModeConfig } =
+ config ?? {
+ isPercentageMode: false,
+ };
+ const visSchemas = getVisSchemas(vis, {
+ timefilter,
+ timeRange: timefilter.getAbsoluteTime(),
+ });
+
+ if (
+ !isValidVis(visSchemas, supportMixedSiblingPipelineAggs) ||
+ !areVisSchemasValid(visSchemas, unsupported)
+ ) {
+ return null;
+ }
+
+ const customBucketsWithMetricIds = getCustomBucketsFromSiblingAggs(visSchemas.metric);
+
+ // doesn't support sibbling pipeline aggs with different bucket aggs
+ if (!supportMixedSiblingPipelineAggs && customBucketsWithMetricIds.length > 1) {
+ return null;
+ }
+
+ const metricsWithoutDuplicates = getMetricsWithoutDuplicates(visSchemas.metric);
+ const aggs = metricsWithoutDuplicates as Array>;
+ const layers = [];
+
+ if (series && series.length) {
+ for (const { metrics: metricAggIds } of series) {
+ const metrics = aggs.filter(
+ (agg) => agg.aggId && metricAggIds.includes(agg.aggId.split('.')[0])
+ );
+ const customBucketsForLayer = customBucketsWithMetricIds.filter((c) =>
+ c.metricIds.some((m) => metricAggIds.includes(m))
+ );
+ const layer = createLayer(
+ visSchemas,
+ aggs,
+ metrics,
+ customBucketsForLayer,
+ dataView,
+ { splits, buckets },
+ percentageModeConfig,
+ dropEmptyRowsInDateHistogram
+ );
+ if (!layer) {
+ return null;
+ }
+ layers.push(layer);
+ }
+ } else {
+ const layer = createLayer(
+ visSchemas,
+ aggs,
+ aggs,
+ customBucketsWithMetricIds,
+ dataView,
+ { splits, buckets },
+ percentageModeConfig,
+ dropEmptyRowsInDateHistogram
+ );
+ if (!layer) {
+ return null;
+ }
+ layers.push(layer);
+ }
+
+ return layers;
+};
diff --git a/src/plugins/visualizations/public/convert_to_lens/utils.test.ts b/src/plugins/visualizations/public/convert_to_lens/utils.test.ts
index 734a250a2972c..50f667430a8cb 100644
--- a/src/plugins/visualizations/public/convert_to_lens/utils.test.ts
+++ b/src/plugins/visualizations/public/convert_to_lens/utils.test.ts
@@ -6,7 +6,7 @@
* Side Public License, v 1.
*/
-import { BUCKET_TYPES, METRIC_TYPES } from '@kbn/data-plugin/common';
+import { BUCKET_TYPES, IAggConfig, METRIC_TYPES } from '@kbn/data-plugin/common';
import { stubLogstashDataView } from '@kbn/data-views-plugin/common/data_view.stub';
import {
AggBasedColumn,
@@ -27,6 +27,7 @@ import {
getBucketColumns,
getColumnIds,
getColumnsWithoutReferenced,
+ getCustomBucketColumns,
getMetricsWithoutDuplicates,
isReferenced,
isValidVis,
@@ -104,6 +105,7 @@ describe('getColumnsWithoutReferenced', () => {
describe('getBucketCollapseFn', () => {
const metric1: SchemaConfig = {
accessor: 0,
+ aggId: '1',
label: '',
format: {
id: undefined,
@@ -115,21 +117,25 @@ describe('getBucketCollapseFn', () => {
const metric2: SchemaConfig = {
...metric1,
+ aggId: '2',
aggType: METRIC_TYPES.AVG_BUCKET,
};
const metric3: SchemaConfig = {
...metric1,
+ aggId: '3',
aggType: METRIC_TYPES.MAX_BUCKET,
};
const metric4: SchemaConfig = {
...metric1,
+ aggId: '4',
aggType: METRIC_TYPES.MIN_BUCKET,
};
const metric5: SchemaConfig = {
...metric1,
+ aggId: '5',
aggType: METRIC_TYPES.SUM_BUCKET,
};
@@ -151,18 +157,54 @@ describe('getBucketCollapseFn', () => {
test.each<
[
string,
- [Array>, AggBasedColumn[]],
- Record
+ [
+ Array>,
+ AggBasedColumn[],
+ Record,
+ AggBasedColumn[]
+ ],
+ Record
]
>([
- ['avg', [[metric1, metric2], [customBucketColum]], { [customBucketColum.columnId]: 'avg' }],
- ['max', [[metric1, metric3], [customBucketColum]], { [customBucketColum.columnId]: 'max' }],
- ['min', [[metric1, metric4], [customBucketColum]], { [customBucketColum.columnId]: 'min' }],
- ['sum', [[metric1, metric5], [customBucketColum]], { [customBucketColum.columnId]: 'sum' }],
[
- 'undefined if no sibling pipeline agg is provided',
- [[metric1], [customBucketColum]],
- { [customBucketColum.columnId]: undefined },
+ 'avg',
+ [
+ [metric1, metric2],
+ [customBucketColum],
+ { test: 'bucket-1' },
+ [{ columnId: 'test', meta: { aggId: metric2.aggId } } as AggBasedColumn],
+ ],
+ { sum: [], min: [], max: [], avg: [customBucketColum.columnId] },
+ ],
+ [
+ 'max',
+ [
+ [metric1, metric3],
+ [customBucketColum],
+ { test: 'bucket-1' },
+ [{ columnId: 'test', meta: { aggId: metric3.aggId } } as AggBasedColumn],
+ ],
+ { sum: [], min: [], max: [customBucketColum.columnId], avg: [] },
+ ],
+ [
+ 'min',
+ [
+ [metric1, metric4],
+ [customBucketColum],
+ { test: 'bucket-1' },
+ [{ columnId: 'test', meta: { aggId: metric4.aggId } } as AggBasedColumn],
+ ],
+ { sum: [], min: [customBucketColum.columnId], max: [], avg: [] },
+ ],
+ [
+ 'sum',
+ [
+ [metric1, metric5],
+ [customBucketColum],
+ { test: 'bucket-1' },
+ [{ columnId: 'test', meta: { aggId: metric5.aggId } } as AggBasedColumn],
+ ],
+ { sum: [customBucketColum.columnId], min: [], max: [], avg: [] },
],
])('should return%s', (_, input, expected) => {
expect(getBucketCollapseFn(...input)).toEqual(expected);
@@ -607,4 +649,77 @@ describe('getColumnIds', () => {
colId4,
]);
});
+
+ describe('getCustomBucketColumns', () => {
+ const dataView = stubLogstashDataView;
+ const baseMetric = {
+ accessor: 0,
+ label: '',
+ format: {
+ id: undefined,
+ params: undefined,
+ },
+ params: {},
+ };
+ const metric1: SchemaConfig = {
+ ...baseMetric,
+ accessor: 2,
+ aggType: METRIC_TYPES.COUNT,
+ aggId: '3',
+ };
+ const metric2: SchemaConfig = {
+ ...baseMetric,
+ accessor: 3,
+ aggType: METRIC_TYPES.MAX,
+ aggId: '4',
+ };
+ const customBucketsWithMetricIds = [
+ {
+ customBucket: {} as IAggConfig,
+ metricIds: ['3', '4'],
+ },
+ {
+ customBucket: {} as IAggConfig,
+ metricIds: ['5'],
+ },
+ ];
+ test('return custom buckets columns and map', () => {
+ mockConvertBucketToColumns.mockReturnValueOnce({
+ columnId: 'col-1',
+ operationType: 'date_histogram',
+ });
+ mockConvertBucketToColumns.mockReturnValueOnce({
+ columnId: 'col-2',
+ operationType: 'terms',
+ });
+ expect(
+ getCustomBucketColumns(
+ customBucketsWithMetricIds,
+ [
+ { columnId: 'col-3', meta: { aggId: '3' } },
+ { columnId: 'col-4', meta: { aggId: '4' } },
+ { columnId: 'col-5', meta: { aggId: '5' } },
+ ] as AggBasedColumn[],
+ dataView,
+ [metric1, metric2]
+ )
+ ).toEqual({
+ customBucketColumns: [
+ {
+ columnId: 'col-1',
+ operationType: 'date_histogram',
+ },
+ {
+ columnId: 'col-2',
+ operationType: 'terms',
+ },
+ ],
+ customBucketsMap: {
+ 'col-3': 'col-1',
+ 'col-4': 'col-1',
+ 'col-5': 'col-2',
+ },
+ });
+ });
+ });
});
diff --git a/src/plugins/visualizations/public/convert_to_lens/utils.ts b/src/plugins/visualizations/public/convert_to_lens/utils.ts
index a5337568b5568..0cab4f698fb2f 100644
--- a/src/plugins/visualizations/public/convert_to_lens/utils.ts
+++ b/src/plugins/visualizations/public/convert_to_lens/utils.ts
@@ -7,10 +7,11 @@
*/
import type { DataView } from '@kbn/data-views-plugin/common';
-import { METRIC_TYPES } from '@kbn/data-plugin/public';
+import { IAggConfig, METRIC_TYPES } from '@kbn/data-plugin/public';
import { AggBasedColumn, SchemaConfig, SupportedAggregation } from '../../common';
import { convertBucketToColumns } from '../../common/convert_to_lens/lib/buckets';
import { isSiblingPipeline } from '../../common/convert_to_lens/lib/utils';
+import { BucketColumn } from '../../common/convert_to_lens/lib';
import { Schemas } from '../vis_schemas';
export const isReferenced = (columnId: string, references: string[]) =>
@@ -25,14 +26,31 @@ export const getColumnsWithoutReferenced = (columns: AggBasedColumn[]) => {
export const getBucketCollapseFn = (
metrics: Array>,
- customBucketColumns: AggBasedColumn[]
+ customBucketColumns: AggBasedColumn[],
+ customBucketsMap: Record,
+ metricColumns: AggBasedColumn[]
) => {
- const collapseFn = metrics.find((m) => isSiblingPipeline(m))?.aggType.split('_')[0];
- return customBucketColumns.length
- ? {
- [customBucketColumns[0].columnId]: collapseFn,
+ const collapseFnMap: Record = {
+ min: [],
+ max: [],
+ sum: [],
+ avg: [],
+ };
+ customBucketColumns.forEach((bucket) => {
+ const metricColumnsIds = Object.keys(customBucketsMap).filter(
+ (key) => customBucketsMap[key] === bucket.columnId
+ );
+ metricColumnsIds.forEach((metricColumnsId) => {
+ const metricColumn = metricColumns.find((c) => c.columnId === metricColumnsId)!;
+ const collapseFn = metrics
+ .find((m) => m.aggId === metricColumn.meta.aggId)
+ ?.aggType.split('_')[0];
+ if (collapseFn) {
+ collapseFnMap[collapseFn].push(bucket.columnId);
}
- : {};
+ });
+ });
+ return collapseFnMap;
};
export const getBucketColumns = (
@@ -67,7 +85,7 @@ export const getBucketColumns = (
return columns;
};
-export const isValidVis = (visSchemas: Schemas) => {
+export const isValidVis = (visSchemas: Schemas, supportMixedSiblingPipelineAggs?: boolean) => {
const { metric } = visSchemas;
const siblingPipelineAggs = metric.filter((m) => isSiblingPipeline(m));
@@ -76,7 +94,10 @@ export const isValidVis = (visSchemas: Schemas) => {
}
// doesn't support mixed sibling pipeline aggregations
- if (siblingPipelineAggs.some((agg) => agg.aggType !== siblingPipelineAggs[0].aggType)) {
+ if (
+ siblingPipelineAggs.some((agg) => agg.aggType !== siblingPipelineAggs[0].aggType) &&
+ !supportMixedSiblingPipelineAggs
+ ) {
return false;
}
@@ -103,7 +124,8 @@ export const sortColumns = (
...acc,
...(key === 'metric' ? metricsWithoutDuplicates : visSchemas[key])?.reduce(
(newAcc, schema) => {
- newAcc[schema.aggId] = schema.accessor;
+ // metrics should always have sort more than buckets
+ newAcc[schema.aggId] = key === 'metric' ? schema.accessor : 1000 + schema.accessor;
return newAcc;
},
{}
@@ -121,3 +143,36 @@ export const sortColumns = (
};
export const getColumnIds = (columns: AggBasedColumn[]) => columns.map(({ columnId }) => columnId);
+
+export const getCustomBucketColumns = (
+ customBucketsWithMetricIds: Array<{
+ customBucket: IAggConfig;
+ metricIds: string[];
+ }>,
+ metricColumns: AggBasedColumn[],
+ dataView: DataView,
+ aggs: Array>,
+ dropEmptyRowsInDateHistogram?: boolean
+) => {
+ const customBucketColumns: Array = [];
+ const customBucketsMap: Record = {};
+ customBucketsWithMetricIds.forEach((customBucketWithMetricIds) => {
+ const customBucketColumn = convertBucketToColumns(
+ { agg: customBucketWithMetricIds.customBucket, dataView, metricColumns, aggs },
+ true,
+ dropEmptyRowsInDateHistogram
+ );
+ customBucketColumns.push(customBucketColumn);
+ if (customBucketColumn) {
+ customBucketWithMetricIds.metricIds.forEach((metricAggId) => {
+ const metricColumnId = metricColumns.find(
+ (metricColumn) => metricColumn?.meta.aggId === metricAggId
+ )?.columnId;
+ if (metricColumnId) {
+ customBucketsMap[metricColumnId] = customBucketColumn.columnId;
+ }
+ });
+ }
+ });
+ return { customBucketColumns, customBucketsMap };
+};
diff --git a/test/functional/page_objects/visual_builder_page.ts b/test/functional/page_objects/visual_builder_page.ts
index be13c856c3f02..edbd53e80d8c5 100644
--- a/test/functional/page_objects/visual_builder_page.ts
+++ b/test/functional/page_objects/visual_builder_page.ts
@@ -418,8 +418,6 @@ export class VisualBuilderPageObject extends FtrService {
}
public async createColorRule(nth = 0) {
- await this.clickPanelOptions('metric');
-
const elements = await this.testSubjects.findAll('AddAddBtn');
await elements[nth].click();
await this.visChart.waitForVisualizationRenderingStabilized();
@@ -710,16 +708,16 @@ export class VisualBuilderPageObject extends FtrService {
public async setColorRuleOperator(condition: string): Promise {
await this.retry.try(async () => {
- await this.comboBox.clearInputField('colorRuleOperator');
- await this.comboBox.set('colorRuleOperator', condition);
+ await this.comboBox.clearLastInputField('colorRuleOperator');
+ await this.comboBox.setForLastInput('colorRuleOperator', condition);
});
}
- public async setColorRuleValue(value: number): Promise {
+ public async setColorRuleValue(value: number, nth: number = 0): Promise {
await this.retry.try(async () => {
- const colorRuleValueInput = await this.find.byCssSelector(
- '[data-test-subj="colorRuleValue"]'
- );
+ const colorRuleValueInput = (
+ await this.find.allByCssSelector('[data-test-subj="colorRuleValue"]')
+ )[nth];
await colorRuleValueInput.type(value.toString());
});
}
diff --git a/test/functional/page_objects/visualize_editor_page.ts b/test/functional/page_objects/visualize_editor_page.ts
index 1700b82782580..5b22ccc27a8fa 100644
--- a/test/functional/page_objects/visualize_editor_page.ts
+++ b/test/functional/page_objects/visualize_editor_page.ts
@@ -147,7 +147,12 @@ export class VisualizeEditorPageObject extends FtrService {
await this.testSubjects.click('visEditorAddFilterButton');
}
- public async selectField(fieldValue: string, groupName = 'buckets', isChildAggregation = false) {
+ public async selectField(
+ fieldValue: string,
+ groupName = 'buckets',
+ isChildAggregation = false,
+ aggregationIndex = 0
+ ) {
this.log.debug(`selectField ${fieldValue}`);
const selector = `
[data-test-subj="${groupName}AggGroup"]
@@ -156,8 +161,8 @@ export class VisualizeEditorPageObject extends FtrService {
${isChildAggregation ? '.visEditorAgg__subAgg' : ''}
[data-test-subj="visDefaultEditorField"]
`;
- const fieldEl = await this.find.byCssSelector(selector);
- await this.comboBox.setElement(fieldEl, fieldValue);
+ const fieldEls = await this.find.allByCssSelector(selector);
+ await this.comboBox.setElement(fieldEls[aggregationIndex], fieldValue);
}
public async selectOrderByMetric(aggNth: number, metric: string) {
@@ -175,16 +180,17 @@ export class VisualizeEditorPageObject extends FtrService {
public async selectAggregation(
aggValue: string,
groupName = 'buckets',
- isChildAggregation = false
+ isChildAggregation = false,
+ aggregationIndex = 0
) {
- const comboBoxElement = await this.find.byCssSelector(`
+ const comboBoxElements = await this.find.allByCssSelector(`
[data-test-subj="${groupName}AggGroup"]
[data-test-subj^="visEditorAggAccordion"].euiAccordion-isOpen
${isChildAggregation ? '.visEditorAgg__subAgg' : ''}
[data-test-subj="defaultEditorAggSelect"]
`);
- await this.comboBox.setElement(comboBoxElement, aggValue);
+ await this.comboBox.setElement(comboBoxElements[aggregationIndex], aggValue);
await this.common.sleep(500);
}
diff --git a/test/functional/page_objects/visualize_page.ts b/test/functional/page_objects/visualize_page.ts
index 634c9f4bc5005..6dd17c9c13e1c 100644
--- a/test/functional/page_objects/visualize_page.ts
+++ b/test/functional/page_objects/visualize_page.ts
@@ -148,6 +148,15 @@ export class VisualizePageObject extends FtrService {
await this.waitForVisualizationSelectPage();
}
+ public async navigateToLensFromAnotherVisulization() {
+ const button = await this.testSubjects.find('visualizeEditInLensButton');
+ await button.click();
+ }
+
+ public async hasNavigateToLensButton() {
+ return await this.testSubjects.exists('visualizeEditInLensButton');
+ }
+
public async hasVisType(type: string) {
return await this.testSubjects.exists(`visType-${type}`);
}
diff --git a/test/functional/services/combo_box.ts b/test/functional/services/combo_box.ts
index 98b04f83aa47f..96d51cd24611a 100644
--- a/test/functional/services/combo_box.ts
+++ b/test/functional/services/combo_box.ts
@@ -36,6 +36,13 @@ export class ComboBoxService extends FtrService {
await this.setElement(comboBox, value);
}
+ public async setForLastInput(comboBoxSelector: string, value: string): Promise {
+ this.log.debug(`comboBox.set, comboBoxSelector: ${comboBoxSelector}`);
+ const comboBoxes = await this.testSubjects.findAll(comboBoxSelector);
+ const comboBox = comboBoxes[comboBoxes.length - 1];
+ await this.setElement(comboBox, value);
+ }
+
/**
* Clicks option in combobox dropdown
*
@@ -308,4 +315,12 @@ export class ComboBoxService extends FtrService {
const input = await comboBoxElement.findByTagName('input');
await input.clearValueWithKeyboard();
}
+
+ public async clearLastInputField(comboBoxSelector: string): Promise {
+ this.log.debug(`comboBox.clearInputField, comboBoxSelector:${comboBoxSelector}`);
+ const comboBoxElements = await this.testSubjects.findAll(comboBoxSelector);
+ const comboBoxElement = comboBoxElements[comboBoxElements.length - 1];
+ const input = await comboBoxElement.findByTagName('input');
+ await input.clearValueWithKeyboard();
+ }
}
diff --git a/x-pack/packages/ml/aiops_utils/src/stream_factory.test.ts b/x-pack/packages/ml/aiops_utils/src/stream_factory.test.ts
index 1e6d7b40b22d0..27751b7dc3fd1 100644
--- a/x-pack/packages/ml/aiops_utils/src/stream_factory.test.ts
+++ b/x-pack/packages/ml/aiops_utils/src/stream_factory.test.ts
@@ -29,7 +29,7 @@ describe('streamFactory', () => {
let mockLogger: Logger;
beforeEach(() => {
- mockLogger = { error: jest.fn() } as unknown as Logger;
+ mockLogger = { debug: jest.fn(), error: jest.fn(), info: jest.fn() } as unknown as Logger;
});
it('should encode and receive an uncompressed string based stream', async () => {
diff --git a/x-pack/packages/ml/aiops_utils/src/stream_factory.ts b/x-pack/packages/ml/aiops_utils/src/stream_factory.ts
index fa455a04c23f1..d6e60e76efaa9 100644
--- a/x-pack/packages/ml/aiops_utils/src/stream_factory.ts
+++ b/x-pack/packages/ml/aiops_utils/src/stream_factory.ts
@@ -14,12 +14,15 @@ import type { Headers, ResponseHeaders } from '@kbn/core-http-server';
import { acceptCompression } from './accept_compression';
-// We need this otherwise Kibana server will crash with a 'ERR_METHOD_NOT_IMPLEMENTED' error.
-class ResponseStream extends Stream.PassThrough {
- flush() {}
- _read() {}
+// type guard to identify compressed stream
+function isCompressedSream(arg: unknown): arg is zlib.Gzip {
+ return typeof arg === 'object' && arg !== null && typeof (arg as zlib.Gzip).flush === 'function';
}
+const FLUSH_PAYLOAD_SIZE = 4 * 1024;
+
+class UncompressedResponseStream extends Stream.PassThrough {}
+
const DELIMITER = '\n';
type StreamType = 'string' | 'ndjson';
@@ -27,9 +30,9 @@ type StreamType = 'string' | 'ndjson';
interface StreamFactoryReturnType {
DELIMITER: string;
end: () => void;
- push: (d: T) => void;
+ push: (d: T, drain?: boolean) => void;
responseWithHeaders: {
- body: zlib.Gzip | ResponseStream;
+ body: zlib.Gzip | UncompressedResponseStream;
headers?: ResponseHeaders;
};
}
@@ -39,11 +42,16 @@ interface StreamFactoryReturnType {
* for gzip compression depending on provided request headers.
*
* @param headers - Request headers.
+ * @param logger - Kibana logger.
+ * @param compressOverride - Optional flag to override header based compression setting.
+ * @param flushFix - Adds an attribute with a random string payload to overcome buffer flushing with certain proxy configurations.
+ *
* @returns An object with stream attributes and methods.
*/
export function streamFactory(
headers: Headers,
logger: Logger,
+ compressOverride?: boolean,
flushFix?: boolean
): StreamFactoryReturnType;
/**
@@ -51,27 +59,72 @@ export function streamFactory(
* request headers. Any non-string data pushed to the stream will be stream as NDJSON.
*
* @param headers - Request headers.
+ * @param logger - Kibana logger.
+ * @param compressOverride - Optional flag to override header based compression setting.
+ * @param flushFix - Adds an attribute with a random string payload to overcome buffer flushing with certain proxy configurations.
+ *
* @returns An object with stream attributes and methods.
*/
export function streamFactory(
headers: Headers,
logger: Logger,
+ compressOverride: boolean = true,
flushFix: boolean = false
): StreamFactoryReturnType {
let streamType: StreamType;
- const isCompressed = acceptCompression(headers);
+ const isCompressed = compressOverride && acceptCompression(headers);
+
+ const stream = isCompressed ? zlib.createGzip() : new UncompressedResponseStream();
+
+ // If waiting for draining of the stream, items will be added to this buffer.
+ const backPressureBuffer: T[] = [];
- const stream = isCompressed ? zlib.createGzip() : new ResponseStream();
+ // Flag will be set when the "drain" listener is active so we can avoid setting multiple listeners.
+ let waitForDrain = false;
+
+ // Instead of a flag this is an array where we check if we are waiting on any callback from writing to the stream.
+ // It needs to be an array to avoid running into race conditions.
+ const waitForCallbacks: number[] = [];
+
+ // Flag to set if the stream should be ended. Because there could be items in the backpressure buffer, we might
+ // not want to end the stream right away. Once the backpressure buffer is cleared, we'll end the stream eventually.
+ let tryToEnd = false;
+
+ function logDebugMessage(msg: string) {
+ logger.debug(`HTTP Response Stream: ${msg}`);
+ }
function end() {
- stream.end();
+ tryToEnd = true;
+
+ logDebugMessage(`backPressureBuffer size on end(): ${backPressureBuffer.length}`);
+ logDebugMessage(`waitForCallbacks size on end(): ${waitForCallbacks.length}`);
+
+ // Before ending the stream, we need to empty the backPressureBuffer
+ if (backPressureBuffer.length > 0) {
+ const el = backPressureBuffer.shift();
+ if (el !== undefined) {
+ push(el, true);
+ }
+ return;
+ }
+
+ if (waitForCallbacks.length === 0) {
+ logDebugMessage('All backPressureBuffer and waitForCallbacks cleared, ending the stream.');
+ stream.end();
+ }
}
- function push(d: T) {
+ function push(d: T, drain = false) {
+ logDebugMessage(
+ `Push to stream. Current backPressure buffer size: ${backPressureBuffer.length}, drain flag: ${drain}`
+ );
+
if (d === undefined) {
logger.error('Stream chunk must not be undefined.');
return;
}
+
// Initialize the stream type with the first push to the stream,
// otherwise check the integrity of the data to be pushed.
if (streamType === undefined) {
@@ -84,26 +137,69 @@ export function streamFactory(
return;
}
+ if ((!drain && waitForDrain) || (!drain && backPressureBuffer.length > 0)) {
+ logDebugMessage('Adding item to backpressure buffer.');
+ backPressureBuffer.push(d);
+ return;
+ }
+
try {
const line =
streamType === 'ndjson'
? `${JSON.stringify({
...d,
// This is a temporary fix for response streaming with proxy configurations that buffer responses up to 4KB in size.
- ...(flushFix ? { flushPayload: crypto.randomBytes(4096).toString('hex') } : {}),
+ ...(flushFix
+ ? { flushPayload: crypto.randomBytes(FLUSH_PAYLOAD_SIZE).toString('hex') }
+ : {}),
})}${DELIMITER}`
: d;
- stream.write(line);
+
+ waitForCallbacks.push(1);
+ const writeOk = stream.write(line, () => {
+ waitForCallbacks.pop();
+ // Calling .flush() on a compression stream will
+ // make zlib return as much output as currently possible.
+ if (isCompressedSream(stream)) {
+ stream.flush();
+ }
+
+ if (tryToEnd && waitForCallbacks.length === 0) {
+ end();
+ }
+ });
+
+ logDebugMessage(`Ok to write to the stream again? ${writeOk}`);
+
+ if (!writeOk) {
+ logDebugMessage(`Should we add the "drain" listener?: ${!waitForDrain}`);
+ if (!waitForDrain) {
+ waitForDrain = true;
+ stream.once('drain', () => {
+ logDebugMessage(
+ 'The "drain" listener triggered, we can continue pushing to the stream.'
+ );
+
+ waitForDrain = false;
+ if (backPressureBuffer.length > 0) {
+ const el = backPressureBuffer.shift();
+ if (el !== undefined) {
+ push(el, true);
+ }
+ }
+ });
+ }
+ } else if (writeOk && drain && backPressureBuffer.length > 0) {
+ logDebugMessage('Continue clearing the backpressure buffer.');
+ const el = backPressureBuffer.shift();
+ if (el !== undefined) {
+ push(el, true);
+ }
+ }
} catch (e) {
logger.error(`Could not serialize or stream data chunk: ${e.toString()}`);
return;
}
-
- // Calling .flush() on a compression stream will
- // make zlib return as much output as currently possible.
- if (isCompressed) {
- stream.flush();
- }
}
const responseWithHeaders: StreamFactoryReturnType['responseWithHeaders'] = {
diff --git a/x-pack/plugins/actions/server/feature.ts b/x-pack/plugins/actions/server/feature.ts
index c176e9f261551..aa0b88dbee633 100644
--- a/x-pack/plugins/actions/server/feature.ts
+++ b/x-pack/plugins/actions/server/feature.ts
@@ -28,7 +28,7 @@ export const ACTIONS_FEATURE = {
app: [],
order: FEATURE_ORDER,
management: {
- insightsAndAlerting: ['triggersActions'],
+ insightsAndAlerting: ['triggersActions', 'triggersActionsConnectors'],
},
privileges: {
all: {
@@ -36,7 +36,7 @@ export const ACTIONS_FEATURE = {
api: [],
catalogue: [],
management: {
- insightsAndAlerting: ['triggersActions'],
+ insightsAndAlerting: ['triggersActions', 'triggersActionsConnectors'],
},
savedObject: {
all: [
@@ -53,7 +53,7 @@ export const ACTIONS_FEATURE = {
api: [],
catalogue: [],
management: {
- insightsAndAlerting: ['triggersActions'],
+ insightsAndAlerting: ['triggersActions', 'triggersActionsConnectors'],
},
savedObject: {
// action execution requires 'read' over `actions`, but 'all' over `action_task_params`
diff --git a/x-pack/plugins/actions/server/saved_objects/get_import_warnings.ts b/x-pack/plugins/actions/server/saved_objects/get_import_warnings.ts
index 2c8eef94f9a4d..ce2b290ed2ab4 100644
--- a/x-pack/plugins/actions/server/saved_objects/get_import_warnings.ts
+++ b/x-pack/plugins/actions/server/saved_objects/get_import_warnings.ts
@@ -29,7 +29,7 @@ export function getImportWarnings(
{
type: 'action_required',
message,
- actionPath: '/app/management/insightsAndAlerting/triggersActions/connectors',
+ actionPath: '/app/management/insightsAndAlerting/triggersActionsConnectors',
buttonLabel: GO_TO_CONNECTORS_BUTTON_LABLE,
} as SavedObjectsImportWarning,
];
diff --git a/x-pack/plugins/aiops/common/api/explain_log_rate_spikes/schema.ts b/x-pack/plugins/aiops/common/api/explain_log_rate_spikes/schema.ts
index f816af06f5324..a5d48462c5170 100644
--- a/x-pack/plugins/aiops/common/api/explain_log_rate_spikes/schema.ts
+++ b/x-pack/plugins/aiops/common/api/explain_log_rate_spikes/schema.ts
@@ -21,6 +21,9 @@ export const aiopsExplainLogRateSpikesSchema = schema.object({
deviationMax: schema.number(),
/** The index to query for log rate spikes */
index: schema.string(),
+ /** Settings to override headers derived compression and flush fix */
+ compressResponse: schema.maybe(schema.boolean()),
+ flushFix: schema.maybe(schema.boolean()),
});
export type AiopsExplainLogRateSpikesSchema = TypeOf;
diff --git a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_analysis.tsx b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_analysis.tsx
index 9949ec537b77a..74be1a0f048fc 100644
--- a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_analysis.tsx
+++ b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_analysis.tsx
@@ -95,6 +95,7 @@ export const ExplainLogRateSpikesAnalysis: FC
timeFieldName: dataView.timeFieldName ?? '',
index: dataView.title,
grouping: true,
+ flushFix: true,
...windowParameters,
},
{ reducer: streamReducer, initialState }
diff --git a/x-pack/plugins/aiops/server/routes/explain_log_rate_spikes.ts b/x-pack/plugins/aiops/server/routes/explain_log_rate_spikes.ts
index 949b535ca16fb..67cbcce241401 100644
--- a/x-pack/plugins/aiops/server/routes/explain_log_rate_spikes.ts
+++ b/x-pack/plugins/aiops/server/routes/explain_log_rate_spikes.ts
@@ -51,6 +51,9 @@ import {
markDuplicates,
} from './queries/get_simple_hierarchical_tree';
+// 10s ping frequency to keep the stream alive.
+const PING_FREQUENCY = 10000;
+
// Overall progress is a float from 0 to 1.
const LOADED_FIELD_CANDIDATES = 0.2;
const PROGRESS_STEP_P_VALUES = 0.5;
@@ -77,12 +80,12 @@ export const defineExplainLogRateSpikesRoute = (
let logMessageCounter = 1;
- function logInfoMessage(msg: string) {
- logger.info(`Explain Log Rate Spikes #${logMessageCounter}: ${msg}`);
+ function logDebugMessage(msg: string) {
+ logger.debug(`Explain Log Rate Spikes #${logMessageCounter}: ${msg}`);
logMessageCounter++;
}
- logInfoMessage('Starting analysis.');
+ logDebugMessage('Starting analysis.');
const groupingEnabled = !!request.body.grouping;
@@ -90,15 +93,16 @@ export const defineExplainLogRateSpikesRoute = (
const controller = new AbortController();
+ let isRunning = false;
let loaded = 0;
let shouldStop = false;
request.events.aborted$.subscribe(() => {
- logInfoMessage('aborted$ subscription trigger.');
+ logDebugMessage('aborted$ subscription trigger.');
shouldStop = true;
controller.abort();
});
request.events.completed$.subscribe(() => {
- logInfoMessage('completed$ subscription trigger.');
+ logDebugMessage('completed$ subscription trigger.');
shouldStop = true;
controller.abort();
});
@@ -107,17 +111,26 @@ export const defineExplainLogRateSpikesRoute = (
end: streamEnd,
push,
responseWithHeaders,
- } = streamFactory(request.headers, logger, true);
-
- function pushPing() {
- push(pingAction());
+ } = streamFactory(
+ request.headers,
+ logger,
+ request.body.compressResponse,
+ request.body.flushFix
+ );
+
+ function pushPingWithTimeout() {
+ setTimeout(() => {
+ if (isRunning) {
+ logDebugMessage('Ping message.');
+ push(pingAction());
+ pushPingWithTimeout();
+ }
+ }, PING_FREQUENCY);
}
- const pingInterval = setInterval(pushPing, 1000);
-
function end() {
- logInfoMessage('Ending analysis.');
- clearInterval(pingInterval);
+ isRunning = false;
+ logDebugMessage('Ending analysis.');
streamEnd();
}
@@ -139,15 +152,16 @@ export const defineExplainLogRateSpikesRoute = (
}
function pushError(m: string) {
- logInfoMessage('Push error.');
+ logDebugMessage('Push error.');
push(addErrorAction(m));
}
- // Async IIFE to run the analysis while not blocking returning `responseWithHeaders`.
- (async () => {
- logInfoMessage('Reset.');
+ async function runAnalysis() {
+ isRunning = true;
+ logDebugMessage('Reset.');
push(resetAction());
- logInfoMessage('Load field candidates.');
+ pushPingWithTimeout();
+ logDebugMessage('Load field candidates.');
push(
updateLoadingStateAction({
ccsWarning: false,
@@ -204,11 +218,11 @@ export const defineExplainLogRateSpikesRoute = (
const fieldCandidatesChunks = chunk(fieldCandidates, chunkSize);
- logInfoMessage('Fetch p-values.');
+ logDebugMessage('Fetch p-values.');
for (const fieldCandidatesChunk of fieldCandidatesChunks) {
chunkCount++;
- logInfoMessage(`Fetch p-values. Chunk ${chunkCount} of ${fieldCandidatesChunks.length}`);
+ logDebugMessage(`Fetch p-values. Chunk ${chunkCount} of ${fieldCandidatesChunks.length}`);
let pValues: Awaited>;
try {
pValues = await fetchChangePointPValues(
@@ -258,7 +272,7 @@ export const defineExplainLogRateSpikesRoute = (
);
if (shouldStop) {
- logInfoMessage('shouldStop fetching p-values.');
+ logDebugMessage('shouldStop fetching p-values.');
end();
return;
@@ -266,7 +280,7 @@ export const defineExplainLogRateSpikesRoute = (
}
if (changePoints?.length === 0) {
- logInfoMessage('Stopping analysis, did not find change points.');
+ logDebugMessage('Stopping analysis, did not find change points.');
endWithUpdatedLoadingState();
return;
}
@@ -275,7 +289,7 @@ export const defineExplainLogRateSpikesRoute = (
{ fieldName: request.body.timeFieldName, type: KBN_FIELD_TYPES.DATE },
];
- logInfoMessage('Fetch overall histogram.');
+ logDebugMessage('Fetch overall histogram.');
let overallTimeSeries: NumericChartData | undefined;
try {
@@ -313,7 +327,7 @@ export const defineExplainLogRateSpikesRoute = (
}
if (groupingEnabled) {
- logInfoMessage('Group results.');
+ logDebugMessage('Group results.');
push(
updateLoadingStateAction({
@@ -498,7 +512,7 @@ export const defineExplainLogRateSpikesRoute = (
pushHistogramDataLoadingState();
- logInfoMessage('Fetch group histograms.');
+ logDebugMessage('Fetch group histograms.');
await asyncForEach(changePointGroups, async (cpg) => {
if (overallTimeSeries !== undefined) {
@@ -577,7 +591,7 @@ export const defineExplainLogRateSpikesRoute = (
loaded += PROGRESS_STEP_HISTOGRAMS_GROUPS;
- logInfoMessage('Fetch field/value histograms.');
+ logDebugMessage('Fetch field/value histograms.');
// time series filtered by fields
if (changePoints && overallTimeSeries !== undefined) {
@@ -661,7 +675,10 @@ export const defineExplainLogRateSpikesRoute = (
}
endWithUpdatedLoadingState();
- })();
+ }
+
+ // Do not call this using `await` so it will run asynchronously while we return the stream already.
+ runAnalysis();
return response.ok(responseWithHeaders);
}
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations.ts b/x-pack/plugins/alerting/server/saved_objects/migrations.ts
deleted file mode 100644
index 20ebb7b4eb8e9..0000000000000
--- a/x-pack/plugins/alerting/server/saved_objects/migrations.ts
+++ /dev/null
@@ -1,1082 +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 { isRuleType, ruleTypeMappings } from '@kbn/securitysolution-rules';
-import { isString } from 'lodash/fp';
-import { omit, pick } from 'lodash';
-import moment from 'moment-timezone';
-import { gte } from 'semver';
-import {
- LogMeta,
- SavedObjectMigrationMap,
- SavedObjectUnsanitizedDoc,
- SavedObjectMigrationFn,
- SavedObjectMigrationContext,
- SavedObjectAttributes,
- SavedObjectAttribute,
- SavedObjectReference,
-} from '@kbn/core/server';
-import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
-import type { IsMigrationNeededPredicate } from '@kbn/encrypted-saved-objects-plugin/server';
-import { MigrateFunctionsObject, MigrateFunction } from '@kbn/kibana-utils-plugin/common';
-import { mergeSavedObjectMigrationMaps } from '@kbn/core/server';
-import { isSerializedSearchSource, SerializedSearchSourceFields } from '@kbn/data-plugin/common';
-import { extractRefsFromGeoContainmentAlert } from './geo_containment/migrations';
-import { RawRule, RawRuleAction, RawRuleExecutionStatus } from '../types';
-import { getMappedParams } from '../rules_client/lib/mapped_params_utils';
-
-const SIEM_APP_ID = 'securitySolution';
-const SIEM_SERVER_APP_ID = 'siem';
-const MINIMUM_SS_MIGRATION_VERSION = '8.3.0';
-export const LEGACY_LAST_MODIFIED_VERSION = 'pre-7.10.0';
-export const FILEBEAT_7X_INDICATOR_PATH = 'threatintel.indicator';
-
-interface AlertLogMeta extends LogMeta {
- migrations: { alertDocument: SavedObjectUnsanitizedDoc };
-}
-
-type AlertMigration = (
- doc: SavedObjectUnsanitizedDoc,
- context: SavedObjectMigrationContext
-) => SavedObjectUnsanitizedDoc;
-
-function createEsoMigration(
- encryptedSavedObjects: EncryptedSavedObjectsPluginSetup,
- isMigrationNeededPredicate: IsMigrationNeededPredicate,
- migrationFunc: AlertMigration
-) {
- return encryptedSavedObjects.createMigration({
- isMigrationNeededPredicate,
- migration: migrationFunc,
- shouldMigrateIfDecryptionFails: true, // shouldMigrateIfDecryptionFails flag that applies the migration to undecrypted document if decryption fails
- });
-}
-
-const SUPPORT_INCIDENTS_ACTION_TYPES = ['.servicenow', '.jira', '.resilient'];
-
-export const isAnyActionSupportIncidents = (doc: SavedObjectUnsanitizedDoc): boolean =>
- doc.attributes.actions.some((action) =>
- SUPPORT_INCIDENTS_ACTION_TYPES.includes(action.actionTypeId)
- );
-
-// Deprecated in 8.0
-export const isSiemSignalsRuleType = (doc: SavedObjectUnsanitizedDoc): boolean =>
- doc.attributes.alertTypeId === 'siem.signals';
-
-export const isEsQueryRuleType = (doc: SavedObjectUnsanitizedDoc) =>
- doc.attributes.alertTypeId === '.es-query';
-
-export const isDetectionEngineAADRuleType = (doc: SavedObjectUnsanitizedDoc): boolean =>
- (Object.values(ruleTypeMappings) as string[]).includes(doc.attributes.alertTypeId);
-
-/**
- * Returns true if the alert type is that of "siem.notifications" which is a legacy notification system that was deprecated in 7.16.0
- * in favor of using the newer alerting notifications system.
- * @param doc The saved object alert type document
- * @returns true if this is a legacy "siem.notifications" rule, otherwise false
- * @deprecated Once we are confident all rules relying on side-car actions SO's have been migrated to SO references we should remove this function
- */
-export const isSecuritySolutionLegacyNotification = (
- doc: SavedObjectUnsanitizedDoc
-): boolean => doc.attributes.alertTypeId === 'siem.notifications';
-
-export function getMigrations(
- encryptedSavedObjects: EncryptedSavedObjectsPluginSetup,
- searchSourceMigrations: MigrateFunctionsObject,
- isPreconfigured: (connectorId: string) => boolean
-): SavedObjectMigrationMap {
- const migrationWhenRBACWasIntroduced = createEsoMigration(
- encryptedSavedObjects,
- // migrate all documents in 7.10 in order to add the "meta" RBAC field
- (doc): doc is SavedObjectUnsanitizedDoc => true,
- pipeMigrations(
- markAsLegacyAndChangeConsumer,
- setAlertIdAsDefaultDedupkeyOnPagerDutyActions,
- initializeExecutionStatus
- )
- );
-
- const migrationAlertUpdatedAtAndNotifyWhen = createEsoMigration(
- encryptedSavedObjects,
- // migrate all documents in 7.11 in order to add the "updatedAt" and "notifyWhen" fields
- (doc): doc is SavedObjectUnsanitizedDoc => true,
- pipeMigrations(setAlertUpdatedAtDate, setNotifyWhen)
- );
-
- const migrationActions7112 = createEsoMigration(
- encryptedSavedObjects,
- (doc): doc is SavedObjectUnsanitizedDoc => isAnyActionSupportIncidents(doc),
- pipeMigrations(restructureConnectorsThatSupportIncident)
- );
-
- const migrationSecurityRules713 = createEsoMigration(
- encryptedSavedObjects,
- (doc): doc is SavedObjectUnsanitizedDoc => isSiemSignalsRuleType(doc),
- pipeMigrations(removeNullsFromSecurityRules)
- );
-
- const migrationSecurityRules714 = createEsoMigration(
- encryptedSavedObjects,
- (doc): doc is SavedObjectUnsanitizedDoc => isSiemSignalsRuleType(doc),
- pipeMigrations(removeNullAuthorFromSecurityRules)
- );
-
- const migrationSecurityRules715 = createEsoMigration(
- encryptedSavedObjects,
- (doc): doc is SavedObjectUnsanitizedDoc => isSiemSignalsRuleType(doc),
- pipeMigrations(addExceptionListsToReferences)
- );
-
- const migrateRules716 = createEsoMigration(
- encryptedSavedObjects,
- (doc): doc is SavedObjectUnsanitizedDoc => true,
- pipeMigrations(
- setLegacyId,
- getRemovePreconfiguredConnectorsFromReferencesFn(isPreconfigured),
- addRuleIdsToLegacyNotificationReferences,
- extractRefsFromGeoContainmentAlert
- )
- );
-
- const migrationRules800 = createEsoMigration(
- encryptedSavedObjects,
- (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
- pipeMigrations(
- addThreatIndicatorPathToThreatMatchRules,
- addSecuritySolutionAADRuleTypes,
- fixInventoryThresholdGroupId
- )
- );
-
- const migrationRules801 = createEsoMigration(
- encryptedSavedObjects,
- (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
- pipeMigrations(addSecuritySolutionAADRuleTypeTags)
- );
-
- const migrationRules820 = createEsoMigration(
- encryptedSavedObjects,
- (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
- pipeMigrations(addMappedParams)
- );
-
- const migrationRules830 = createEsoMigration(
- encryptedSavedObjects,
- (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
- pipeMigrations(addSearchType, removeInternalTags, convertSnoozes)
- );
-
- const migrationRules841 = createEsoMigration(
- encryptedSavedObjects,
- (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
- pipeMigrations(removeIsSnoozedUntil)
- );
-
- const migrationRules850 = createEsoMigration(
- encryptedSavedObjects,
- (doc): doc is SavedObjectUnsanitizedDoc => isEsQueryRuleType(doc),
- pipeMigrations(stripOutRuntimeFieldsInOldESQuery)
- );
-
- return mergeSavedObjectMigrationMaps(
- {
- '7.10.0': executeMigrationWithErrorHandling(migrationWhenRBACWasIntroduced, '7.10.0'),
- '7.11.0': executeMigrationWithErrorHandling(migrationAlertUpdatedAtAndNotifyWhen, '7.11.0'),
- '7.11.2': executeMigrationWithErrorHandling(migrationActions7112, '7.11.2'),
- '7.13.0': executeMigrationWithErrorHandling(migrationSecurityRules713, '7.13.0'),
- '7.14.1': executeMigrationWithErrorHandling(migrationSecurityRules714, '7.14.1'),
- '7.15.0': executeMigrationWithErrorHandling(migrationSecurityRules715, '7.15.0'),
- '7.16.0': executeMigrationWithErrorHandling(migrateRules716, '7.16.0'),
- '8.0.0': executeMigrationWithErrorHandling(migrationRules800, '8.0.0'),
- '8.0.1': executeMigrationWithErrorHandling(migrationRules801, '8.0.1'),
- '8.2.0': executeMigrationWithErrorHandling(migrationRules820, '8.2.0'),
- '8.3.0': executeMigrationWithErrorHandling(migrationRules830, '8.3.0'),
- '8.4.1': executeMigrationWithErrorHandling(migrationRules841, '8.4.1'),
- '8.5.0': executeMigrationWithErrorHandling(migrationRules850, '8.5.0'),
- },
- getSearchSourceMigrations(encryptedSavedObjects, searchSourceMigrations)
- );
-}
-
-function executeMigrationWithErrorHandling(
- migrationFunc: SavedObjectMigrationFn,
- version: string
-) {
- return (doc: SavedObjectUnsanitizedDoc, context: SavedObjectMigrationContext) => {
- try {
- return migrationFunc(doc, context);
- } catch (ex) {
- context.log.error(
- `encryptedSavedObject ${version} migration failed for alert ${doc.id} with error: ${ex.message}`,
- {
- migrations: {
- alertDocument: doc,
- },
- }
- );
- throw ex;
- }
- };
-}
-
-const setAlertUpdatedAtDate = (
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc => {
- const updatedAt = doc.updated_at || doc.attributes.createdAt;
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- updatedAt,
- },
- };
-};
-
-const setNotifyWhen = (
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc => {
- const notifyWhen = doc.attributes.throttle ? 'onThrottleInterval' : 'onActiveAlert';
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- notifyWhen,
- },
- };
-};
-
-const consumersToChange: Map = new Map(
- Object.entries({
- alerting: 'alerts',
- metrics: 'infrastructure',
- [SIEM_APP_ID]: SIEM_SERVER_APP_ID,
- })
-);
-
-function markAsLegacyAndChangeConsumer(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const {
- attributes: { consumer },
- } = doc;
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- consumer: consumersToChange.get(consumer) ?? consumer,
- // mark any alert predating 7.10 as a legacy alert
- meta: {
- versionApiKeyLastmodified: LEGACY_LAST_MODIFIED_VERSION,
- },
- },
- };
-}
-
-function setAlertIdAsDefaultDedupkeyOnPagerDutyActions(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const { attributes } = doc;
- return {
- ...doc,
- attributes: {
- ...attributes,
- ...(attributes.actions
- ? {
- actions: attributes.actions.map((action) => {
- if (action.actionTypeId !== '.pagerduty' || action.params.eventAction === 'trigger') {
- return action;
- }
- return {
- ...action,
- params: {
- ...action.params,
- dedupKey: action.params.dedupKey ?? '{{alertId}}',
- },
- };
- }),
- }
- : {}),
- },
- };
-}
-
-function initializeExecutionStatus(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const { attributes } = doc;
- return {
- ...doc,
- attributes: {
- ...attributes,
- executionStatus: {
- status: 'pending',
- lastExecutionDate: new Date().toISOString(),
- error: null,
- } as RawRuleExecutionStatus,
- },
- };
-}
-
-function isEmptyObject(obj: {}) {
- for (const attr in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, attr)) {
- return false;
- }
- }
- return true;
-}
-
-function restructureConnectorsThatSupportIncident(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const { actions } = doc.attributes;
- const newActions = actions.reduce((acc, action) => {
- if (
- ['.servicenow', '.jira', '.resilient'].includes(action.actionTypeId) &&
- action.params.subAction === 'pushToService'
- ) {
- // Future developer, we needed to do that because when we created this migration
- // we forget to think about user already using 7.11.0 and having an incident attribute build the right way
- // IMPORTANT -> if you change this code please do the same inside of this file
- // x-pack/plugins/alerting/server/saved_objects/migrations.ts
- const subActionParamsIncident =
- (action.params?.subActionParams as SavedObjectAttributes)?.incident ?? null;
- if (subActionParamsIncident != null && !isEmptyObject(subActionParamsIncident)) {
- return [...acc, action];
- }
- if (action.actionTypeId === '.servicenow') {
- const {
- title,
- comments,
- comment,
- description,
- severity,
- urgency,
- impact,
- short_description: shortDescription,
- } = action.params.subActionParams as {
- title: string;
- description?: string;
- severity?: string;
- urgency?: string;
- impact?: string;
- comment?: string;
- comments?: Array<{ commentId: string; comment: string }>;
- short_description?: string;
- };
- return [
- ...acc,
- {
- ...action,
- params: {
- subAction: 'pushToService',
- subActionParams: {
- incident: {
- short_description: shortDescription ?? title,
- description,
- severity,
- urgency,
- impact,
- },
- comments: [
- ...(comments ?? []),
- ...(comment != null ? [{ commentId: '1', comment }] : []),
- ],
- },
- },
- },
- ] as RawRuleAction[];
- } else if (action.actionTypeId === '.jira') {
- const { title, comments, description, issueType, priority, labels, parent, summary } =
- action.params.subActionParams as {
- title: string;
- description: string;
- issueType: string;
- priority?: string;
- labels?: string[];
- parent?: string;
- comments?: unknown[];
- summary?: string;
- };
- return [
- ...acc,
- {
- ...action,
- params: {
- subAction: 'pushToService',
- subActionParams: {
- incident: {
- summary: summary ?? title,
- description,
- issueType,
- priority,
- labels,
- parent,
- },
- comments,
- },
- },
- },
- ] as RawRuleAction[];
- } else if (action.actionTypeId === '.resilient') {
- const { title, comments, description, incidentTypes, severityCode, name } = action.params
- .subActionParams as {
- title: string;
- description: string;
- incidentTypes?: number[];
- severityCode?: number;
- comments?: unknown[];
- name?: string;
- };
- return [
- ...acc,
- {
- ...action,
- params: {
- subAction: 'pushToService',
- subActionParams: {
- incident: {
- name: name ?? title,
- description,
- incidentTypes,
- severityCode,
- },
- comments,
- },
- },
- },
- ] as RawRuleAction[];
- }
- }
-
- return [...acc, action];
- }, [] as RawRuleAction[]);
-
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- actions: newActions,
- },
- };
-}
-
-function convertNullToUndefined(attribute: SavedObjectAttribute) {
- return attribute != null ? attribute : undefined;
-}
-
-function removeNullsFromSecurityRules(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const {
- attributes: { params },
- } = doc;
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- params: {
- ...params,
- buildingBlockType: convertNullToUndefined(params.buildingBlockType),
- note: convertNullToUndefined(params.note),
- index: convertNullToUndefined(params.index),
- language: convertNullToUndefined(params.language),
- license: convertNullToUndefined(params.license),
- outputIndex: convertNullToUndefined(params.outputIndex),
- savedId: convertNullToUndefined(params.savedId),
- timelineId: convertNullToUndefined(params.timelineId),
- timelineTitle: convertNullToUndefined(params.timelineTitle),
- meta: convertNullToUndefined(params.meta),
- query: convertNullToUndefined(params.query),
- filters: convertNullToUndefined(params.filters),
- riskScoreMapping: params.riskScoreMapping != null ? params.riskScoreMapping : [],
- ruleNameOverride: convertNullToUndefined(params.ruleNameOverride),
- severityMapping: params.severityMapping != null ? params.severityMapping : [],
- threat: params.threat != null ? params.threat : [],
- threshold:
- params.threshold != null &&
- typeof params.threshold === 'object' &&
- !Array.isArray(params.threshold)
- ? {
- field: Array.isArray(params.threshold.field)
- ? params.threshold.field
- : params.threshold.field === '' || params.threshold.field == null
- ? []
- : [params.threshold.field],
- value: params.threshold.value,
- cardinality:
- params.threshold.cardinality != null ? params.threshold.cardinality : [],
- }
- : undefined,
- timestampOverride: convertNullToUndefined(params.timestampOverride),
- exceptionsList:
- params.exceptionsList != null
- ? params.exceptionsList
- : params.exceptions_list != null
- ? params.exceptions_list
- : params.lists != null
- ? params.lists
- : [],
- threatFilters: convertNullToUndefined(params.threatFilters),
- machineLearningJobId:
- params.machineLearningJobId == null
- ? undefined
- : Array.isArray(params.machineLearningJobId)
- ? params.machineLearningJobId
- : [params.machineLearningJobId],
- },
- },
- };
-}
-
-/**
- * The author field was introduced later and was not part of the original rules. We overlooked
- * the filling in the author field as an empty array in an earlier upgrade routine from
- * 'removeNullsFromSecurityRules' during the 7.13.0 upgrade. Since we don't change earlier migrations,
- * but rather only move forward with the "arrow of time" we are going to upgrade and fix
- * it if it is missing for anyone in 7.14.0 and above release. Earlier releases if we want to fix them,
- * would have to be modified as a "7.13.1", etc... if we want to fix it there.
- * @param doc The document that is not migrated and contains a "null" or "undefined" author field
- * @returns The document with the author field fleshed in.
- */
-function removeNullAuthorFromSecurityRules(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const {
- attributes: { params },
- } = doc;
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- params: {
- ...params,
- author: params.author != null ? params.author : [],
- },
- },
- };
-}
-
-/**
- * This migrates exception list containers to saved object references on an upgrade.
- * We only migrate if we find these conditions:
- * - exceptionLists are an array and not null, undefined, or malformed data.
- * - The exceptionList item is an object and id is a string and not null, undefined, or malformed data
- * - The existing references do not already have an exceptionItem reference already found within it.
- * Some of these issues could crop up during either user manual errors of modifying things, earlier migration
- * issues, etc...
- * @param doc The document that might have exceptionListItems to migrate
- * @returns The document migrated with saved object references
- */
-function addExceptionListsToReferences(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const {
- attributes: {
- params: { exceptionsList },
- },
- references,
- } = doc;
- if (!Array.isArray(exceptionsList)) {
- // early return if we are not an array such as being undefined or null or malformed.
- return doc;
- } else {
- const exceptionsToTransform = removeMalformedExceptionsList(exceptionsList);
- const newReferences = exceptionsToTransform.flatMap(
- (exceptionItem, index) => {
- const existingReferenceFound = references?.find((reference) => {
- return (
- reference.id === exceptionItem.id &&
- ((reference.type === 'exception-list' && exceptionItem.namespace_type === 'single') ||
- (reference.type === 'exception-list-agnostic' &&
- exceptionItem.namespace_type === 'agnostic'))
- );
- });
- if (existingReferenceFound) {
- // skip if the reference already exists for some uncommon reason so we do not add an additional one.
- // This enables us to be idempotent and you can run this migration multiple times and get the same output.
- return [];
- } else {
- return [
- {
- name: `param:exceptionsList_${index}`,
- id: String(exceptionItem.id),
- type:
- exceptionItem.namespace_type === 'agnostic'
- ? 'exception-list-agnostic'
- : 'exception-list',
- },
- ];
- }
- }
- );
- if (references == null && newReferences.length === 0) {
- // Avoid adding an empty references array if the existing saved object never had one to begin with
- return doc;
- } else {
- return { ...doc, references: [...(references ?? []), ...newReferences] };
- }
- }
-}
-
-/**
- * This will do a flatMap reduce where we only return exceptionsLists and their items if:
- * - exceptionLists are an array and not null, undefined, or malformed data.
- * - The exceptionList item is an object and id is a string and not null, undefined, or malformed data
- *
- * Some of these issues could crop up during either user manual errors of modifying things, earlier migration
- * issues, etc...
- * @param exceptionsList The list of exceptions
- * @returns The exception lists if they are a valid enough shape
- */
-function removeMalformedExceptionsList(
- exceptionsList: SavedObjectAttribute
-): SavedObjectAttributes[] {
- if (!Array.isArray(exceptionsList)) {
- // early return if we are not an array such as being undefined or null or malformed.
- return [];
- } else {
- return exceptionsList.flatMap((exceptionItem) => {
- if (!(exceptionItem instanceof Object) || !isString(exceptionItem.id)) {
- // return early if we are not an object such as being undefined or null or malformed
- // or the exceptionItem.id is not a string from being malformed
- return [];
- } else {
- return [exceptionItem];
- }
- });
- }
-}
-
-/**
- * This migrates rule_id's within the legacy siem.notification to saved object references on an upgrade.
- * We only migrate if we find these conditions:
- * - ruleAlertId is a string and not null, undefined, or malformed data.
- * - The existing references do not already have a ruleAlertId found within it.
- * Some of these issues could crop up during either user manual errors of modifying things, earlier migration
- * issues, etc... so we are safer to check them as possibilities
- * @deprecated Once we are confident all rules relying on side-car actions SO's have been migrated to SO references we should remove this function
- * @param doc The document that might have "ruleAlertId" to migrate into the references
- * @returns The document migrated with saved object references
- */
-function addRuleIdsToLegacyNotificationReferences(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const {
- attributes: {
- params: { ruleAlertId },
- },
- references,
- } = doc;
- if (!isSecuritySolutionLegacyNotification(doc) || !isString(ruleAlertId)) {
- // early return if we are not a string or if we are not a security solution notification saved object.
- return doc;
- } else {
- const existingReferences = references ?? [];
- const existingReferenceFound = existingReferences.find((reference) => {
- return reference.id === ruleAlertId && reference.type === 'alert';
- });
- if (existingReferenceFound) {
- // skip this if the references already exists for some uncommon reason so we do not add an additional one.
- return doc;
- } else {
- const savedObjectReference: SavedObjectReference = {
- id: ruleAlertId,
- name: 'param:alert_0',
- type: 'alert',
- };
- const newReferences = [...existingReferences, savedObjectReference];
- return { ...doc, references: newReferences };
- }
- }
-}
-
-function setLegacyId(doc: SavedObjectUnsanitizedDoc): SavedObjectUnsanitizedDoc {
- const { id } = doc;
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- legacyId: id,
- },
- };
-}
-
-function addSecuritySolutionAADRuleTypes(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const ruleType = doc.attributes.params.type;
- return isSiemSignalsRuleType(doc) && isRuleType(ruleType)
- ? {
- ...doc,
- attributes: {
- ...doc.attributes,
- alertTypeId: ruleTypeMappings[ruleType],
- enabled: false,
- params: {
- ...doc.attributes.params,
- outputIndex: '',
- },
- },
- }
- : doc;
-}
-
-function addSearchType(doc: SavedObjectUnsanitizedDoc) {
- const searchType = doc.attributes.params.searchType;
-
- return isEsQueryRuleType(doc) && !searchType
- ? {
- ...doc,
- attributes: {
- ...doc.attributes,
- params: {
- ...doc.attributes.params,
- searchType: 'esQuery',
- },
- },
- }
- : doc;
-}
-
-function addSecuritySolutionAADRuleTypeTags(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const ruleType = doc.attributes.params.type;
- return isDetectionEngineAADRuleType(doc) && isRuleType(ruleType)
- ? {
- ...doc,
- attributes: {
- ...doc.attributes,
- // If the rule is disabled at this point, then the rule has not been re-enabled after
- // running the 8.0.0 migrations. If `doc.attributes.scheduledTaskId` exists, then the
- // rule was enabled prior to running the migration. Thus we know we should add the
- // tag to indicate it was auto-disabled.
- tags:
- !doc.attributes.enabled && doc.attributes.scheduledTaskId
- ? [...(doc.attributes.tags ?? []), 'auto_disabled_8.0']
- : doc.attributes.tags ?? [],
- },
- }
- : doc;
-}
-
-function stripOutRuntimeFieldsInOldESQuery(
- doc: SavedObjectUnsanitizedDoc,
- context: SavedObjectMigrationContext
-): SavedObjectUnsanitizedDoc {
- const isESDSLrule =
- isEsQueryRuleType(doc) && !isSerializedSearchSource(doc.attributes.params.searchConfiguration);
-
- if (isESDSLrule) {
- try {
- const parsedQuery = JSON.parse(doc.attributes.params.esQuery as string);
- // parsing and restringifying will cause us to lose the formatting so we only do so if this rule has
- // fields other than `query` which is the only valid field at this stage
- const hasFieldsOtherThanQuery = Object.keys(parsedQuery).some((key) => key !== 'query');
- return hasFieldsOtherThanQuery
- ? {
- ...doc,
- attributes: {
- ...doc.attributes,
- params: {
- ...doc.attributes.params,
- esQuery: JSON.stringify(pick(parsedQuery, 'query'), null, 4),
- },
- },
- }
- : doc;
- } catch (err) {
- // Instead of failing the upgrade when an unparsable rule is encountered, we log that the rule caouldn't be migrated and
- // as a result legacy parameters might cause the rule to behave differently if it is, in fact, still running at all
- context.log.error(
- `unable to migrate and remove legacy runtime fields in rule ${doc.id} due to invalid query: "${doc.attributes.params.esQuery}" - query must be JSON`,
- {
- migrations: {
- alertDocument: doc,
- },
- }
- );
- }
- }
- return doc;
-}
-
-function addThreatIndicatorPathToThreatMatchRules(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- return isSiemSignalsRuleType(doc) &&
- doc.attributes.params?.type === 'threat_match' &&
- !doc.attributes.params.threatIndicatorPath
- ? {
- ...doc,
- attributes: {
- ...doc.attributes,
- params: {
- ...doc.attributes.params,
- threatIndicatorPath: FILEBEAT_7X_INDICATOR_PATH,
- },
- },
- }
- : doc;
-}
-
-function getRemovePreconfiguredConnectorsFromReferencesFn(
- isPreconfigured: (connectorId: string) => boolean
-) {
- return (doc: SavedObjectUnsanitizedDoc) => {
- return removePreconfiguredConnectorsFromReferences(doc, isPreconfigured);
- };
-}
-
-function removePreconfiguredConnectorsFromReferences(
- doc: SavedObjectUnsanitizedDoc,
- isPreconfigured: (connectorId: string) => boolean
-): SavedObjectUnsanitizedDoc {
- const {
- attributes: { actions },
- references,
- } = doc;
-
- // Look for connector references
- const connectorReferences = (references ?? []).filter((ref: SavedObjectReference) =>
- ref.name.startsWith('action_')
- );
- if (connectorReferences.length > 0) {
- const restReferences = (references ?? []).filter(
- (ref: SavedObjectReference) => !ref.name.startsWith('action_')
- );
-
- const updatedConnectorReferences: SavedObjectReference[] = [];
- const updatedActions: RawRule['actions'] = [];
-
- // For each connector reference, check if connector is preconfigured
- // If yes, we need to remove from the references array and update
- // the corresponding action so it directly references the preconfigured connector id
- connectorReferences.forEach((connectorRef: SavedObjectReference) => {
- // Look for the corresponding entry in the actions array
- const correspondingAction = getCorrespondingAction(actions, connectorRef.name);
- if (correspondingAction) {
- if (isPreconfigured(connectorRef.id)) {
- updatedActions.push({
- ...correspondingAction,
- actionRef: `preconfigured:${connectorRef.id}`,
- });
- } else {
- updatedActions.push(correspondingAction);
- updatedConnectorReferences.push(connectorRef);
- }
- } else {
- // Couldn't find the matching action, leave as is
- updatedConnectorReferences.push(connectorRef);
- }
- });
-
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- actions: [...updatedActions],
- },
- references: [...updatedConnectorReferences, ...restReferences],
- };
- }
- return doc;
-}
-
-// This fixes an issue whereby metrics.alert.inventory.threshold rules had the
-// group for actions incorrectly spelt as metrics.invenotry_threshold.fired vs metrics.inventory_threshold.fired
-function fixInventoryThresholdGroupId(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- if (doc.attributes.alertTypeId === 'metrics.alert.inventory.threshold') {
- const {
- attributes: { actions },
- } = doc;
-
- const updatedActions = actions
- ? actions.map((action) => {
- // Wrong spelling
- if (action.group === 'metrics.invenotry_threshold.fired') {
- return {
- ...action,
- group: 'metrics.inventory_threshold.fired',
- };
- } else {
- return action;
- }
- })
- : [];
-
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- actions: updatedActions,
- },
- };
- } else {
- return doc;
- }
-}
-
-function addMappedParams(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const {
- attributes: { params },
- } = doc;
-
- const mappedParams = getMappedParams(params);
-
- if (Object.keys(mappedParams).length) {
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- mapped_params: mappedParams,
- },
- };
- }
-
- return doc;
-}
-
-function convertSnoozes(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- const {
- attributes: { snoozeEndTime },
- } = doc;
-
- return {
- ...doc,
- attributes: {
- ...(omit(doc.attributes, ['snoozeEndTime']) as RawRule),
- snoozeSchedule: snoozeEndTime
- ? [
- {
- duration: Date.parse(snoozeEndTime as string) - Date.now(),
- rRule: {
- dtstart: new Date().toISOString(),
- tzid: moment.tz.guess(),
- count: 1,
- },
- },
- ]
- : [],
- },
- };
-}
-
-function getCorrespondingAction(
- actions: SavedObjectAttribute,
- connectorRef: string
-): RawRuleAction | null {
- if (!Array.isArray(actions)) {
- return null;
- } else {
- return actions.find(
- (action) => (action as RawRuleAction)?.actionRef === connectorRef
- ) as RawRuleAction;
- }
-}
-/**
- * removes internal tags(starts with '__internal') from Security Solution rules
- * @param doc rule to be migrated
- * @returns migrated rule if it's Security Solution rule or unchanged if not
- */
-function removeInternalTags(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- if (!isDetectionEngineAADRuleType(doc)) {
- return doc;
- }
-
- const {
- attributes: { tags },
- } = doc;
-
- const filteredTags = (tags ?? []).filter((tag) => !tag.startsWith('__internal_'));
-
- return {
- ...doc,
- attributes: {
- ...doc.attributes,
- tags: filteredTags,
- },
- };
-}
-
-function pipeMigrations(...migrations: AlertMigration[]): AlertMigration {
- return (doc: SavedObjectUnsanitizedDoc, context: SavedObjectMigrationContext) =>
- migrations.reduce((migratedDoc, nextMigration) => nextMigration(migratedDoc, context), doc);
-}
-
-function mapSearchSourceMigrationFunc(
- migrateSerializedSearchSourceFields: MigrateFunction
-): MigrateFunction {
- return (doc) => {
- const _doc = doc as { attributes: RawRule };
-
- const serializedSearchSource = _doc.attributes.params.searchConfiguration;
-
- if (isSerializedSearchSource(serializedSearchSource)) {
- return {
- ..._doc,
- attributes: {
- ..._doc.attributes,
- params: {
- ..._doc.attributes.params,
- searchConfiguration: migrateSerializedSearchSourceFields(serializedSearchSource),
- },
- },
- };
- }
- return _doc;
- };
-}
-
-/**
- * This creates a migration map that applies search source migrations to legacy es query rules.
- * It doesn't modify existing migrations. The following migrations will occur at minimum version of 8.3+.
- */
-function getSearchSourceMigrations(
- encryptedSavedObjects: EncryptedSavedObjectsPluginSetup,
- searchSourceMigrations: MigrateFunctionsObject
-) {
- const filteredMigrations: SavedObjectMigrationMap = {};
- for (const versionKey in searchSourceMigrations) {
- if (gte(versionKey, MINIMUM_SS_MIGRATION_VERSION)) {
- const migrateSearchSource = mapSearchSourceMigrationFunc(
- searchSourceMigrations[versionKey]
- ) as unknown as AlertMigration;
-
- filteredMigrations[versionKey] = executeMigrationWithErrorHandling(
- createEsoMigration(
- encryptedSavedObjects,
- (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc =>
- isEsQueryRuleType(doc),
- pipeMigrations(migrateSearchSource)
- ),
- versionKey
- );
- }
- }
- return filteredMigrations;
-}
-
-function removeIsSnoozedUntil(
- doc: SavedObjectUnsanitizedDoc
-): SavedObjectUnsanitizedDoc {
- return {
- ...doc,
- attributes: {
- ...(omit(doc.attributes, ['isSnoozedUntil']) as RawRule),
- },
- };
-}
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/7.10/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/7.10/index.ts
new file mode 100644
index 0000000000000..b432ff01618df
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/7.10/index.ts
@@ -0,0 +1,96 @@
+/*
+ * 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 { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { RawRule, RawRuleExecutionStatus } from '../../../types';
+import { LEGACY_LAST_MODIFIED_VERSION, SIEM_APP_ID, SIEM_SERVER_APP_ID } from '../constants';
+import { createEsoMigration, pipeMigrations } from '../utils';
+
+const consumersToChange: Map = new Map(
+ Object.entries({
+ alerting: 'alerts',
+ metrics: 'infrastructure',
+ [SIEM_APP_ID]: SIEM_SERVER_APP_ID,
+ })
+);
+
+function markAsLegacyAndChangeConsumer(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const {
+ attributes: { consumer },
+ } = doc;
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ consumer: consumersToChange.get(consumer) ?? consumer,
+ // mark any alert predating 7.10 as a legacy alert
+ meta: {
+ versionApiKeyLastmodified: LEGACY_LAST_MODIFIED_VERSION,
+ },
+ },
+ };
+}
+
+function setAlertIdAsDefaultDedupkeyOnPagerDutyActions(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const { attributes } = doc;
+ return {
+ ...doc,
+ attributes: {
+ ...attributes,
+ ...(attributes.actions
+ ? {
+ actions: attributes.actions.map((action) => {
+ if (action.actionTypeId !== '.pagerduty' || action.params.eventAction === 'trigger') {
+ return action;
+ }
+ return {
+ ...action,
+ params: {
+ ...action.params,
+ dedupKey: action.params.dedupKey ?? '{{alertId}}',
+ },
+ };
+ }),
+ }
+ : {}),
+ },
+ };
+}
+
+function initializeExecutionStatus(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const { attributes } = doc;
+ return {
+ ...doc,
+ attributes: {
+ ...attributes,
+ executionStatus: {
+ status: 'pending',
+ lastExecutionDate: new Date().toISOString(),
+ error: null,
+ } as RawRuleExecutionStatus,
+ },
+ };
+}
+
+export const getMigrations7100 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ // migrate all documents in 7.10 in order to add the "meta" RBAC field
+ (doc): doc is SavedObjectUnsanitizedDoc => true,
+ pipeMigrations(
+ markAsLegacyAndChangeConsumer,
+ setAlertIdAsDefaultDedupkeyOnPagerDutyActions,
+ initializeExecutionStatus
+ )
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts
new file mode 100644
index 0000000000000..186b20679c00d
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts
@@ -0,0 +1,200 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { SavedObjectAttributes } from '@kbn/core-saved-objects-common';
+import { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { RawRule, RawRuleAction } from '../../../types';
+import { createEsoMigration, pipeMigrations } from '../utils';
+
+const SUPPORT_INCIDENTS_ACTION_TYPES = ['.servicenow', '.jira', '.resilient'];
+export const isAnyActionSupportIncidents = (doc: SavedObjectUnsanitizedDoc): boolean =>
+ doc.attributes.actions.some((action) =>
+ SUPPORT_INCIDENTS_ACTION_TYPES.includes(action.actionTypeId)
+ );
+
+function isEmptyObject(obj: {}) {
+ for (const attr in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, attr)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function setAlertUpdatedAtDate(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const updatedAt = doc.updated_at || doc.attributes.createdAt;
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ updatedAt,
+ },
+ };
+}
+
+function setNotifyWhen(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const notifyWhen = doc.attributes.throttle ? 'onThrottleInterval' : 'onActiveAlert';
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ notifyWhen,
+ },
+ };
+}
+
+function restructureConnectorsThatSupportIncident(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const { actions } = doc.attributes;
+ const newActions = actions.reduce((acc, action) => {
+ if (
+ ['.servicenow', '.jira', '.resilient'].includes(action.actionTypeId) &&
+ action.params.subAction === 'pushToService'
+ ) {
+ // Future developer, we needed to do that because when we created this migration
+ // we forget to think about user already using 7.11.0 and having an incident attribute build the right way
+ const subActionParamsIncident =
+ (action.params?.subActionParams as SavedObjectAttributes)?.incident ?? null;
+ if (subActionParamsIncident != null && !isEmptyObject(subActionParamsIncident)) {
+ return [...acc, action];
+ }
+ if (action.actionTypeId === '.servicenow') {
+ const {
+ title,
+ comments,
+ comment,
+ description,
+ severity,
+ urgency,
+ impact,
+ short_description: shortDescription,
+ } = action.params.subActionParams as {
+ title: string;
+ description?: string;
+ severity?: string;
+ urgency?: string;
+ impact?: string;
+ comment?: string;
+ comments?: Array<{ commentId: string; comment: string }>;
+ short_description?: string;
+ };
+ return [
+ ...acc,
+ {
+ ...action,
+ params: {
+ subAction: 'pushToService',
+ subActionParams: {
+ incident: {
+ short_description: shortDescription ?? title,
+ description,
+ severity,
+ urgency,
+ impact,
+ },
+ comments: [
+ ...(comments ?? []),
+ ...(comment != null ? [{ commentId: '1', comment }] : []),
+ ],
+ },
+ },
+ },
+ ] as RawRuleAction[];
+ } else if (action.actionTypeId === '.jira') {
+ const { title, comments, description, issueType, priority, labels, parent, summary } =
+ action.params.subActionParams as {
+ title: string;
+ description: string;
+ issueType: string;
+ priority?: string;
+ labels?: string[];
+ parent?: string;
+ comments?: unknown[];
+ summary?: string;
+ };
+ return [
+ ...acc,
+ {
+ ...action,
+ params: {
+ subAction: 'pushToService',
+ subActionParams: {
+ incident: {
+ summary: summary ?? title,
+ description,
+ issueType,
+ priority,
+ labels,
+ parent,
+ },
+ comments,
+ },
+ },
+ },
+ ] as RawRuleAction[];
+ } else if (action.actionTypeId === '.resilient') {
+ const { title, comments, description, incidentTypes, severityCode, name } = action.params
+ .subActionParams as {
+ title: string;
+ description: string;
+ incidentTypes?: number[];
+ severityCode?: number;
+ comments?: unknown[];
+ name?: string;
+ };
+ return [
+ ...acc,
+ {
+ ...action,
+ params: {
+ subAction: 'pushToService',
+ subActionParams: {
+ incident: {
+ name: name ?? title,
+ description,
+ incidentTypes,
+ severityCode,
+ },
+ comments,
+ },
+ },
+ },
+ ] as RawRuleAction[];
+ }
+ }
+
+ return [...acc, action];
+ }, [] as RawRuleAction[]);
+
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ actions: newActions,
+ },
+ };
+}
+
+export const getMigrations7110 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc): doc is SavedObjectUnsanitizedDoc => true,
+ pipeMigrations(setAlertUpdatedAtDate, setNotifyWhen)
+ );
+
+export const getMigrations7112 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc): doc is SavedObjectUnsanitizedDoc => isAnyActionSupportIncidents(doc),
+ pipeMigrations(restructureConnectorsThatSupportIncident)
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/7.13/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/7.13/index.ts
new file mode 100644
index 0000000000000..67b595531dfdb
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/7.13/index.ts
@@ -0,0 +1,87 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { SavedObjectAttribute } from '@kbn/core-saved-objects-common';
+import { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { RawRule } from '../../../types';
+import { createEsoMigration, isSiemSignalsRuleType, pipeMigrations } from '../utils';
+
+function convertNullToUndefined(attribute: SavedObjectAttribute) {
+ return attribute != null ? attribute : undefined;
+}
+
+function removeNullsFromSecurityRules(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const {
+ attributes: { params },
+ } = doc;
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ params: {
+ ...params,
+ buildingBlockType: convertNullToUndefined(params.buildingBlockType),
+ note: convertNullToUndefined(params.note),
+ index: convertNullToUndefined(params.index),
+ language: convertNullToUndefined(params.language),
+ license: convertNullToUndefined(params.license),
+ outputIndex: convertNullToUndefined(params.outputIndex),
+ savedId: convertNullToUndefined(params.savedId),
+ timelineId: convertNullToUndefined(params.timelineId),
+ timelineTitle: convertNullToUndefined(params.timelineTitle),
+ meta: convertNullToUndefined(params.meta),
+ query: convertNullToUndefined(params.query),
+ filters: convertNullToUndefined(params.filters),
+ riskScoreMapping: params.riskScoreMapping != null ? params.riskScoreMapping : [],
+ ruleNameOverride: convertNullToUndefined(params.ruleNameOverride),
+ severityMapping: params.severityMapping != null ? params.severityMapping : [],
+ threat: params.threat != null ? params.threat : [],
+ threshold:
+ params.threshold != null &&
+ typeof params.threshold === 'object' &&
+ !Array.isArray(params.threshold)
+ ? {
+ field: Array.isArray(params.threshold.field)
+ ? params.threshold.field
+ : params.threshold.field === '' || params.threshold.field == null
+ ? []
+ : [params.threshold.field],
+ value: params.threshold.value,
+ cardinality:
+ params.threshold.cardinality != null ? params.threshold.cardinality : [],
+ }
+ : undefined,
+ timestampOverride: convertNullToUndefined(params.timestampOverride),
+ exceptionsList:
+ params.exceptionsList != null
+ ? params.exceptionsList
+ : params.exceptions_list != null
+ ? params.exceptions_list
+ : params.lists != null
+ ? params.lists
+ : [],
+ threatFilters: convertNullToUndefined(params.threatFilters),
+ machineLearningJobId:
+ params.machineLearningJobId == null
+ ? undefined
+ : Array.isArray(params.machineLearningJobId)
+ ? params.machineLearningJobId
+ : [params.machineLearningJobId],
+ },
+ },
+ };
+}
+
+export const getMigrations7130 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc): doc is SavedObjectUnsanitizedDoc => isSiemSignalsRuleType(doc),
+ pipeMigrations(removeNullsFromSecurityRules)
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/7.14/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/7.14/index.ts
new file mode 100644
index 0000000000000..8a4aa555127ce
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/7.14/index.ts
@@ -0,0 +1,46 @@
+/*
+ * 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 { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { RawRule } from '../../../types';
+import { createEsoMigration, isSiemSignalsRuleType, pipeMigrations } from '../utils';
+
+/**
+ * The author field was introduced later and was not part of the original rules. We overlooked
+ * the filling in the author field as an empty array in an earlier upgrade routine from
+ * 'removeNullsFromSecurityRules' during the 7.13.0 upgrade. Since we don't change earlier migrations,
+ * but rather only move forward with the "arrow of time" we are going to upgrade and fix
+ * it if it is missing for anyone in 7.14.0 and above release. Earlier releases if we want to fix them,
+ * would have to be modified as a "7.13.1", etc... if we want to fix it there.
+ * @param doc The document that is not migrated and contains a "null" or "undefined" author field
+ * @returns The document with the author field fleshed in.
+ */
+function removeNullAuthorFromSecurityRules(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const {
+ attributes: { params },
+ } = doc;
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ params: {
+ ...params,
+ author: params.author != null ? params.author : [],
+ },
+ },
+ };
+}
+
+export const getMigrations7140 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc): doc is SavedObjectUnsanitizedDoc => isSiemSignalsRuleType(doc),
+ pipeMigrations(removeNullAuthorFromSecurityRules)
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/7.15/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/7.15/index.ts
new file mode 100644
index 0000000000000..a7b90ab347a71
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/7.15/index.ts
@@ -0,0 +1,115 @@
+/*
+ * 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 {
+ SavedObjectAttribute,
+ SavedObjectAttributes,
+ SavedObjectReference,
+} from '@kbn/core-saved-objects-common';
+import { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { isString } from 'lodash/fp';
+import { RawRule } from '../../../types';
+import { createEsoMigration, isSiemSignalsRuleType, pipeMigrations } from '../utils';
+
+/**
+ * This will do a flatMap reduce where we only return exceptionsLists and their items if:
+ * - exceptionLists are an array and not null, undefined, or malformed data.
+ * - The exceptionList item is an object and id is a string and not null, undefined, or malformed data
+ *
+ * Some of these issues could crop up during either user manual errors of modifying things, earlier migration
+ * issues, etc...
+ * @param exceptionsList The list of exceptions
+ * @returns The exception lists if they are a valid enough shape
+ */
+function removeMalformedExceptionsList(
+ exceptionsList: SavedObjectAttribute
+): SavedObjectAttributes[] {
+ if (!Array.isArray(exceptionsList)) {
+ // early return if we are not an array such as being undefined or null or malformed.
+ return [];
+ } else {
+ return exceptionsList.flatMap((exceptionItem) => {
+ if (!(exceptionItem instanceof Object) || !isString(exceptionItem.id)) {
+ // return early if we are not an object such as being undefined or null or malformed
+ // or the exceptionItem.id is not a string from being malformed
+ return [];
+ } else {
+ return [exceptionItem];
+ }
+ });
+ }
+}
+
+/**
+ * This migrates exception list containers to saved object references on an upgrade.
+ * We only migrate if we find these conditions:
+ * - exceptionLists are an array and not null, undefined, or malformed data.
+ * - The exceptionList item is an object and id is a string and not null, undefined, or malformed data
+ * - The existing references do not already have an exceptionItem reference already found within it.
+ * Some of these issues could crop up during either user manual errors of modifying things, earlier migration
+ * issues, etc...
+ * @param doc The document that might have exceptionListItems to migrate
+ * @returns The document migrated with saved object references
+ */
+function addExceptionListsToReferences(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const {
+ attributes: {
+ params: { exceptionsList },
+ },
+ references,
+ } = doc;
+ if (!Array.isArray(exceptionsList)) {
+ // early return if we are not an array such as being undefined or null or malformed.
+ return doc;
+ } else {
+ const exceptionsToTransform = removeMalformedExceptionsList(exceptionsList);
+ const newReferences = exceptionsToTransform.flatMap(
+ (exceptionItem, index) => {
+ const existingReferenceFound = references?.find((reference) => {
+ return (
+ reference.id === exceptionItem.id &&
+ ((reference.type === 'exception-list' && exceptionItem.namespace_type === 'single') ||
+ (reference.type === 'exception-list-agnostic' &&
+ exceptionItem.namespace_type === 'agnostic'))
+ );
+ });
+ if (existingReferenceFound) {
+ // skip if the reference already exists for some uncommon reason so we do not add an additional one.
+ // This enables us to be idempotent and you can run this migration multiple times and get the same output.
+ return [];
+ } else {
+ return [
+ {
+ name: `param:exceptionsList_${index}`,
+ id: String(exceptionItem.id),
+ type:
+ exceptionItem.namespace_type === 'agnostic'
+ ? 'exception-list-agnostic'
+ : 'exception-list',
+ },
+ ];
+ }
+ }
+ );
+ if (references == null && newReferences.length === 0) {
+ // Avoid adding an empty references array if the existing saved object never had one to begin with
+ return doc;
+ } else {
+ return { ...doc, references: [...(references ?? []), ...newReferences] };
+ }
+ }
+}
+
+export const getMigrations7150 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc): doc is SavedObjectUnsanitizedDoc => isSiemSignalsRuleType(doc),
+ pipeMigrations(addExceptionListsToReferences)
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/7.16/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/7.16/index.ts
new file mode 100644
index 0000000000000..35aded8311803
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/7.16/index.ts
@@ -0,0 +1,159 @@
+/*
+ * 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 { SavedObjectAttribute, SavedObjectReference } from '@kbn/core-saved-objects-common';
+import { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { isString } from 'lodash/fp';
+import { RawRule, RawRuleAction } from '../../../types';
+import { extractRefsFromGeoContainmentAlert } from '../../geo_containment/migrations';
+import { createEsoMigration, isSecuritySolutionLegacyNotification, pipeMigrations } from '../utils';
+
+function setLegacyId(doc: SavedObjectUnsanitizedDoc): SavedObjectUnsanitizedDoc {
+ const { id } = doc;
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ legacyId: id,
+ },
+ };
+}
+
+function getRemovePreconfiguredConnectorsFromReferencesFn(
+ isPreconfigured: (connectorId: string) => boolean
+) {
+ return (doc: SavedObjectUnsanitizedDoc) => {
+ return removePreconfiguredConnectorsFromReferences(doc, isPreconfigured);
+ };
+}
+
+function getCorrespondingAction(
+ actions: SavedObjectAttribute,
+ connectorRef: string
+): RawRuleAction | null {
+ if (!Array.isArray(actions)) {
+ return null;
+ } else {
+ return actions.find(
+ (action) => (action as RawRuleAction)?.actionRef === connectorRef
+ ) as RawRuleAction;
+ }
+}
+
+function removePreconfiguredConnectorsFromReferences(
+ doc: SavedObjectUnsanitizedDoc,
+ isPreconfigured: (connectorId: string) => boolean
+): SavedObjectUnsanitizedDoc {
+ const {
+ attributes: { actions },
+ references,
+ } = doc;
+
+ // Look for connector references
+ const connectorReferences = (references ?? []).filter((ref: SavedObjectReference) =>
+ ref.name.startsWith('action_')
+ );
+ if (connectorReferences.length > 0) {
+ const restReferences = (references ?? []).filter(
+ (ref: SavedObjectReference) => !ref.name.startsWith('action_')
+ );
+
+ const updatedConnectorReferences: SavedObjectReference[] = [];
+ const updatedActions: RawRule['actions'] = [];
+
+ // For each connector reference, check if connector is preconfigured
+ // If yes, we need to remove from the references array and update
+ // the corresponding action so it directly references the preconfigured connector id
+ connectorReferences.forEach((connectorRef: SavedObjectReference) => {
+ // Look for the corresponding entry in the actions array
+ const correspondingAction = getCorrespondingAction(actions, connectorRef.name);
+ if (correspondingAction) {
+ if (isPreconfigured(connectorRef.id)) {
+ updatedActions.push({
+ ...correspondingAction,
+ actionRef: `preconfigured:${connectorRef.id}`,
+ });
+ } else {
+ updatedActions.push(correspondingAction);
+ updatedConnectorReferences.push(connectorRef);
+ }
+ } else {
+ // Couldn't find the matching action, leave as is
+ updatedConnectorReferences.push(connectorRef);
+ }
+ });
+
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ actions: [...updatedActions],
+ },
+ references: [...updatedConnectorReferences, ...restReferences],
+ };
+ }
+ return doc;
+}
+
+/**
+ * This migrates rule_id's within the legacy siem.notification to saved object references on an upgrade.
+ * We only migrate if we find these conditions:
+ * - ruleAlertId is a string and not null, undefined, or malformed data.
+ * - The existing references do not already have a ruleAlertId found within it.
+ * Some of these issues could crop up during either user manual errors of modifying things, earlier migration
+ * issues, etc... so we are safer to check them as possibilities
+ * @deprecated Once we are confident all rules relying on side-car actions SO's have been migrated to SO references we should remove this function
+ * @param doc The document that might have "ruleAlertId" to migrate into the references
+ * @returns The document migrated with saved object references
+ */
+function addRuleIdsToLegacyNotificationReferences(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const {
+ attributes: {
+ params: { ruleAlertId },
+ },
+ references,
+ } = doc;
+ if (!isSecuritySolutionLegacyNotification(doc) || !isString(ruleAlertId)) {
+ // early return if we are not a string or if we are not a security solution notification saved object.
+ return doc;
+ } else {
+ const existingReferences = references ?? [];
+ const existingReferenceFound = existingReferences.find((reference) => {
+ return reference.id === ruleAlertId && reference.type === 'alert';
+ });
+ if (existingReferenceFound) {
+ // skip this if the references already exists for some uncommon reason so we do not add an additional one.
+ return doc;
+ } else {
+ const savedObjectReference: SavedObjectReference = {
+ id: ruleAlertId,
+ name: 'param:alert_0',
+ type: 'alert',
+ };
+ const newReferences = [...existingReferences, savedObjectReference];
+ return { ...doc, references: newReferences };
+ }
+ }
+}
+
+export const getMigrations7160 = (
+ encryptedSavedObjects: EncryptedSavedObjectsPluginSetup,
+ isPreconfigured: (connectorId: string) => boolean
+) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc): doc is SavedObjectUnsanitizedDoc => true,
+ pipeMigrations(
+ setLegacyId,
+ getRemovePreconfiguredConnectorsFromReferencesFn(isPreconfigured),
+ addRuleIdsToLegacyNotificationReferences,
+ extractRefsFromGeoContainmentAlert
+ )
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/8.0/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/8.0/index.ts
new file mode 100644
index 0000000000000..5d8efd4585af7
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/8.0/index.ts
@@ -0,0 +1,133 @@
+/*
+ * 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 { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { isRuleType, ruleTypeMappings } from '@kbn/securitysolution-rules';
+import { RawRule } from '../../../types';
+import { FILEBEAT_7X_INDICATOR_PATH } from '../constants';
+import {
+ createEsoMigration,
+ isDetectionEngineAADRuleType,
+ isSiemSignalsRuleType,
+ pipeMigrations,
+} from '../utils';
+
+function addThreatIndicatorPathToThreatMatchRules(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ return isSiemSignalsRuleType(doc) &&
+ doc.attributes.params?.type === 'threat_match' &&
+ !doc.attributes.params.threatIndicatorPath
+ ? {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ params: {
+ ...doc.attributes.params,
+ threatIndicatorPath: FILEBEAT_7X_INDICATOR_PATH,
+ },
+ },
+ }
+ : doc;
+}
+
+function addSecuritySolutionAADRuleTypes(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const ruleType = doc.attributes.params.type;
+ return isSiemSignalsRuleType(doc) && isRuleType(ruleType)
+ ? {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ alertTypeId: ruleTypeMappings[ruleType],
+ enabled: false,
+ params: {
+ ...doc.attributes.params,
+ outputIndex: '',
+ },
+ },
+ }
+ : doc;
+}
+
+function addSecuritySolutionAADRuleTypeTags(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const ruleType = doc.attributes.params.type;
+ return isDetectionEngineAADRuleType(doc) && isRuleType(ruleType)
+ ? {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ // If the rule is disabled at this point, then the rule has not been re-enabled after
+ // running the 8.0.0 migrations. If `doc.attributes.scheduledTaskId` exists, then the
+ // rule was enabled prior to running the migration. Thus we know we should add the
+ // tag to indicate it was auto-disabled.
+ tags:
+ !doc.attributes.enabled && doc.attributes.scheduledTaskId
+ ? [...(doc.attributes.tags ?? []), 'auto_disabled_8.0']
+ : doc.attributes.tags ?? [],
+ },
+ }
+ : doc;
+}
+
+// This fixes an issue whereby metrics.alert.inventory.threshold rules had the
+// group for actions incorrectly spelt as metrics.invenotry_threshold.fired vs metrics.inventory_threshold.fired
+function fixInventoryThresholdGroupId(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ if (doc.attributes.alertTypeId === 'metrics.alert.inventory.threshold') {
+ const {
+ attributes: { actions },
+ } = doc;
+
+ const updatedActions = actions
+ ? actions.map((action) => {
+ // Wrong spelling
+ if (action.group === 'metrics.invenotry_threshold.fired') {
+ return {
+ ...action,
+ group: 'metrics.inventory_threshold.fired',
+ };
+ } else {
+ return action;
+ }
+ })
+ : [];
+
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ actions: updatedActions,
+ },
+ };
+ } else {
+ return doc;
+ }
+}
+
+export const getMigrations800 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
+ pipeMigrations(
+ addThreatIndicatorPathToThreatMatchRules,
+ addSecuritySolutionAADRuleTypes,
+ fixInventoryThresholdGroupId
+ )
+ );
+
+export const getMigrations801 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
+ pipeMigrations(addSecuritySolutionAADRuleTypeTags)
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/8.2/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/8.2/index.ts
new file mode 100644
index 0000000000000..6de67875ba2eb
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/8.2/index.ts
@@ -0,0 +1,41 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { getMappedParams } from '../../../rules_client/lib/mapped_params_utils';
+import { RawRule } from '../../../types';
+import { createEsoMigration, pipeMigrations } from '../utils';
+
+function addMappedParams(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const {
+ attributes: { params },
+ } = doc;
+
+ const mappedParams = getMappedParams(params);
+
+ if (Object.keys(mappedParams).length) {
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ mapped_params: mappedParams,
+ },
+ };
+ }
+
+ return doc;
+}
+
+export const getMigrations820 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
+ pipeMigrations(addMappedParams)
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/8.3/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/8.3/index.ts
new file mode 100644
index 0000000000000..833971a71dbbe
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/8.3/index.ts
@@ -0,0 +1,96 @@
+/*
+ * 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 { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { omit } from 'lodash';
+import moment from 'moment-timezone';
+import { RawRule } from '../../../types';
+import {
+ createEsoMigration,
+ isDetectionEngineAADRuleType,
+ isEsQueryRuleType,
+ pipeMigrations,
+} from '../utils';
+
+function addSearchType(doc: SavedObjectUnsanitizedDoc) {
+ const searchType = doc.attributes.params.searchType;
+
+ return isEsQueryRuleType(doc) && !searchType
+ ? {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ params: {
+ ...doc.attributes.params,
+ searchType: 'esQuery',
+ },
+ },
+ }
+ : doc;
+}
+
+/**
+ * removes internal tags(starts with '__internal') from Security Solution rules
+ * @param doc rule to be migrated
+ * @returns migrated rule if it's Security Solution rule or unchanged if not
+ */
+function removeInternalTags(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ if (!isDetectionEngineAADRuleType(doc)) {
+ return doc;
+ }
+
+ const {
+ attributes: { tags },
+ } = doc;
+
+ const filteredTags = (tags ?? []).filter((tag) => !tag.startsWith('__internal_'));
+
+ return {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ tags: filteredTags,
+ },
+ };
+}
+
+function convertSnoozes(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ const {
+ attributes: { snoozeEndTime },
+ } = doc;
+
+ return {
+ ...doc,
+ attributes: {
+ ...(omit(doc.attributes, ['snoozeEndTime']) as RawRule),
+ snoozeSchedule: snoozeEndTime
+ ? [
+ {
+ duration: Date.parse(snoozeEndTime as string) - Date.now(),
+ rRule: {
+ dtstart: new Date().toISOString(),
+ tzid: moment.tz.guess(),
+ count: 1,
+ },
+ },
+ ]
+ : [],
+ },
+ };
+}
+
+export const getMigrations830 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
+ pipeMigrations(addSearchType, removeInternalTags, convertSnoozes)
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/8.4/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/8.4/index.ts
new file mode 100644
index 0000000000000..3a02425a7c194
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/8.4/index.ts
@@ -0,0 +1,30 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { omit } from 'lodash';
+import { RawRule } from '../../../types';
+import { createEsoMigration, pipeMigrations } from '../utils';
+
+function removeIsSnoozedUntil(
+ doc: SavedObjectUnsanitizedDoc
+): SavedObjectUnsanitizedDoc {
+ return {
+ ...doc,
+ attributes: {
+ ...(omit(doc.attributes, ['isSnoozedUntil']) as RawRule),
+ },
+ };
+}
+
+export const getMigrations841 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc: SavedObjectUnsanitizedDoc): doc is SavedObjectUnsanitizedDoc => true,
+ pipeMigrations(removeIsSnoozedUntil)
+ );
diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/8.5/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/8.5/index.ts
new file mode 100644
index 0000000000000..a40bcafd0bf35
--- /dev/null
+++ b/x-pack/plugins/alerting/server/saved_objects/migrations/8.5/index.ts
@@ -0,0 +1,65 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
+
+import {
+ SavedObjectMigrationContext,
+ SavedObjectUnsanitizedDoc,
+} from '@kbn/core-saved-objects-server';
+import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server';
+import { isSerializedSearchSource } from '@kbn/data-plugin/common';
+import { pick } from 'lodash';
+import { RawRule } from '../../../types';
+import { createEsoMigration, isEsQueryRuleType, pipeMigrations } from '../utils';
+import { AlertLogMeta } from '../types';
+
+function stripOutRuntimeFieldsInOldESQuery(
+ doc: SavedObjectUnsanitizedDoc,
+ context: SavedObjectMigrationContext
+): SavedObjectUnsanitizedDoc {
+ const isESDSLrule =
+ isEsQueryRuleType(doc) && !isSerializedSearchSource(doc.attributes.params.searchConfiguration);
+
+ if (isESDSLrule) {
+ try {
+ const parsedQuery = JSON.parse(doc.attributes.params.esQuery as string);
+ // parsing and restringifying will cause us to lose the formatting so we only do so if this rule has
+ // fields other than `query` which is the only valid field at this stage
+ const hasFieldsOtherThanQuery = Object.keys(parsedQuery).some((key) => key !== 'query');
+ return hasFieldsOtherThanQuery
+ ? {
+ ...doc,
+ attributes: {
+ ...doc.attributes,
+ params: {
+ ...doc.attributes.params,
+ esQuery: JSON.stringify(pick(parsedQuery, 'query'), null, 4),
+ },
+ },
+ }
+ : doc;
+ } catch (err) {
+ // Instead of failing the upgrade when an unparsable rule is encountered, we log that the rule caouldn't be migrated and
+ // as a result legacy parameters might cause the rule to behave differently if it is, in fact, still running at all
+ context.log.error(
+ `unable to migrate and remove legacy runtime fields in rule ${doc.id} due to invalid query: "${doc.attributes.params.esQuery}" - query must be JSON`,
+ {
+ migrations: {
+ alertDocument: doc,
+ },
+ }
+ );
+ }
+ }
+ return doc;
+}
+
+export const getMigrations850 = (encryptedSavedObjects: EncryptedSavedObjectsPluginSetup) =>
+ createEsoMigration(
+ encryptedSavedObjects,
+ (doc): doc is SavedObjectUnsanitizedDoc