diff --git a/.buildkite/pipelines/on_merge_unsupported_ftrs.yml b/.buildkite/pipelines/on_merge_unsupported_ftrs.yml index 8d67cbf37d8a0..ceef6e06ef96f 100644 --- a/.buildkite/pipelines/on_merge_unsupported_ftrs.yml +++ b/.buildkite/pipelines/on_merge_unsupported_ftrs.yml @@ -88,7 +88,7 @@ steps: - command: .buildkite/scripts/steps/functional/defend_workflows.sh label: 'Defend Workflows Cypress Tests' agents: - queue: n2-4-spot + queue: n2-4-virt depends_on: build timeout_in_minutes: 120 parallelism: 6 diff --git a/.buildkite/pipelines/pull_request/defend_workflows.yml b/.buildkite/pipelines/pull_request/defend_workflows.yml index c60030497b623..da79114cbebfb 100644 --- a/.buildkite/pipelines/pull_request/defend_workflows.yml +++ b/.buildkite/pipelines/pull_request/defend_workflows.yml @@ -14,7 +14,7 @@ steps: - command: .buildkite/scripts/steps/functional/defend_workflows_serverless.sh label: 'Defend Workflows Cypress Tests on Serverless' agents: - queue: n2-4-spot + queue: n2-4-virt depends_on: build timeout_in_minutes: 120 parallelism: 2 diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index a91635a8423f5..3fef271b7c26f 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-09-21 +date: 2023-09-22 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 4acf7fa44d036..5cde1cd4c95ba 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-09-21 +date: 2023-09-22 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 7ae72539c33e5..6bb0d13e4801a 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 00ded98b3bd48..5e72f84f48ad8 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -24,7 +24,7 @@ "section": "def-common.SanitizedRule", "text": "SanitizedRule" }, - ") => string" + ") => string | undefined" ], "path": "x-pack/plugins/alerting/public/alert_navigation_registry/types.ts", "deprecated": false, @@ -112,6 +112,18 @@ "plugin": "ml", "path": "x-pack/plugins/ml/public/alerting/register_ml_alerts.ts" }, + { + "plugin": "stackAlerts", + "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts" + }, + { + "plugin": "stackAlerts", + "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts" + }, + { + "plugin": "stackAlerts", + "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts" + }, { "plugin": "stackAlerts", "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts" @@ -479,7 +491,7 @@ "label": "ensureAuthorized", "description": [], "signature": [ - "({ ruleTypeId, consumer, operation, entity }: ", + "({ ruleTypeId, consumer: legacyConsumer, operation, entity, }: ", "EnsureAuthorizedOpts", ") => Promise" ], @@ -492,7 +504,7 @@ "id": "def-server.AlertingAuthorization.ensureAuthorized.$1", "type": "Object", "tags": [], - "label": "{ ruleTypeId, consumer, operation, entity }", + "label": "{\n ruleTypeId,\n consumer: legacyConsumer,\n operation,\n entity,\n }", "description": [], "signature": [ "EnsureAuthorizedOpts" @@ -523,7 +535,7 @@ }, ", filterOpts: ", "AlertingAuthorizationFilterOpts", - ") => Promise<{ filter?: ", + ", featuresIds?: Set | undefined) => Promise<{ filter?: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -580,6 +592,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "alerting", + "id": "def-server.AlertingAuthorization.getFindAuthorizationFilter.$3", + "type": "Object", + "tags": [], + "label": "featuresIds", + "description": [], + "signature": [ + "Set | undefined" + ], + "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [] @@ -681,7 +708,7 @@ "section": "def-server.WriteOperations", "text": "WriteOperations" }, - ") => Promise<{ filter?: ", + ", featuresIds?: Set | undefined) => Promise<{ filter?: ", { "pluginId": "@kbn/es-query", "scope": "common", @@ -767,6 +794,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "alerting", + "id": "def-server.AlertingAuthorization.getAuthorizationFilter.$4", + "type": "Object", + "tags": [], + "label": "featuresIds", + "description": [], + "signature": [ + "Set | undefined" + ], + "path": "x-pack/plugins/alerting/server/authorization/alerting_authorization.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [] @@ -1241,6 +1283,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "alerting", + "id": "def-server.isValidAlertIndexName", + "type": "Function", + "tags": [], + "label": "isValidAlertIndexName", + "description": [], + "signature": [ + "(indexName: string) => boolean" + ], + "path": "x-pack/plugins/alerting/server/alerts_service/lib/is_valid_alert_index_name.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "alerting", + "id": "def-server.isValidAlertIndexName.$1", + "type": "string", + "tags": [], + "label": "indexName", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/alerting/server/alerts_service/lib/is_valid_alert_index_name.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "alerting", "id": "def-server.parseDuration", @@ -4950,6 +5025,21 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.VALID_ALERT_INDEX_PREFIXES", + "type": "Array", + "tags": [], + "label": "VALID_ALERT_INDEX_PREFIXES", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/alerting/server/alerts_service/resource_installer_utils.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [ diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 6a749b86b426b..240541b6b5f06 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 767 | 1 | 736 | 50 | +| 772 | 1 | 741 | 50 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index ce75d2091dff4..dc3e7fb17e726 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 28d9e9cc6b2bd..699b4e4362571 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 10d7d21c36031..9b25d6f02073d 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 82d51bbf0ad43..13b467bc21d12 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-09-21 +date: 2023-09-22 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 a9ea5c5a4e228..a1dcdd6b5c48a 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-09-21 +date: 2023-09-22 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 a8ab44ac80268..b2dcd0ad2240f 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-09-21 +date: 2023-09-22 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 4b24bf6e480e2..fde77511cdc1e 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-09-21 +date: 2023-09-22 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 dd65a4f0b3499..bd0fa0dc99c21 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-09-21 +date: 2023-09-22 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 4b2589f34500d..8cb3e8d2cbf3a 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-09-21 +date: 2023-09-22 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 ee5825e0c7f5f..c1637e0e81201 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_chat_provider.mdx b/api_docs/cloud_chat_provider.mdx index 1677327833a80..687b68fb69885 100644 --- a/api_docs/cloud_chat_provider.mdx +++ b/api_docs/cloud_chat_provider.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChatProvider title: "cloudChatProvider" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChatProvider plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChatProvider'] --- import cloudChatProviderObj from './cloud_chat_provider.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 09d27e90753ac..218bf761e8ac3 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index 1311eff4de07f..111ab5da468be 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index e4168c0ce5928..9ce075f94fdf5 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-09-21 +date: 2023-09-22 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 820aa2cfb41fd..6d15a2c8a6f04 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-09-21 +date: 2023-09-22 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 d083f5d8d02c0..9ce5ab89d9b0b 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index c271b141ab8e0..3d6861cb3a2fd 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 7b07f1ec9f15c..d8bed1ba5dbf2 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index f8512ea315c69..5fff9c5eabbf6 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-09-21 +date: 2023-09-22 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 e573ebfd7f812..a8d2efaa8a114 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-09-21 +date: 2023-09-22 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 ba465451ac4c3..7e7bcfb129a0c 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index fa360c4f06091..c472d757594f5 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -4971,7 +4971,9 @@ "type": "Function", "tags": [], "label": "isErrorResponse", - "description": [], + "description": [ + "\nFrom https://github.com/elastic/elasticsearch/issues/55572: \"When is_running is false, the query has stopped, which\nmay happen due to ... the search failed, in which case is_partial is set to true to indicate that any results that\nmay be included in the search response come only from a subset of the shards that the query should have hit.\"" + ], "signature": [ "(response?: ", { @@ -8216,6 +8218,23 @@ "path": "src/plugins/data/common/search/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-public.IKibanaSearchResponse.requestParams", + "type": "Object", + "tags": [], + "label": "requestParams", + "description": [ + "\nHTTP request parameters from elasticsearch transport client t" + ], + "signature": [ + "ConnectionRequestParams", + " | undefined" + ], + "path": "src/plugins/data/common/search/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 837057cfc86dc..2ab17d618a2b3 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3308 | 33 | 2577 | 24 | +| 3310 | 33 | 2575 | 24 | ## Client diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index ebb986dc9cebc..d7d57d8bb8dfb 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3308 | 33 | 2577 | 24 | +| 3310 | 33 | 2575 | 24 | ## Client diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 20e66366a56cb..f79d7c49a2f89 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -16049,7 +16049,9 @@ "type": "Function", "tags": [], "label": "isErrorResponse", - "description": [], + "description": [ + "\nFrom https://github.com/elastic/elasticsearch/issues/55572: \"When is_running is false, the query has stopped, which\nmay happen due to ... the search failed, in which case is_partial is set to true to indicate that any results that\nmay be included in the search response come only from a subset of the shards that the query should have hit.\"" + ], "signature": [ "(response?: ", { @@ -28021,6 +28023,23 @@ "path": "src/plugins/data/common/search/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "data", + "id": "def-common.IKibanaSearchResponse.requestParams", + "type": "Object", + "tags": [], + "label": "requestParams", + "description": [ + "\nHTTP request parameters from elasticsearch transport client t" + ], + "signature": [ + "ConnectionRequestParams", + " | undefined" + ], + "path": "src/plugins/data/common/search/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index b01e123d33090..bfcf0b17363f8 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3308 | 33 | 2577 | 24 | +| 3310 | 33 | 2575 | 24 | ## Client diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index e316b12467904..33be7a92ad848 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-09-21 +date: 2023-09-22 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 a50199e81665c..03cd9e78a97ea 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-09-21 +date: 2023-09-22 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 ba3ed98442044..e471f16a59a46 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-09-21 +date: 2023-09-22 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 4a5945bee01ce..97c9d70abe747 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-09-21 +date: 2023-09-22 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 88cac35c7d98e..10f7e8e0b31a0 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-09-21 +date: 2023-09-22 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 a9ef857b7bf51..cae2874b2f107 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index ed8aea16c2757..8ba7503399b87 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1546,7 +1546,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation) | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation) | - | | | [rule_type.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts#:~:text=alertFactory), [get_entities_and_generate_alerts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/get_entities_and_generate_alerts.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory), [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/executor.ts#:~:text=alertFactory) | - | | | [fetch_search_source_query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch) | - | | | [data_view_select.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/data_view_select.tsx#:~:text=indexPatterns), [boundary_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/boundary_form.tsx#:~:text=indexPatterns), [boundary_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/boundary_form.tsx#:~:text=indexPatterns), [entity_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/entity_form.tsx#:~:text=indexPatterns), [entity_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/entity_form.tsx#:~:text=indexPatterns) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 34086fddf297e..26742064ca1fc 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 0e2ef6eaefa4b..578a363e31026 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index 9d55f29fd0d67..953ad5b563cf6 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -363,9 +363,17 @@ "label": "get$", "description": [], "signature": [ - "(id: TCustomizationId) => ", + "(id: TCustomizationId) => ", "Observable", " | Extract<", { "pluginId": "discover", "scope": "public", @@ -421,7 +429,7 @@ "label": "enable", "description": [], "signature": [ - "(id: \"search_bar\" | \"top_nav\" | \"unified_histogram\") => void" + "(id: \"flyout\" | \"search_bar\" | \"top_nav\" | \"unified_histogram\") => void" ], "path": "src/plugins/discover/public/customizations/customization_service.ts", "deprecated": false, @@ -435,7 +443,7 @@ "label": "id", "description": [], "signature": [ - "\"search_bar\" | \"top_nav\" | \"unified_histogram\"" + "\"flyout\" | \"search_bar\" | \"top_nav\" | \"unified_histogram\"" ], "path": "src/plugins/discover/public/customizations/customization_service.ts", "deprecated": false, @@ -453,7 +461,7 @@ "label": "disable", "description": [], "signature": [ - "(id: \"search_bar\" | \"top_nav\" | \"unified_histogram\") => void" + "(id: \"flyout\" | \"search_bar\" | \"top_nav\" | \"unified_histogram\") => void" ], "path": "src/plugins/discover/public/customizations/customization_service.ts", "deprecated": false, @@ -467,7 +475,7 @@ "label": "id", "description": [], "signature": [ - "\"search_bar\" | \"top_nav\" | \"unified_histogram\"" + "\"flyout\" | \"search_bar\" | \"top_nav\" | \"unified_histogram\"" ], "path": "src/plugins/discover/public/customizations/customization_service.ts", "deprecated": false, @@ -763,6 +771,52 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "discover", + "id": "def-public.FlyoutCustomization", + "type": "Interface", + "tags": [], + "label": "FlyoutCustomization", + "description": [], + "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "discover", + "id": "def-public.FlyoutCustomization.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "\"flyout\"" + ], + "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "discover", + "id": "def-public.FlyoutCustomization.actions", + "type": "Object", + "tags": [], + "label": "actions", + "description": [], + "signature": [ + "{ defaultActions?: ", + "FlyoutDefaultActions", + " | undefined; getActionItems?: (() => ", + "FlyoutActionItem", + "[]) | undefined; }" + ], + "path": "src/plugins/discover/public/customizations/customization_types/flyout_customization.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "discover", "id": "def-public.ISearchEmbeddable", @@ -1069,6 +1123,14 @@ "label": "DiscoverCustomization", "description": [], "signature": [ + { + "pluginId": "discover", + "scope": "public", + "docId": "kibDiscoverPluginApi", + "section": "def-public.FlyoutCustomization", + "text": "FlyoutCustomization" + }, + " | ", { "pluginId": "discover", "scope": "public", diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 2dade7597911d..9757530e364e6 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 113 | 0 | 72 | 15 | +| 116 | 0 | 75 | 17 | ## Client diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 2d15dd3b70b36..14665dd3dbf28 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 3506edd0bd41b..e563889f743e6 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 2355c09ce1195..bd1eb7f5c45b0 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 2a512376e59db..91498206cadbc 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-09-21 +date: 2023-09-22 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 ac8687f69f529..cb7c9d694490b 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-09-21 +date: 2023-09-22 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 46c42d3501584..5965dcb8a31b3 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-09-21 +date: 2023-09-22 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 45013bb12a726..b6d930efcac66 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-09-21 +date: 2023-09-22 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 33d43d630c564..3acd9582627b0 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-09-21 +date: 2023-09-22 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 3de8ad1d6fdef..d3bf2b4def3d1 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 7420c4a9073d9..064500e78488b 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 13c4a74d89509..4fc6d1f2714b2 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 497b727c7f9ee..ef6a1b8d7e3da 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index bec03291ccd0d..cc0fa5b0f9640 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-09-21 +date: 2023-09-22 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 fbe7024383a94..c9ac36f6fd24a 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-09-21 +date: 2023-09-22 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 0f62d4eba2e81..cf39abc6f0a9d 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-09-21 +date: 2023-09-22 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 e8e3b091ae0ab..c79aa87517f10 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-09-21 +date: 2023-09-22 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 140addae88a63..6b1ce19e150c3 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-09-21 +date: 2023-09-22 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 5ec7ac253238b..17a917e2a265e 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-09-21 +date: 2023-09-22 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 0048f1faef58a..cf26a78cc2b36 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-09-21 +date: 2023-09-22 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 1e39702d1f580..bce63b9bf1c85 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-09-21 +date: 2023-09-22 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 55268c7a1bdbe..93d64281a7956 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-09-21 +date: 2023-09-22 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 c47451ef632d2..ec1805853e09f 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-09-21 +date: 2023-09-22 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 aa5867ab87295..f2688336d9187 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-09-21 +date: 2023-09-22 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 d3ddf2d43e3b9..e6bc16a4dc6cd 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-09-21 +date: 2023-09-22 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 708adeadc3770..82412b70a9a7f 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-09-21 +date: 2023-09-22 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 1cf9932177e27..68ccd0208e3c7 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-09-21 +date: 2023-09-22 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 07537e41fd88a..3b21a1ddd629e 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-09-21 +date: 2023-09-22 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 a646587639331..d5d9f12f8c6e8 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-09-21 +date: 2023-09-22 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 2d6083153ad25..72f21ddc906ad 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-09-21 +date: 2023-09-22 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 9746dda29b014..558374d2f33fb 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 037578e36942f..e06767755a8f6 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index efa04820ce936..cb9c82a0f53ca 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -4813,6 +4813,40 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "fleet", + "id": "def-server.AgentClient.getLatestAgentAvailableVersion", + "type": "Function", + "tags": [], + "label": "getLatestAgentAvailableVersion", + "description": [ + "\nReturn the latest agent available version" + ], + "signature": [ + "(includeCurrentVersion?: boolean | undefined) => Promise" + ], + "path": "x-pack/plugins/fleet/server/services/agents/agent_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "fleet", + "id": "def-server.AgentClient.getLatestAgentAvailableVersion.$1", + "type": "CompoundType", + "tags": [], + "label": "includeCurrentVersion", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/fleet/server/services/agents/agent_service.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 9f7dc59bfacf0..220ab1f983fe3 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1199 | 3 | 1082 | 41 | +| 1201 | 3 | 1083 | 41 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 80a900d285311..c1c9c5402d601 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index f15f32b1de60b..aee5828134402 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-09-21 +date: 2023-09-22 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 9dc2f69cc95a6..fc6a07abd0d34 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 34aaa66751a1e..f57663ddad381 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 0c8b53158be4e..09498eb3ca7fe 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-09-21 +date: 2023-09-22 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 081c1d59d4166..4ec3bd9d5e45e 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-09-21 +date: 2023-09-22 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 b21154eacb7d3..a0486e201c758 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-09-21 +date: 2023-09-22 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 a6429813c2f37..3676463b7614c 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-09-21 +date: 2023-09-22 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 d98566094813d..b8e54aa228ff8 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-09-21 +date: 2023-09-22 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 9d276deed7672..ce85a25b6facd 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-09-21 +date: 2023-09-22 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 9b3c238b76395..c7242a3b25fea 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-09-21 +date: 2023-09-22 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 3e61e5df8d3ca..d011edbdae5d1 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 091d6f9a18bbf..03c1fa1c71f40 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index b494dc066ec62..ffc6210b19809 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 6d8af2e4cace5..00d2cd1e73eee 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index d365b2fb916de..45fd3d345409e 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 4d52cf3d8feef..9d27c496947a3 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-09-21 +date: 2023-09-22 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 156403ede807e..60a1360b09ab8 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-09-21 +date: 2023-09-22 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 2969bbf60297e..47de0b7aa8e57 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 52d9cd5e12959..fb23c8aa0611c 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-09-21 +date: 2023-09-22 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 d98027d00da10..bf697c883cc90 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-09-21 +date: 2023-09-22 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 c8ef91197fafc..d8d74fe9a1218 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index b1ba6ce855866..cee306b855030 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 3ac2ca40aa99e..fe8da669c2798 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-09-21 +date: 2023-09-22 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 2639beeaa43be..25c9ac7cc90a5 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 325365f86ad74..6b0a6731953e8 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index dc74fd90a2471..95dc78fc51ef8 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-09-21 +date: 2023-09-22 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 9c3b7688dcde1..2d4de0c51257e 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-09-21 +date: 2023-09-22 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 4b645ec6864c3..79ed397ceab07 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 0b21ef1f375a7..7af3fb65445b6 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index c6becbc673a6d..1957d9e780c8a 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 3c6e4b9422efd..14d7ea379adf6 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-09-21 +date: 2023-09-22 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 3291a187efa84..3945439118506 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-09-21 +date: 2023-09-22 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 124e8f51c9c4e..ae0b78cf49298 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-09-21 +date: 2023-09-22 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 239ebeb4dd0a1..e9a793c11f2dc 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-09-21 +date: 2023-09-22 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 81c5b8e158a44..dc008c636c6d4 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 7ea1e57fe6c11..ca8d04923125b 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 0a3c3e632c656..f5e9691339161 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index b89f56f3dac0f..f201ed759e8e4 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-09-21 +date: 2023-09-22 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 110bb966caa63..4587d53b55ac8 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-09-21 +date: 2023-09-22 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 b11890375d8a7..1b6994ad21127 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 018398a19316f..250f203301bfb 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 651d5dd33d006..268d96212e1a3 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.devdocs.json b/api_docs/kbn_content_management_tabbed_table_list_view.devdocs.json index b39adaf02cf09..ca34bec5503a5 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.devdocs.json +++ b/api_docs/kbn_content_management_tabbed_table_list_view.devdocs.json @@ -180,6 +180,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/content-management-tabbed-table-list-view", + "id": "def-common.UserContentCommonSchema.managed", + "type": "CompoundType", + "tags": [], + "label": "managed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/content-management/table_list_view_table/src/table_list_view_table.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/content-management-tabbed-table-list-view", "id": "def-common.UserContentCommonSchema.references", diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 188215d1461fb..53ccdd4fd8440 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 14 | 0 | 14 | 0 | +| 15 | 0 | 15 | 0 | ## Common diff --git a/api_docs/kbn_content_management_table_list_view.devdocs.json b/api_docs/kbn_content_management_table_list_view.devdocs.json index 479945668d6c3..4a3573d5386ff 100644 --- a/api_docs/kbn_content_management_table_list_view.devdocs.json +++ b/api_docs/kbn_content_management_table_list_view.devdocs.json @@ -35,7 +35,7 @@ "section": "def-common.UserContentCommonSchema", "text": "UserContentCommonSchema" }, - ">({ title, description, entityName, entityNamePlural, initialFilter, headingId, initialPageSize, listingLimit, urlStateEnabled, customTableColumn, emptyPrompt, findItems, createItem, editItem, deleteItems, getDetailViewLink, onClickTitle, rowItemActions, id: listingId, contentEditor, children, titleColumnName, additionalRightSideActions, withoutPageTemplateWrapper, }: ", + ">({ title, description, entityName, entityNamePlural, initialFilter, headingId, initialPageSize, listingLimit, urlStateEnabled, customTableColumn, emptyPrompt, findItems, createItem, editItem, deleteItems, getDetailViewLink, onClickTitle, rowItemActions, id: listingId, contentEditor, children, titleColumnName, additionalRightSideActions, withoutPageTemplateWrapper, itemIsEditable, }: ", { "pluginId": "@kbn/content-management-table-list-view", "scope": "common", @@ -54,7 +54,7 @@ "id": "def-common.TableListView.$1", "type": "CompoundType", "tags": [], - "label": "{\n title,\n description,\n entityName,\n entityNamePlural,\n initialFilter,\n headingId,\n initialPageSize,\n listingLimit,\n urlStateEnabled = true,\n customTableColumn,\n emptyPrompt,\n findItems,\n createItem,\n editItem,\n deleteItems,\n getDetailViewLink,\n onClickTitle,\n rowItemActions,\n id: listingId,\n contentEditor,\n children,\n titleColumnName,\n additionalRightSideActions,\n withoutPageTemplateWrapper,\n}", + "label": "{\n title,\n description,\n entityName,\n entityNamePlural,\n initialFilter,\n headingId,\n initialPageSize,\n listingLimit,\n urlStateEnabled = true,\n customTableColumn,\n emptyPrompt,\n findItems,\n createItem,\n editItem,\n deleteItems,\n getDetailViewLink,\n onClickTitle,\n rowItemActions,\n id: listingId,\n contentEditor,\n children,\n titleColumnName,\n additionalRightSideActions,\n withoutPageTemplateWrapper,\n itemIsEditable,\n}", "description": [], "signature": [ { @@ -110,6 +110,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/content-management-table-list-view", + "id": "def-common.UserContentCommonSchema.managed", + "type": "CompoundType", + "tags": [], + "label": "managed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/content-management/table_list_view_table/src/table_list_view_table.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/content-management-table-list-view", "id": "def-common.UserContentCommonSchema.references", @@ -172,7 +186,7 @@ "section": "def-common.TableListViewTableProps", "text": "TableListViewTableProps" }, - ", \"id\" | \"entityName\" | \"entityNamePlural\" | \"initialFilter\" | \"headingId\" | \"initialPageSize\" | \"listingLimit\" | \"urlStateEnabled\" | \"customTableColumn\" | \"emptyPrompt\" | \"findItems\" | \"createItem\" | \"editItem\" | \"deleteItems\" | \"getDetailViewLink\" | \"onClickTitle\" | \"rowItemActions\" | \"contentEditor\" | \"titleColumnName\" | \"withoutPageTemplateWrapper\" | \"showEditActionForItem\"> & { title: string; description?: string | undefined; additionalRightSideActions?: React.ReactNode[] | undefined; children?: React.ReactNode; }" + ", \"id\" | \"entityName\" | \"entityNamePlural\" | \"initialFilter\" | \"headingId\" | \"initialPageSize\" | \"listingLimit\" | \"urlStateEnabled\" | \"customTableColumn\" | \"emptyPrompt\" | \"findItems\" | \"createItem\" | \"editItem\" | \"deleteItems\" | \"getDetailViewLink\" | \"onClickTitle\" | \"rowItemActions\" | \"contentEditor\" | \"titleColumnName\" | \"withoutPageTemplateWrapper\" | \"itemIsEditable\"> & { title: string; description?: string | undefined; additionalRightSideActions?: React.ReactNode[] | undefined; children?: React.ReactNode; }" ], "path": "packages/content-management/table_list_view/src/table_list_view.tsx", "deprecated": false, diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index 170c63b1056de..fcd9738888471 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 9 | 0 | 9 | 0 | +| 10 | 0 | 10 | 0 | ## Common diff --git a/api_docs/kbn_content_management_table_list_view_table.devdocs.json b/api_docs/kbn_content_management_table_list_view_table.devdocs.json index 5ec3703c8de0c..b7e7e71bdb404 100644 --- a/api_docs/kbn_content_management_table_list_view_table.devdocs.json +++ b/api_docs/kbn_content_management_table_list_view_table.devdocs.json @@ -125,7 +125,7 @@ "section": "def-common.UserContentCommonSchema", "text": "UserContentCommonSchema" }, - ">({ tableCaption, entityName, entityNamePlural, initialFilter: initialQuery, headingId, initialPageSize, listingLimit, urlStateEnabled, customTableColumn, emptyPrompt, rowItemActions, findItems, createItem, editItem, showEditActionForItem, deleteItems, getDetailViewLink, onClickTitle, id: listingId, contentEditor, titleColumnName, withoutPageTemplateWrapper, onFetchSuccess, refreshListBouncer, setPageDataTestSubject, }: ", + ">({ tableCaption, entityName, entityNamePlural, initialFilter: initialQuery, headingId, initialPageSize, listingLimit, urlStateEnabled, customTableColumn, emptyPrompt, rowItemActions, findItems, createItem, editItem, itemIsEditable, deleteItems, getDetailViewLink, onClickTitle, id: listingId, contentEditor, titleColumnName, withoutPageTemplateWrapper, onFetchSuccess, refreshListBouncer, setPageDataTestSubject, }: ", { "pluginId": "@kbn/content-management-table-list-view-table", "scope": "common", @@ -781,12 +781,12 @@ }, { "parentPluginId": "@kbn/content-management-table-list-view-table", - "id": "def-common.TableListViewTableProps.showEditActionForItem", + "id": "def-common.TableListViewTableProps.itemIsEditable", "type": "Function", "tags": [], - "label": "showEditActionForItem", + "label": "itemIsEditable", "description": [ - "\nHandler to set edit action visiblity per item." + "\nHandler to set edit action visiblity, and content editor readonly state per item. If not provided all non-managed items are considered editable. Note: Items with the managed property set to true will always be non-editable." ], "signature": [ "((item: T) => boolean) | undefined" @@ -797,7 +797,7 @@ "children": [ { "parentPluginId": "@kbn/content-management-table-list-view-table", - "id": "def-common.TableListViewTableProps.showEditActionForItem.$1", + "id": "def-common.TableListViewTableProps.itemIsEditable.$1", "type": "Uncategorized", "tags": [], "label": "item", @@ -987,6 +987,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/content-management-table-list-view-table", + "id": "def-common.UserContentCommonSchema.managed", + "type": "CompoundType", + "tags": [], + "label": "managed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/content-management/table_list_view_table/src/table_list_view_table.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/content-management-table-list-view-table", "id": "def-common.UserContentCommonSchema.references", diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index a8649213f653b..fde13f5eb7647 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 58 | 0 | 40 | 4 | +| 59 | 0 | 41 | 4 | ## Common diff --git a/api_docs/kbn_content_management_utils.devdocs.json b/api_docs/kbn_content_management_utils.devdocs.json index 94a1fd0f7abed..966c526f89231 100644 --- a/api_docs/kbn_content_management_utils.devdocs.json +++ b/api_docs/kbn_content_management_utils.devdocs.json @@ -2984,6 +2984,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/content-management-utils", + "id": "def-common.SOWithMetadata.managed", + "type": "CompoundType", + "tags": [], + "label": "managed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-content-management-utils/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/content-management-utils", "id": "def-common.SOWithMetadata.attributes", diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 31ee048e8ad4c..6aa660478c10c 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 188 | 1 | 123 | 0 | +| 189 | 1 | 124 | 0 | ## Common diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 1f7f128caf7c2..7da22f8572379 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 da93f6601d7d9..024f1640fda7b 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 3a40ee00c7ccb..23eb4008095c1 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 6b875c00ae899..920351513c793 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-09-21 +date: 2023-09-22 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 22482bfb0a5b1..3765a7afd7251 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 d36d46b053d29..81eca520d1a5b 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 d850a197d06f6..dfc1c7b023491 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 14664ced215e9..673a16a48e31a 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 307ff5c67f8e6..b3cff08708ebf 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 17a8f43988a85..140f06df4a84e 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-09-21 +date: 2023-09-22 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 3f78c95a4e005..f0dd7e687cd96 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 72aed8c8f0651..399b670077ac5 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 9d048033a780a..a35a7d9772bde 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index aeeba1a1c9f34..0709322575a70 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 13a5ef34d8b98..fd832996deafd 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-09-21 +date: 2023-09-22 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 174f701127b3d..da6ddec476ad6 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 fbe3aead38f84..1c537e7586d04 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 29dcf600a69b4..f9a0a4e30c2b3 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 23da9dab31b70..b85e9d6f449d8 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-09-21 +date: 2023-09-22 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 582ec194a91b8..d5e97b63d86f6 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-09-21 +date: 2023-09-22 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 0dca85b0bb485..fd795d4a33cee 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 599427fab304a..29b8a08665db1 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 0db7b77f53e74..02a6b53aab6a2 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 e21f08859d821..091e67309fb0f 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index bb061f13a9d71..0cdd42e7f4a5d 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 36d2048466be4..f6e227ccb9c44 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index a41e13ca6562d..461f0e32420bc 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index 34c35ab26a6de..a741b3da8ea83 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index 7a4385be82d90..c57c7063f4fc1 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index c604e8d061b71..5d710cf84979e 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index 0adaa6f44a26e..953668fd465cf 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index f8168a6a7768c..f26b3f795c8bd 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 b516f6b7a6131..e30ffc8d5f4fb 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 afc0b1dddea91..996e4822fb8a8 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 45b615479b210..1b938a1e95abe 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-09-21 +date: 2023-09-22 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 dad121aafb08a..63a00912384b1 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-09-21 +date: 2023-09-22 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 5fe6916db709e..cb0471c4c5ace 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 5dafef2bb5fd4..1ae9073ad21b8 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 28b76c2947789..7b7544ca16aa7 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 303adb43b6bba..30d1a08a87d85 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 bab6031bd0b77..ae35da4293e9d 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-09-21 +date: 2023-09-22 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 e92ac5997e51f..df799b96af2c7 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 e1bbf15fdba98..addadeea42e96 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 75589cfe131b6..3a6e407a0a26f 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 02d14a42b45ea..e031ba9e9cf46 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-09-21 +date: 2023-09-22 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 9397293d34512..7583617baf315 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 0c90b232da64e..819b0d87ddd1b 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 3ca02a1ec246f..f180c0ab490c8 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 c458aaddb64f9..d00e3f7f24b03 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 27b72ceac4a6f..7fee1311a30ba 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 b90445d1ef01e..8c557bce19c07 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 b3ea65c3f7e36..afbdc38866e40 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 24741aeec70b2..277cec7234c9d 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-09-21 +date: 2023-09-22 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 6c7402ede833b..50235e1199e3f 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-09-21 +date: 2023-09-22 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 4d0be0440fcda..475ca7f94a7ab 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 ef89bd2eee7f8..9cefa5c0b52ae 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 78f66331c1007..acc577bdb1af2 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 cade525b23559..50b20927fca07 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 962db9aefdfe0..7c5a8faf275fc 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 95191d15e3661..230ae226ccb7e 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 450b2834562c6..7c161daf1af14 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 3ad961561fd4d..a2f891fbc1ca0 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-09-21 +date: 2023-09-22 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 76998d550273d..f598850ea31db 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 5d0cb49e62980..11e6b53cae820 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-09-21 +date: 2023-09-22 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 46468d4b6d626..1e1a547f2d111 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-09-21 +date: 2023-09-22 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 2c5a4141cdb6c..fc568ac13d324 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 cf867f3206181..c1165ce3ee20f 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 014ba8ff39842..18e1d72612c2c 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 6e143cb460052..bf756d2ad0bff 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 795ccc192ec7d..577864e602ed4 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -3589,15 +3589,15 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/get_maintenance_window.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get/get_maintenance_window_route.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/find_maintenance_windows.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/find/find_maintenance_windows_route.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/active_maintenance_windows.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get_active/get_active_maintenance_windows_route.ts" }, { "plugin": "ruleRegistry", @@ -5187,54 +5187,6 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/list_alert_types.test.ts" }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/active_maintenance_windows.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/active_maintenance_windows.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/active_maintenance_windows.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/active_maintenance_windows.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/find_maintenance_windows.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/find_maintenance_windows.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/find_maintenance_windows.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/find_maintenance_windows.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/get_maintenance_window.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/get_maintenance_window.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/get_maintenance_window.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/get_maintenance_window.test.ts" - }, { "plugin": "cloudChat", "path": "x-pack/plugins/cloud_integrations/cloud_chat/server/routes/chat.test.ts" @@ -5331,6 +5283,54 @@ "plugin": "spaces", "path": "x-pack/plugins/spaces/server/routes/api/internal/get_active_space.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/find/find_maintenance_windows_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/find/find_maintenance_windows_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/find/find_maintenance_windows_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/find/find_maintenance_windows_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get/get_maintenance_window_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get/get_maintenance_window_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get/get_maintenance_window_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get/get_maintenance_window_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get_active/get_active_maintenance_windows_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get_active/get_active_maintenance_windows_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get_active/get_active_maintenance_windows_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/get_active/get_active_maintenance_windows_route.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/rule/apis/get_schedule_frequency/get_schedule_frequency_route.test.ts" @@ -6083,19 +6083,19 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/create_maintenance_window.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/create/create_maintenance_window_route.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/update_maintenance_window.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/update/update_maintenance_window_route.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/archive_maintenance_window.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/archive/archive_maintenance_window_route.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/finish_maintenance_window.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/finish/finish_maintenance_window_route.ts" }, { "plugin": "alerting", @@ -6107,7 +6107,7 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/bulk_get_maintenance_windows.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/bulk_get/bulk_get_maintenance_windows_route.ts" }, { "plugin": "alerting", @@ -7395,143 +7395,143 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/archive_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/suggestions/fileds_rule.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/archive_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/suggestions/fileds_rule.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/archive_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/suggestions/values_suggestion_alerts.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/archive_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/suggestions/values_suggestion_rules.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/bulk_get_maintenance_windows.test.ts" + "plugin": "remoteClusters", + "path": "x-pack/plugins/remote_clusters/server/routes/api/add_route.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/bulk_get_maintenance_windows.test.ts" + "plugin": "crossClusterReplication", + "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/auto_follow_pattern/register_create_route.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/bulk_get_maintenance_windows.test.ts" + "plugin": "crossClusterReplication", + "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/auto_follow_pattern/register_pause_route.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/bulk_get_maintenance_windows.test.ts" + "plugin": "crossClusterReplication", + "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/auto_follow_pattern/register_resume_route.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/create_maintenance_window.test.ts" + "plugin": "crossClusterReplication", + "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/follower_index/register_create_route.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/create_maintenance_window.test.ts" + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/create_maintenance_window.test.ts" + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/routes/api/external/copy_to_space.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/create_maintenance_window.test.ts" + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/routes/api/external/disable_legacy_url_aliases.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/finish_maintenance_window.test.ts" + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/routes/api/external/get_shareable_references.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/finish_maintenance_window.test.ts" + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/routes/api/external/post.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/finish_maintenance_window.test.ts" + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/routes/api/external/update_objects_spaces.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/finish_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/archive/archive_maintenance_window_route.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/update_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/archive/archive_maintenance_window_route.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/update_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/archive/archive_maintenance_window_route.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/update_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/archive/archive_maintenance_window_route.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/update_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/bulk_get/bulk_get_maintenance_windows_route.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/suggestions/fileds_rule.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/bulk_get/bulk_get_maintenance_windows_route.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/suggestions/fileds_rule.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/bulk_get/bulk_get_maintenance_windows_route.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/suggestions/values_suggestion_alerts.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/bulk_get/bulk_get_maintenance_windows_route.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/suggestions/values_suggestion_rules.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/create/create_maintenance_window_route.test.ts" }, { - "plugin": "remoteClusters", - "path": "x-pack/plugins/remote_clusters/server/routes/api/add_route.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/create/create_maintenance_window_route.test.ts" }, { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/auto_follow_pattern/register_create_route.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/create/create_maintenance_window_route.test.ts" }, { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/auto_follow_pattern/register_pause_route.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/create/create_maintenance_window_route.test.ts" }, { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/auto_follow_pattern/register_resume_route.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/finish/finish_maintenance_window_route.test.ts" }, { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/follower_index/register_create_route.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/finish/finish_maintenance_window_route.test.ts" }, { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/finish/finish_maintenance_window_route.test.ts" }, { - "plugin": "spaces", - "path": "x-pack/plugins/spaces/server/routes/api/external/copy_to_space.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/finish/finish_maintenance_window_route.test.ts" }, { - "plugin": "spaces", - "path": "x-pack/plugins/spaces/server/routes/api/external/disable_legacy_url_aliases.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/update/update_maintenance_window_route.test.ts" }, { - "plugin": "spaces", - "path": "x-pack/plugins/spaces/server/routes/api/external/get_shareable_references.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/update/update_maintenance_window_route.test.ts" }, { - "plugin": "spaces", - "path": "x-pack/plugins/spaces/server/routes/api/external/post.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/update/update_maintenance_window_route.test.ts" }, { - "plugin": "spaces", - "path": "x-pack/plugins/spaces/server/routes/api/external/update_objects_spaces.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/update/update_maintenance_window_route.test.ts" }, { "plugin": "alerting", @@ -8973,7 +8973,7 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/delete_maintenance_window.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/delete/delete_maintenance_window_route.ts" }, { "plugin": "savedObjectsTagging", @@ -9300,32 +9300,32 @@ "path": "x-pack/plugins/alerting/server/routes/legacy/delete.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/delete_maintenance_window.test.ts" + "plugin": "remoteClusters", + "path": "x-pack/plugins/remote_clusters/server/routes/api/delete_route.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/delete_maintenance_window.test.ts" + "plugin": "crossClusterReplication", + "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/auto_follow_pattern/register_delete_route.test.ts" }, { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/delete_maintenance_window.test.ts" + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/routes/api/external/delete.test.ts" }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/maintenance_window/delete_maintenance_window.test.ts" + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/delete/delete_maintenance_window_route.test.ts" }, { - "plugin": "remoteClusters", - "path": "x-pack/plugins/remote_clusters/server/routes/api/delete_route.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/delete/delete_maintenance_window_route.test.ts" }, { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/server/routes/api/auto_follow_pattern/register_delete_route.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/delete/delete_maintenance_window_route.test.ts" }, { - "plugin": "spaces", - "path": "x-pack/plugins/spaces/server/routes/api/external/delete.test.ts" + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/maintenance_window/apis/delete/delete_maintenance_window_route.test.ts" }, { "plugin": "indexManagement", diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 5beea5a93f3e7..45a1e51f79e72 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-09-21 +date: 2023-09-22 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 154222054352d..e62269372b1c2 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 1881c9974b76b..44781bdb83408 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 e41a6a77f475f..6602fb7f7b04f 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 d844e581a2567..bd3c0de2fd0de 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 ea024a1b9ccdb..295b86b14e296 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-09-21 +date: 2023-09-22 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 da1c0844d9f08..725a091f49333 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 35cb96086d842..3e7ebd20b8b46 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index d832292d805f1..40e171dc6b556 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 2e45bc70f2d04..ff26f1f7fdc7c 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 5a59bcfa28cf6..67048f05c61ac 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 918e760c1e253..ed2a8234d8560 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 2ffd2869cab6e..312c8bbf892fc 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index 2216ce5e3f1c2..69afe3c243673 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 5114b49da30be..1b1d8c6a6aacf 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 9e6959c933574..624eacbd8371b 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 44060d7d9dd50..7d1eba2343983 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 707b4faa949a1..253a3f62e4a46 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-09-21 +date: 2023-09-22 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 e74328ee67f08..d57524ebf3acd 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 ad94fb25fa4a9..3014aed904fc5 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 aa692b88141b4..f2ec00a640b98 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 dd9f6eba201c9..653ffce2c0657 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 6063376d0cf19..b3fdbae28e937 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-09-21 +date: 2023-09-22 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 52a57bce3dce1..da1e04d9ee115 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 1716908c46c85..22f8aabb0ba28 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 97fa48a69fec5..a7b5f5ddba8d7 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 1e4e096e62ab6..aca68a790cb9d 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-09-21 +date: 2023-09-22 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 d66994b505cfe..d567a9de6bb1c 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 aa5f7671bd5c3..7ee994f5bb5af 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 0bb9380d89c88..b4d25f09547c7 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 47ae15cffa2b9..b5d59b776121a 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 9e5ad68909f40..3e390a54e49e7 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 f51bf612b720a..3d58df9202505 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 1c7ffef6b9f11..7c5ad447c578a 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 ef1080b29e204..88b4e5fc6c638 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 cf4df31fb236a..5e3bbd9f67a36 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 4cc3b5e6540ee..374563fb2fbea 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index da6ab9479d8b3..38f693cd6dae9 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index ec94544400531..419cd1df0d822 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 0da6f7e1ad241..bd1bfcb4fe594 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-09-21 +date: 2023-09-22 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 2a50b16519f9b..80fc0e4122180 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 337926465062a..9b4cb612f2314 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 cf9585f9be816..66c154d23e68f 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 51dc1d6844ccf..34af26d47d28c 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 33d7aa0dec22d..4379d2e3f3fd7 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 7914ac70accca..9f9f635a51387 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 45906beb5babe..2eb3a71ec37fa 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 773d422ce96b1..253eaac04fded 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 de98cfc8c9ad0..97f653d13ea85 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 bf4036ad176e3..a9d961e75d4ad 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 5349d968d8ab8..2efea3b7e410b 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 3ca08594019cd..c6938f771bf50 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 79e9d8f711f45..cc3c7c8b60a96 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 7e9bb86fc7c1f..6fc8705133e17 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-09-21 +date: 2023-09-22 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 91e9026d832e9..7b3a543034891 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 37e220eedf12f..4bcd00a3b8617 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 acfc8db19c4d9..ab25c904b3ee2 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 9ac6f8f0bcf1f..324cdad1b02b3 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 2bd5338599b61..4369d053085e3 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-09-21 +date: 2023-09-22 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 e78ecc1dcb3e7..762a2e176514b 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 504b9ad866c7a..e27a1a79f1b19 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 f3d3b4fdd1be3..62d1857c1b901 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-09-21 +date: 2023-09-22 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 516256a8d61bb..772742436f9b0 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-09-21 +date: 2023-09-22 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 e56a7e442fb1f..35fd6912b6b3c 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 7c95af34cc346..3ec12ab410e76 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-09-21 +date: 2023-09-22 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 bc25b4033f907..a204c6f1b5ba7 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 5d1c1087237da..c0f25355b9992 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 813b12fc132e2..ccd59eeb55c6c 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-09-21 +date: 2023-09-22 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 51c977031f28e..0131281ceaa05 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index ab1270093e01c..7a5d11e67c0b7 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 98b356fbcf496..102395df40469 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index e4bb7d83d20e4..56d0fdd8619bb 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 998660b1f4f2b..5c61d4129794a 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index fda04acaf9871..9cdbbdabed441 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 cf042801d7fc8..23e1481d9360a 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-09-21 +date: 2023-09-22 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 b1af74b72ebc1..cf22ca6e3b21d 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 a033d70bd927d..6544dea589820 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 74aedb1f37b50..cb9a5a8b925a8 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-09-21 +date: 2023-09-22 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 5e075150532a2..26a0782676c22 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-09-21 +date: 2023-09-22 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 c0b247c9e7040..b35d5042ebb15 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 b2268bd2181d1..1f51c08a4787f 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 b049e668c467e..02ae993670d5e 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-09-21 +date: 2023-09-22 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 dfa67ee3d81ec..5140fce914005 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 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 c9fd7c9205458..94130ad246897 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 3f0032236d018..37cc5ca907bbe 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index 88fba0044a9c4..9b2e1a6219829 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 7d58c7ad18132..63ab42db16f8f 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 91f2086f61cde..8fa0da10ac0de 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-09-21 +date: 2023-09-22 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 f4c1f12435a26..739b12d904bd3 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 2f38d6ee1c668..ecad3af2d91e1 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index eea9b0fc62c96..d41cd83aa2383 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index cc31dafcb1b0c..56b306a2d3b9b 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index ab7fac244ecca..d709d866078ff 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index 078f368a5a527..3f1bcb59c481f 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index a8a20f807f994..9a7f3262c11aa 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 300e08db4a252..83f393c33e4b5 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index 9a86ab64ded6b..a0ce7e770ea3b 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index c413e298b6af3..29038d86fc914 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index e16639dcd8817..5c4e412493171 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 7b983fae12bc0..2de44a3faa57f 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index 3ab02b69008ac..44d03ad8d9c99 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index 3a078fae077ae..12b56d8bb1ca2 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index df48d387adfa7..d095e8a7ccde0 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index a4643bbc1db1a..d002745d84a01 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-09-21 +date: 2023-09-22 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 00245bb44762b..15564575a86fb 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-09-21 +date: 2023-09-22 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 a0e86942182ec..8f6fe98533086 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-09-21 +date: 2023-09-22 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.devdocs.json b/api_docs/kbn_dev_utils.devdocs.json index 6fa61e7f7047f..7df550ccddfd0 100644 --- a/api_docs/kbn_dev_utils.devdocs.json +++ b/api_docs/kbn_dev_utils.devdocs.json @@ -479,7 +479,7 @@ "tags": [], "label": "kibanaDevServiceAccount", "description": [ - "\n`kibana-dev` service account token for connecting to ESS\nSee packages/kbn-es/src/ess_resources/README.md" + "\n`kibana-dev` service account token for connecting to ESS\nSee packages/kbn-es/src/serverless_resources/README.md" ], "path": "packages/kbn-dev-utils/src/dev_service_account.ts", "deprecated": false, diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 6453b0855bacc..2637c24ba2cfd 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 33306c1c44319..5cb67a73c22ce 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 0d3a6383eefef..c1a0f7b4ed474 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-09-21 +date: 2023-09-22 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 5f5e1b0e7b2da..dadd55037b503 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 91ac62dc1748a..51dd9810e883d 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index db073f63806e1..66cb0b151da72 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index eac5e4a3116c3..9c953ce48bd86 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 6c59fcbb8dd50..11e4639add08f 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 0260e95574207..cf8a3341f99f8 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.devdocs.json b/api_docs/kbn_es.devdocs.json index 4d53e7ff40952..3c9a115ec44c0 100644 --- a/api_docs/kbn_es.devdocs.json +++ b/api_docs/kbn_es.devdocs.json @@ -626,7 +626,7 @@ "tags": [], "label": "getDockerFileMountPath", "description": [ - "\nRemoves REPO_ROOT from hostPath. Keep the rest to avoid filename collisions.\nReturns the path where a file will be mounted inside the ES or ESS container.\n/root/kibana/package/foo/bar.json => /usr/share/elasticsearch/files/package/foo/bar.json" + "\nRemoves REPO_ROOT from hostPath. Keep the rest to avoid filename collisions.\nReturns the path where a file will be mounted inside the ES or ES serverless container.\n/root/kibana/package/foo/bar.json => /usr/share/elasticsearch/files/package/foo/bar.json" ], "signature": [ "(hostPath: string) => string" @@ -716,7 +716,7 @@ "signature": [ "\"elastic_serverless\"" ], - "path": "packages/kbn-es/src/utils/ess_file_realm.ts", + "path": "packages/kbn-es/src/utils/serverless_file_realm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -731,7 +731,7 @@ "signature": [ "\"changeme\"" ], - "path": "packages/kbn-es/src/utils/ess_file_realm.ts", + "path": "packages/kbn-es/src/utils/serverless_file_realm.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 08ba49d3ab575..bb7716c1ff111 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 9e8741418668c..d6697529692a7 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-09-21 +date: 2023-09-22 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 3a198f04f77c6..41bdfb170d950 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-09-21 +date: 2023-09-22 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 094e7c556fbb4..9a20d6e85f8b2 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-09-21 +date: 2023-09-22 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 5b3a394b8287b..1862627a4ca1f 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-09-21 +date: 2023-09-22 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 0414e9e347f15..f0d86ce38dc3d 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index a055aa38dd55d..7ea19faa1a6e2 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 4fbdd8c2489f8..95797624a2f9b 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index c417be01991ec..8c04747d2e260 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 3113bcf9f9e09..bc798b6dce716 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-09-21 +date: 2023-09-22 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 5ed893d1a1902..df2c98c32d2a3 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-09-21 +date: 2023-09-22 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 22d53f9916240..548219d6201af 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-09-21 +date: 2023-09-22 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 fd135ab66b04d..0c14f13afe6b5 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index 0ac40d252c7ab..070cef62a474f 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index 52de8fab97857..c83435045386b 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx index 3f86b4bd5345b..6d71754cb2f3d 100644 --- a/api_docs/kbn_generate_csv_types.mdx +++ b/api_docs/kbn_generate_csv_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types title: "@kbn/generate-csv-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv-types plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types'] --- import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index edaa5d9c898ce..d7071dece0189 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index ee3393d592ede..095d8f329b1a8 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-09-21 +date: 2023-09-22 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 071f46f6131f8..6ceeff777948c 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index f201e7104b40c..de1971e68bf33 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 77dd7f2fe8d3d..5f4a98369fdb0 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-09-21 +date: 2023-09-22 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 d509beb85d7fa..ef194a957f9b3 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-09-21 +date: 2023-09-22 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 58f3b54992f7c..2329fb22f1dfe 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 923c2692cb7b1..7ddfe206339aa 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 74c98b3167a92..803d69d82e038 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 93699845957da..6cec5a1770dd3 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 532dc7e0147ee..81713b9e3d412 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-09-21 +date: 2023-09-22 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 a840b1390e377..a3739a8cb041a 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-09-21 +date: 2023-09-22 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 31cfb13988813..b4e642d7915ad 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-09-21 +date: 2023-09-22 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 5dd4b16f7971b..6290ef6ad3450 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index 48b73c2c67c9f..1541ab6ce5820 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index b9d9e9c8b7e94..3b2b423d95227 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index ce9acc5d1f037..ecfe4ef77b38e 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index f0ae5b4e7dcbb..6466a42b55776 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 59e79931862e0..e4382559f94f5 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-09-21 +date: 2023-09-22 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 8487009e22acd..bba3c7661af4a 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 4792c412dae5a..3619911acd788 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 8a0f94f6cb939..2ec7eef6d1e55 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index def6f35ed1504..0533e009cceb6 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 6f1d36d6db926..a781bd7ca9292 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 9e3c63985e3fe..66c05827d37c0 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 485a06a4fe724..d453d3b15c86b 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 11b13f11b9125..efecde91adf80 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index f8e1ad30cced8..be529bdfa5868 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 851ae1ee1e9b2..387cf9c5ffcd8 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index fa65c39a1ab62..12fe6e22f5cd1 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 16a88d4037be0..be4bfee5d5a7e 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index b31a054b18e37..4662f2103bb6b 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 451164d8339bd..5ae52c9eef87d 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index bf0a830ceb5b7..76b9d6d400011 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 51491053aeca2..9ffba6f54aa40 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index a3bd233547bed..d3571c755cd11 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index 79463d5277c54..3f9843c5cbc4c 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 2b8a64dada7f6..eda1bef0b06ee 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index d98622a6151d0..5a074ab6a23e6 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index 27233f6afd799..14aa346151d44 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 8199b34b2ee8c..a98fb39a9953c 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 0a8522db4cf25..51cc1956c906f 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index cd4488ed0fc75..44684de2203e7 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 7fb218fa9df4c..659a203b9162b 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 67696d70e4b49..7ae91815f0a5a 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 1637bb731345e..ec959764adbd6 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index dd2d0f0bad8ca..05097734bfc80 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 6da71251acdca..fee54383d9d36 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index 8ca8cf2e43929..745c775bf294a 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 28eaafc45de5e..7c84e79012562 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index 1deb1fe30d6f8..70c376dc94921 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 9e046eea9e486..8c3ae1eca6fa3 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 2d48c08a54e28..275e896313c4f 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 6b0c6049fe412..22b01520ac9b6 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index b40894f98bcfb..abf1d5e31d8b0 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 06a456230ef61..48d6961b4e668 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index d7d30209972a6..04100874810b0 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 6dd4f10d21d9f..b3f45e08d4e75 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-09-21 +date: 2023-09-22 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 4f97c8f4cd0cf..7998781742b06 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-09-21 +date: 2023-09-22 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 9080a2ae4f73a..d8e482526346a 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-09-21 +date: 2023-09-22 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 476ea619fd815..4ad3de6695aac 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-09-21 +date: 2023-09-22 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 7e4538c379e1b..757e1baf04c89 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-09-21 +date: 2023-09-22 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 6ee75d3f4671d..a44434f1f8b8c 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 57ac8b592246a..bf92b0aecbe99 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index efb549c1d7828..cff489262ab5a 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 7e21c28b13dfd..765cecd5eeae5 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 0f538e68f7881..c40e8cffdbbb6 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 12a8a4483cb2a..a314d2c7e8442 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 567b4153e4d2f..fd2da3293e4b5 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 4629cb9e45291..edfdc760cef49 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index f0a6f159f3b7a..d65fbc89cde63 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index ed6a8e1981a18..6193bce61e29f 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 8b4e44933a8a5..0a303dbf9b44d 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index ecd20af2807ef..1733dc69615a9 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index f2b391bca66d2..4346f3873fbac 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 46899d23edd68..35a3829fe910f 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 588fd1163811b..1bf417f743a24 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index d4dacc5e71fcd..cd73f8efc1f9b 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 746db6f3cd015..cc89ce7784dc5 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.devdocs.json b/api_docs/kbn_rule_data_utils.devdocs.json index e94f20267f817..ade3b78ed3eaa 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -1423,6 +1423,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.ES_QUERY_ID", + "type": "string", + "tags": [], + "label": "ES_QUERY_ID", + "description": [], + "signature": [ + "\".es-query\"" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.EVENT_ACTION", @@ -1498,6 +1513,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.OBSERVABILITY_THRESHOLD_RULE_TYPE_ID", + "type": "string", + "tags": [], + "label": "OBSERVABILITY_THRESHOLD_RULE_TYPE_ID", + "description": [], + "signature": [ + "\"observability.rules.custom_threshold\"" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.ruleDetailsRoute", @@ -1528,6 +1558,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.STACK_ALERTS_FEATURE_ID", + "type": "string", + "tags": [], + "label": "STACK_ALERTS_FEATURE_ID", + "description": [], + "signature": [ + "\"stackAlerts\"" + ], + "path": "packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.STATUS_VALUES", diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index e922af36c9495..97f5c212f037c 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detections-response](https://github.com/orgs/elastic/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 107 | 0 | 104 | 0 | +| 110 | 0 | 107 | 0 | ## Common diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 1f4f84be69f1c..5e3ebaab8db10 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 5ec676d6e0e34..2f2eefbba4aa3 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index f3bacf70c7e70..f70f3082fe070 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index a4b05b73ed3cc..93883850f5552 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 320445b6eb584..9962a59d32bde 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 59d743d13f6f5..429303a2dbaa2 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 5e21c7adb548b..a1f520a2cf200 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index bc8763c6cd5b0..238685b0576c2 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 385427048c604..ab9cd5e8f545b 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 161cf513064ec..190937970a146 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 9ad3744478ca9..7873a9b26d5ed 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index ce999d143a990..226811b00af95 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-09-21 +date: 2023-09-22 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 32dffaa7c501e..c665f01fc52b0 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 64eb50731e5f6..fcfd043fdbf8e 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index d5c353884be49..115b172663775 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-09-21 +date: 2023-09-22 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 809d66fcf0ce1..f164108bf4e56 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-09-21 +date: 2023-09-22 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 16a083a8dcaec..5154bc6c0a9c2 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-09-21 +date: 2023-09-22 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 cb2ce46d0a79c..80fcfff182c3f 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-09-21 +date: 2023-09-22 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 6e5f0b52df3ed..a9bd84fa8d245 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-09-21 +date: 2023-09-22 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 6b5109d5dda27..3fa5596c01b05 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-09-21 +date: 2023-09-22 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 0cf501e8c64e4..d7fd921b3c4fe 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-09-21 +date: 2023-09-22 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 c04457696052c..d9f7a85cc83cb 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-09-21 +date: 2023-09-22 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 b263459bda9c7..23fb37321d656 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-09-21 +date: 2023-09-22 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 aafa96c6b8b08..5f0608796216e 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-09-21 +date: 2023-09-22 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 01cb9df8560ba..7a7003ebd0aae 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-09-21 +date: 2023-09-22 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 642ee9e5049b5..e48161f7044b4 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-09-21 +date: 2023-09-22 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 cb9b8368e7fbe..b05a004d1c35f 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-09-21 +date: 2023-09-22 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 fce6de22dccae..6e69c2d555d8b 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 6d4ddc26935e2..6ce0bf1ab7758 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index 7628d3a9943f4..404dbdd3863b7 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 13960b4c4fe5f..553f0d97f15a6 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index d3aeb49e79cbc..f57e110e2b69f 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 6396bfa0e92c3..86cf1e917c764 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index b3883548ccbd2..4d4e828b80c0a 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index eab2f3de798ab..022198a65a2e0 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index 771e5888ce2f3..b7ddf83dbb839 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 3273faa46daa3..354d675a83a92 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 3f508f6e1d409..d602c01c8f162 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index d1f2a017ea674..2368b612381a4 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 80b4b93236fe0..7ea05e0cef5f7 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-09-21 +date: 2023-09-22 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 5d006ce596e10..88783b2cd0e6b 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-09-21 +date: 2023-09-22 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 a63817086c006..4268549742f4e 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 67b20a5253fd3..1a862faa8a3a9 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 7e61244c46070..7a06306bd1760 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index 6430b27b37519..0338dac4773f8 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index e2a620a2bc2ce..f3744f3dc0c49 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index 607c20e00fa4d..d7e09b4bf6e3f 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index d61b6b9f89c6a..d11dbac11a306 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index 4bee26ebb68e9..f16fcb97a9f22 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 2b195ca4faa88..f8748a0109fb6 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 23581809543d9..8c088720249f0 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index f37d7cf2f763d..42e7a3e74cdfe 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index 4669fbfc93b5c..af53361ad2157 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index 46c1e18698671..a4acd49c9d55e 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index fa9a85303f4ea..0192bed2e10c2 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 347681ff89d0a..3d3ee8afe7d59 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-09-21 +date: 2023-09-22 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 bee3ced958783..34cf51d4ba439 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 c9ba826f4d73b..3193d631cdb94 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-09-21 +date: 2023-09-22 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 1e439c4f80c57..ebf8d3ff50ef4 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 b0d941f8bb347..6e95914a80bb5 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-09-21 +date: 2023-09-22 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 70a8d9928615f..eb22647bfd33f 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 d57b253320c10..9d4431cb54950 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-09-21 +date: 2023-09-22 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 e0b5c0b4aceb6..fe61f2a770835 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-09-21 +date: 2023-09-22 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 aab4d7b6408b6..d902cd6264abd 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 a94e03c0c5b0a..5f309d581406a 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 6df2a945d3358..034dd12d6f70c 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-09-21 +date: 2023-09-22 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 dcd6a6ed05910..95d975ae93b84 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-09-21 +date: 2023-09-22 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 80c3e65393166..617372f0b1454 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index b647aff96ee45..d8d13a09d4cfd 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 890cf8ffb6eaa..ded92885807bb 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-09-21 +date: 2023-09-22 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 7f2b66bc34fdb..2e4e41d5ed3be 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-09-21 +date: 2023-09-22 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 4d3ff6f01dc8d..e058032ce4014 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-09-21 +date: 2023-09-22 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 7a29b62590976..379a8153eedb4 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-09-21 +date: 2023-09-22 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 17184a72d01b2..bf9989c24c1f4 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index f5c3185522ec2..969f9fca8ca6b 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 7da7ee72aef43..dfe3c7a5ce214 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index dbb0e02750420..2406ffda8025f 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-09-21 +date: 2023-09-22 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 4a85b93aac3ac..49c576287e616 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-09-21 +date: 2023-09-22 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 0c27909a3af32..7aea9db0bb9a6 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_subscription_tracking.mdx b/api_docs/kbn_subscription_tracking.mdx index 8efe2a60221d5..fd012ec676464 100644 --- a/api_docs/kbn_subscription_tracking.mdx +++ b/api_docs/kbn_subscription_tracking.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-subscription-tracking title: "@kbn/subscription-tracking" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/subscription-tracking plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/subscription-tracking'] --- import kbnSubscriptionTrackingObj from './kbn_subscription_tracking.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index ce557e38cc184..6280c2bf62cb3 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.devdocs.json b/api_docs/kbn_test.devdocs.json index 222a0d35f68c6..5fdb6cc0e3de2 100644 --- a/api_docs/kbn_test.devdocs.json +++ b/api_docs/kbn_test.devdocs.json @@ -2096,7 +2096,7 @@ "tags": [], "label": "getDockerFileMountPath", "description": [ - "\nRemoves REPO_ROOT from hostPath. Keep the rest to avoid filename collisions.\nReturns the path where a file will be mounted inside the ES or ESS container.\n/root/kibana/package/foo/bar.json => /usr/share/elasticsearch/files/package/foo/bar.json" + "\nRemoves REPO_ROOT from hostPath. Keep the rest to avoid filename collisions.\nReturns the path where a file will be mounted inside the ES or ES serverless container.\n/root/kibana/package/foo/bar.json => /usr/share/elasticsearch/files/package/foo/bar.json" ], "signature": [ "(hostPath: string) => string" diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index bd64d32ef49ae..574ec8be2bc6e 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-09-21 +date: 2023-09-22 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 15b79c3c0e184..774067a74aae0 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-09-21 +date: 2023-09-22 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 1b68ebd21346c..6d656fbe2f07c 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index e298cc07d56ce..1a5edef44c35e 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 102b18fd05e4a..5a0cc9de846ee 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 5d8254e5595e9..2403585f1a360 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index b1e232927c1ac..34d962c360426 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index fd4267c4545e0..464c2fab7c1af 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 8fb996ed962c6..5276da0774513 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 37472fbdc5a84..169836f4f0641 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 52c816d9859d7..81e5f65b678ff 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 8be1d0025d7e3..38a5a452a5983 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 903fee5faa4ed..ec237e35d4df9 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index a975b538a9dbb..02a39cad2f77f 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index b35dd16cc81a2..e10e10dba6309 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 3e9599dfccfe2..a936d3e59969d 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-09-21 +date: 2023-09-22 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 f8ec982bde618..3b4ebbe004b5c 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-09-21 +date: 2023-09-22 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 7b9d751a350c5..6588a288bc16b 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-09-21 +date: 2023-09-22 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 2e3cf322c2cd3..77592d923aad8 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index e7f99fbed1868..18dd47e2ec423 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index d918603b4dd1b..ccba570415f83 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 47958bd7be0b2..15410081dbd29 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-09-21 +date: 2023-09-22 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 693786c5361ed..780b9e61a9835 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-09-21 +date: 2023-09-22 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 37a8f1c39955a..25a9a440a99df 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.devdocs.json b/api_docs/kibana_utils.devdocs.json index a0c1a249a615d..49a839d4e4d8c 100644 --- a/api_docs/kibana_utils.devdocs.json +++ b/api_docs/kibana_utils.devdocs.json @@ -7095,6 +7095,21 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "kibanaUtils", + "id": "def-server.KbnServerError.requestParams", + "type": "Object", + "tags": [], + "label": "requestParams", + "description": [], + "signature": [ + "ConnectionRequestParams", + " | undefined" + ], + "path": "src/plugins/kibana_utils/server/report_server_error.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "kibanaUtils", "id": "def-server.KbnServerError.Unnamed", @@ -7153,6 +7168,22 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "kibanaUtils", + "id": "def-server.KbnServerError.Unnamed.$4", + "type": "Object", + "tags": [], + "label": "requestParams", + "description": [], + "signature": [ + "ConnectionRequestParams", + " | undefined" + ], + "path": "src/plugins/kibana_utils/server/report_server_error.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [] diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 8a1a411fd1139..696a564b63ab4 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-app-services](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 610 | 3 | 417 | 9 | +| 612 | 3 | 419 | 9 | ## Client diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 50257b59cfc42..f0e9814f7d49f 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-09-21 +date: 2023-09-22 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 62f688564bbdf..ba23faa9e4448 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-09-21 +date: 2023-09-22 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 2b6aa855cb4fb..2231825f490b5 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-09-21 +date: 2023-09-22 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 5aa6ab7857a48..b501fece7b5ac 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-09-21 +date: 2023-09-22 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 fa3ad2358899b..50afecd7400a5 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-09-21 +date: 2023-09-22 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 77336f712b2e4..743727f6c3dde 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index 140c7e9406e96..429a5643fa44d 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index b1f29f1957d2b..eb19b249e635b 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 7ea12f4dc5f0c..2c46a8f5e07ca 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index c0fe15718b0b0..0a91066187f1d 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-09-21 +date: 2023-09-22 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 e64231326653a..c196613b500d0 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index c00349e8168fb..16a1d24d3381e 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index cced2333d264f..c45d27e8fd7df 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1915,8 +1915,7 @@ "): { preview: (args_0: Readonly<{} & { timeRange: string; alertParams: Readonly<{} & { severity: number; jobSelection: Readonly<{} & { groupIds: string[]; jobIds: string[]; }>; resultType: \"bucket\" | \"record\" | \"influencer\"; includeInterim: boolean; lookbackInterval: string | null; topNBuckets: number | null; }>; sampleSize: number; }>) => Promise; execute: (params: Readonly<{} & { severity: number; jobSelection: Readonly<{} & { groupIds: string[]; jobIds: string[]; }>; resultType: \"bucket\" | \"record\" | \"influencer\"; includeInterim: boolean; lookbackInterval: string | null; topNBuckets: number | null; }>, spaceId: string) => Promise<{ context: ", "AnomalyDetectionAlertContext", "; name: string; isHealthy: boolean; } | undefined>; }; } & ", - "TrainedModelsProvider", - " & MlSetup" + "TrainedModelsProvider" ], "path": "x-pack/plugins/ml/server/plugin.ts", "deprecated": false, diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index b7c8f8a996d55..228921a11afdf 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-09-21 +date: 2023-09-22 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 524604a67cb69..6731ea235bb53 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-09-21 +date: 2023-09-22 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 48a3e009c3e2b..1a642d8be1074 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-09-21 +date: 2023-09-22 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 9cf0efdfd7466..5e6c2eadd5312 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-09-21 +date: 2023-09-22 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 6831ca9c2d2af..8f9ddecda236a 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 5bc6bddf52d89..6f35034b6dd6a 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 0d73b68f209ce..2082c07b451be 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 565c340aa3350..24b91072fdf6a 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 6d72757ddcabd..64646f4921921 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index 2d08b65888627..49fb0d5a738f1 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 667c6ce0254de..5a860321373d9 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 0cab1278f9eaf..de7daf3b26951 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 746067c836abd..4bdcb2ce30ac0 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 3c962c6a95ba9..0c3225be34306 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index b6fb713634393..16a06c4864c68 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 74941 | 223 | 63921 | 1536 | +| 74945 | 223 | 63920 | 1533 | ## Plugin Directory @@ -30,7 +30,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 269 | 0 | 263 | 31 | | | [@elastic/appex-sharedux @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 17 | 1 | 15 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 66 | 1 | 4 | 1 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 767 | 1 | 736 | 50 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 772 | 1 | 741 | 50 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 29 | 0 | 29 | 119 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 9 | 0 | 9 | 0 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | Asset manager plugin for entity assets (inventory, topology, etc) | 2 | 0 | 2 | 0 | @@ -57,14 +57,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 268 | 0 | 249 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 101 | 0 | 98 | 9 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 54 | 0 | 51 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3308 | 33 | 2577 | 24 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3310 | 33 | 2575 | 24 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin provides the ability to create data views via a modal flyout inside Kibana apps | 16 | 0 | 7 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Reusable data view field editor across Kibana | 72 | 0 | 33 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data view management app | 2 | 0 | 2 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1037 | 0 | 257 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 1 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 12 | 0 | 10 | 3 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 113 | 0 | 72 | 15 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 116 | 0 | 75 | 17 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 35 | 2 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Server APIs for the Elastic AI Assistant | 4 | 0 | 2 | 0 | @@ -96,7 +96,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 59 | 0 | 59 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 239 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 2 | 0 | 2 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1199 | 3 | 1082 | 41 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1201 | 3 | 1083 | 41 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 68 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -116,7 +116,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 186 | 0 | 147 | 5 | | kibanaUsageCollection | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | -| | [@elastic/kibana-app-services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 610 | 3 | 417 | 9 | +| | [@elastic/kibana-app-services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 612 | 3 | 419 | 9 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 617 | 0 | 520 | 61 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 8 | 0 | 8 | 0 | @@ -172,7 +172,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 119 | 0 | 60 | 10 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 22 | 1 | 22 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 256 | 0 | 65 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 24 | 0 | 24 | 3 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 23 | 0 | 23 | 3 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 4 | 0 | 4 | 1 | | synthetics | [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) | This plugin visualizes data from Synthetics and Heartbeat, and integrates with other Observability solutions. | 0 | 0 | 0 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 96 | 0 | 53 | 6 | @@ -182,10 +182,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 0 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 20 | 0 | 20 | 0 | | | [@elastic/protections-experience](https://github.com/orgs/elastic/teams/protections-experience) | Elastic threat intelligence helps you see if you are open to or have been subject to current or historical known threats | 30 | 0 | 14 | 5 | -| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 257 | 1 | 213 | 22 | +| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 240 | 1 | 196 | 17 | | | [@elastic/ml-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 | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 576 | 1 | 550 | 52 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 577 | 1 | 551 | 52 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 145 | 0 | 103 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 206 | 0 | 140 | 9 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains services reliant on the plugin lifecycle for the unified doc viewer component (see @kbn/unified-doc-viewer). | 13 | 0 | 10 | 3 | @@ -251,10 +251,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 24 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 140 | 3 | 137 | 18 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 4 | 4 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 14 | 0 | 14 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 58 | 0 | 40 | 4 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 188 | 1 | 123 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 15 | 0 | 15 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 10 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 59 | 0 | 41 | 4 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 189 | 1 | 124 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 0 | @@ -534,7 +534,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 73 | 0 | 65 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 16 | 0 | 16 | 1 | -| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 107 | 0 | 104 | 0 | +| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 110 | 0 | 107 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 68 | 0 | 68 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 1678 | 0 | 1678 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index f97101d749676..ba7cbca1982ab 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-09-21 +date: 2023-09-22 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 c012de8ea332e..e94d185508ae0 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 6058d4dbec2f3..0609578f23a45 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index ba37ba640c5c7..2d5df178269ee 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-09-21 +date: 2023-09-22 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 4f5522de92782..7490afd3a7fbf 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-09-21 +date: 2023-09-22 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 bfada70d2c7e1..f73d1b04d95b2 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-09-21 +date: 2023-09-22 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 cbfb7658e933b..e5cce5f5f2f52 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-09-21 +date: 2023-09-22 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 61d123e0bb163..b236704e0bfee 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-09-21 +date: 2023-09-22 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 48929bf0650a1..beb9a32bc2098 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-09-21 +date: 2023-09-22 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 65f13d7725a1e..bd00e5e103f66 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-09-21 +date: 2023-09-22 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 c25fddc1576ea..b0b4bde5929c3 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-09-21 +date: 2023-09-22 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 98d48307b5db9..a75c6c3388b17 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-09-21 +date: 2023-09-22 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 ffbde637f7bc3..50aeac53a7489 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: 2023-09-21 +date: 2023-09-22 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 f07b31928f1df..8f349befd4cd1 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: 2023-09-21 +date: 2023-09-22 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 a19ec711e953d..ce4b145bbcfbb 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: 2023-09-21 +date: 2023-09-22 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 5f0a297b21812..48c750d6bc02d 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: 2023-09-21 +date: 2023-09-22 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 5d4a064bf1791..109af80106f2f 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: 2023-09-21 +date: 2023-09-22 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 3af62e5ba250b..a7923ab0ebea8 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: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index c9ad7fa08de66..69021925f8403 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 07899c9d9990a..df2bd1d9a5c25 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 68e30aebcbcea..02fc4ebdd5fa9 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index fcc85d5205bdf..84690f348a3c4 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index f3326207ffc6b..37a31fd73233f 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index e9d053e28735f..cc616e5b79067 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: 2023-09-21 +date: 2023-09-22 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 4eaa16b6fb0d7..a686276f83d70 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: 2023-09-21 +date: 2023-09-22 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 9f53c276f7025..c96013e64620b 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: 2023-09-21 +date: 2023-09-22 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 6f456c9160f21..ad8e3644d6856 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: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.devdocs.json b/api_docs/stack_alerts.devdocs.json index cced9a721c32e..15f67c548f46e 100644 --- a/api_docs/stack_alerts.devdocs.json +++ b/api_docs/stack_alerts.devdocs.json @@ -406,23 +406,7 @@ } ], "enums": [], - "misc": [ - { - "parentPluginId": "stackAlerts", - "id": "def-common.STACK_ALERTS_FEATURE_ID", - "type": "string", - "tags": [], - "label": "STACK_ALERTS_FEATURE_ID", - "description": [], - "signature": [ - "\"stackAlerts\"" - ], - "path": "x-pack/plugins/stack_alerts/common/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], + "misc": [], "objects": [ { "parentPluginId": "stackAlerts", diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 8287050a59733..fff86f54798a4 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: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 24 | 0 | 24 | 3 | +| 23 | 0 | 23 | 3 | ## Client @@ -47,6 +47,3 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o ### Interfaces -### Consts, variables and types - - diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 69c7ab28e81cf..d746fa0665d1a 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: 2023-09-21 +date: 2023-09-22 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 5ddcda0dd8657..086262f28089c 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: 2023-09-21 +date: 2023-09-22 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 f9aed1362c7ea..bb67b1cca6855 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: 2023-09-21 +date: 2023-09-22 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 edb25486c1c06..9d4155b3549e1 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: 2023-09-21 +date: 2023-09-22 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 df129a2ff1a14..1cf90dfb7acf3 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: 2023-09-21 +date: 2023-09-22 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 2facb2867f53d..e4ef77861002d 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: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 546edabec4a1b..69a32bdb59fff 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index cd5373398fdc9..caa3bf81086ba 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: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.devdocs.json b/api_docs/timelines.devdocs.json index 789d5bfbc93f4..82d413e7c9d40 100644 --- a/api_docs/timelines.devdocs.json +++ b/api_docs/timelines.devdocs.json @@ -2937,150 +2937,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEqlRequestOptions", - "type": "Interface", - "tags": [], - "label": "TimelineEqlRequestOptions", - "description": [], - "signature": [ - { - "pluginId": "timelines", - "scope": "common", - "docId": "kibTimelinesPluginApi", - "section": "def-common.TimelineEqlRequestOptions", - "text": "TimelineEqlRequestOptions" - }, - " extends ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.EqlSearchStrategyRequest", - "text": "EqlSearchStrategyRequest" - }, - ",Omit<", - { - "pluginId": "timelines", - "scope": "common", - "docId": "kibTimelinesPluginApi", - "section": "def-common.TimelineEventsAllRequestOptions", - "text": "TimelineEventsAllRequestOptions" - }, - ", \"params\">" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/eql/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEqlRequestOptions.eventCategoryField", - "type": "string", - "tags": [], - "label": "eventCategoryField", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/eql/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEqlRequestOptions.tiebreakerField", - "type": "string", - "tags": [], - "label": "tiebreakerField", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/eql/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEqlRequestOptions.timestampField", - "type": "string", - "tags": [], - "label": "timestampField", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/eql/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEqlRequestOptions.size", - "type": "number", - "tags": [], - "label": "size", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/eql/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEqlRequestOptions.runtime_mappings", - "type": "Object", - "tags": [], - "label": "runtime_mappings", - "description": [], - "signature": [ - "Record & { type: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.RuntimePrimitiveTypes", - "text": "RuntimePrimitiveTypes" - }, - "; }> | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/eql/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEqlRequestOptions.body", - "type": "CompoundType", - "tags": [], - "label": "body", - "description": [], - "signature": [ - "(Omit<", - "EqlSearchRequest", - ", \"body\"> & EqlBody & { runtime_mappings?: ", - "RunTimeMappings", - "; }) | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/eql/index.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "timelines", "id": "def-common.TimelineEqlResponse", @@ -3182,153 +3038,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsAllRequestOptions", - "type": "Interface", - "tags": [], - "label": "TimelineEventsAllRequestOptions", - "description": [], - "signature": [ - { - "pluginId": "timelines", - "scope": "common", - "docId": "kibTimelinesPluginApi", - "section": "def-common.TimelineEventsAllRequestOptions", - "text": "TimelineEventsAllRequestOptions" - }, - " extends ", - "TimelineRequestOptionsPaginated", - "" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/all/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsAllRequestOptions.authFilter", - "type": "Object", - "tags": [], - "label": "authFilter", - "description": [], - "signature": [ - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.JsonObject", - "text": "JsonObject" - }, - " | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/all/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsAllRequestOptions.excludeEcsData", - "type": "CompoundType", - "tags": [], - "label": "excludeEcsData", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/all/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsAllRequestOptions.fieldRequested", - "type": "Array", - "tags": [], - "label": "fieldRequested", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/all/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsAllRequestOptions.fields", - "type": "CompoundType", - "tags": [], - "label": "fields", - "description": [], - "signature": [ - "string[] | { field: string; include_unmapped: boolean; }[]" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/all/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsAllRequestOptions.language", - "type": "CompoundType", - "tags": [], - "label": "language", - "description": [], - "signature": [ - "\"eql\" | \"kuery\" | \"lucene\"" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/all/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsAllRequestOptions.runtimeMappings", - "type": "Object", - "tags": [], - "label": "runtimeMappings", - "description": [], - "signature": [ - "Record & { type: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.RuntimePrimitiveTypes", - "text": "RuntimePrimitiveTypes" - }, - "; }> | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/all/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsAllRequestOptions.filterStatus", - "type": "CompoundType", - "tags": [], - "label": "filterStatus", - "description": [], - "signature": [ - "AlertWorkflowStatus | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/all/index.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "timelines", "id": "def-common.TimelineEventsAllStrategyResponse", @@ -3538,75 +3247,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsDetailsRequestOptions", - "type": "Interface", - "tags": [], - "label": "TimelineEventsDetailsRequestOptions", - "description": [], - "signature": [ - { - "pluginId": "timelines", - "scope": "common", - "docId": "kibTimelinesPluginApi", - "section": "def-common.TimelineEventsDetailsRequestOptions", - "text": "TimelineEventsDetailsRequestOptions" - }, - " extends Partial<", - "TimelineRequestOptionsPaginated", - ">" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/details/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsDetailsRequestOptions.indexName", - "type": "string", - "tags": [], - "label": "indexName", - "description": [], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/details/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsDetailsRequestOptions.eventId", - "type": "string", - "tags": [], - "label": "eventId", - "description": [], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/details/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsDetailsRequestOptions.authFilter", - "type": "Object", - "tags": [], - "label": "authFilter", - "description": [], - "signature": [ - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.JsonObject", - "text": "JsonObject" - }, - " | undefined" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/details/index.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "timelines", "id": "def-common.TimelineEventsDetailsStrategyResponse", @@ -3723,72 +3363,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsLastEventTimeRequestOptions", - "type": "Interface", - "tags": [], - "label": "TimelineEventsLastEventTimeRequestOptions", - "description": [], - "signature": [ - { - "pluginId": "timelines", - "scope": "common", - "docId": "kibTimelinesPluginApi", - "section": "def-common.TimelineEventsLastEventTimeRequestOptions", - "text": "TimelineEventsLastEventTimeRequestOptions" - }, - " extends Omit<", - "TimelineRequestBasicOptions", - ", \"timerange\" | \"runtimeMappings\" | \"filterQuery\">" - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/last_event_time/index.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsLastEventTimeRequestOptions.indexKey", - "type": "Enum", - "tags": [], - "label": "indexKey", - "description": [], - "signature": [ - { - "pluginId": "timelines", - "scope": "common", - "docId": "kibTimelinesPluginApi", - "section": "def-common.LastEventIndexKey", - "text": "LastEventIndexKey" - } - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/last_event_time/index.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "timelines", - "id": "def-common.TimelineEventsLastEventTimeRequestOptions.details", - "type": "Object", - "tags": [], - "label": "details", - "description": [], - "signature": [ - { - "pluginId": "timelines", - "scope": "common", - "docId": "kibTimelinesPluginApi", - "section": "def-common.LastTimeDetails", - "text": "LastTimeDetails" - } - ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/last_event_time/index.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "timelines", "id": "def-common.TimelineEventsLastEventTimeStrategyResponse", @@ -4199,7 +3773,19 @@ "tags": [], "label": "LastEventIndexKey", "description": [], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/last_event_time/index.ts", + "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/events_last_event_time.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "timelines", + "id": "def-common.TimelineEventsQueries", + "type": "Enum", + "tags": [], + "label": "TimelineEventsQueries", + "description": [], + "path": "x-pack/plugins/timelines/common/api/search_strategy/model/timeline_events_queries.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -5099,43 +4685,131 @@ }, { "parentPluginId": "timelines", - "id": "def-common.TimelineKpiStrategyRequest", + "id": "def-common.TimelineEqlRequestOptionsInput", "type": "Type", "tags": [], - "label": "TimelineKpiStrategyRequest", + "label": "TimelineEqlRequestOptionsInput", "description": [], "signature": [ - "{ id?: string | undefined; params?: ", + "{ sort: { field: string; direction: ", { - "pluginId": "data", + "pluginId": "timelines", "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.ISearchRequestParams", - "text": "ISearchRequestParams" + "docId": "kibTimelinesPluginApi", + "section": "def-common.Direction", + "text": "Direction" }, - " | undefined; timerange?: ", + "; esTypes?: string[] | undefined; type?: string | undefined; }[]; language: \"eql\"; fieldRequested: string[]; params?: any; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; runtimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; must: {}[]; must_not: {}[]; should: {}[]; }; } | undefined; eventCategoryField?: string | undefined; tiebreakerField?: string | undefined; timestampField?: string | undefined; size?: number | undefined; runTimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" + ], + "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/eql.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "timelines", + "id": "def-common.TimelineEventsAllOptionsInput", + "type": "Type", + "tags": [], + "label": "TimelineEventsAllOptionsInput", + "description": [], + "signature": [ + "{ sort: { field: string; esTypes: string[]; direction: ", { "pluginId": "timelines", "scope": "common", "docId": "kibTimelinesPluginApi", - "section": "def-common.TimerangeInput", - "text": "TimerangeInput" + "section": "def-common.Direction", + "text": "Direction" }, - " | undefined; defaultIndex: string[]; filterQuery: string | ", - "ESQuery", - " | undefined; factoryQueryType?: ", - "TimelineEventsQueries", - " | undefined; entityType?: ", + "; type?: string | undefined; }[]; fields: (string | { field: string; include_unmapped: boolean; })[]; language: \"kuery\" | \"lucene\"; fieldRequested: string[]; factoryQueryType: ", { "pluginId": "timelines", "scope": "common", "docId": "kibTimelinesPluginApi", - "section": "def-common.EntityType", - "text": "EntityType" + "section": "def-common.TimelineEventsQueries", + "text": "TimelineEventsQueries" }, - " | undefined; indexType?: string | undefined; }" + ".all; params?: any; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; excludeEcsData?: boolean | undefined; filterQuery?: any; runtimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" ], - "path": "x-pack/plugins/timelines/common/search_strategy/timeline/events/last_event_time/index.ts", + "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/events_all.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "timelines", + "id": "def-common.TimelineEventsDetailsRequestOptionsInput", + "type": "Type", + "tags": [], + "label": "TimelineEventsDetailsRequestOptionsInput", + "description": [], + "signature": [ + "{ indexName: string; factoryQueryType: ", + { + "pluginId": "timelines", + "scope": "common", + "docId": "kibTimelinesPluginApi", + "section": "def-common.TimelineEventsQueries", + "text": "TimelineEventsQueries" + }, + ".details; eventId: string; params?: any; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; must: {}[]; must_not: {}[]; should: {}[]; }; } | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; pagination?: Zod.objectInputType<{ activePage: Zod.ZodNumber; cursorStart: Zod.ZodOptional; querySize: Zod.ZodNumber; }, Zod.ZodTypeAny, \"passthrough\"> | undefined; authFilter?: {} | undefined; runtimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; }" + ], + "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/events_details.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "timelines", + "id": "def-common.TimelineEventsLastEventTimeRequestOptionsInput", + "type": "Type", + "tags": [], + "label": "TimelineEventsLastEventTimeRequestOptionsInput", + "description": [], + "signature": [ + "{ details: { hostName?: string | null | undefined; userName?: string | null | undefined; ip?: string | null | undefined; }; factoryQueryType: ", + { + "pluginId": "timelines", + "scope": "common", + "docId": "kibTimelinesPluginApi", + "section": "def-common.TimelineEventsQueries", + "text": "TimelineEventsQueries" + }, + ".lastEventTime; indexKey: ", + { + "pluginId": "timelines", + "scope": "common", + "docId": "kibTimelinesPluginApi", + "section": "def-common.LastEventIndexKey", + "text": "LastEventIndexKey" + }, + "; params?: any; defaultIndex?: string[] | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; }" + ], + "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/events_last_event_time.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "timelines", + "id": "def-common.TimelineKpiRequestOptionsInput", + "type": "Type", + "tags": [], + "label": "TimelineKpiRequestOptionsInput", + "description": [], + "signature": [ + "{ factoryQueryType: ", + { + "pluginId": "timelines", + "scope": "common", + "docId": "kibTimelinesPluginApi", + "section": "def-common.TimelineEventsQueries", + "text": "TimelineEventsQueries" + }, + ".kpi; params?: any; timerange?: { interval: string; from: string; to: string; } | undefined; defaultIndex?: string[] | undefined; runtimeMappings?: Record; } | undefined; fetch_fields?: string[] | undefined; format?: string | undefined; input_field?: string | undefined; target_field?: string | undefined; target_index?: string | undefined; }> | undefined; filterQuery?: string | Record | { range: Record; } | { query_string: { query: string; analyze_wildcard: boolean; }; } | { match: Record; } | { term: Record; } | { bool: { filter: {}[]; must: {}[]; must_not: {}[]; should: {}[]; }; } | undefined; indexType?: string | undefined; entityType?: \"events\" | \"sessions\" | undefined; filterStatus?: \"open\" | \"closed\" | \"acknowledged\" | undefined; }" + ], + "path": "x-pack/plugins/timelines/common/api/search_strategy/timeline/kpi.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index e045494640abb..808f39224ace7 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: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-threat-hunting-investigations](https://github.com/org | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 257 | 1 | 213 | 22 | +| 240 | 1 | 196 | 17 | ## Client diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index df9ed8edbc01b..12c0a247ef648 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: 2023-09-21 +date: 2023-09-22 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 2bbfb1290b896..389ff0f130e26 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -1214,7 +1214,7 @@ "label": "loadRuleAggregations", "description": [], "signature": [ - "({\n http,\n searchText,\n typesFilter,\n actionTypesFilter,\n ruleExecutionStatusesFilter,\n ruleStatusesFilter,\n tagsFilter,\n}: ", + "({\n http,\n searchText,\n typesFilter,\n actionTypesFilter,\n ruleExecutionStatusesFilter,\n ruleStatusesFilter,\n tagsFilter,\n filterConsumers,\n}: ", "LoadRuleAggregationsProps", ") => Promise<", "AggregateRulesResponse", @@ -1229,7 +1229,7 @@ "id": "def-public.loadRuleAggregations.$1", "type": "Object", "tags": [], - "label": "{\n http,\n searchText,\n typesFilter,\n actionTypesFilter,\n ruleExecutionStatusesFilter,\n ruleStatusesFilter,\n tagsFilter,\n}", + "label": "{\n http,\n searchText,\n typesFilter,\n actionTypesFilter,\n ruleExecutionStatusesFilter,\n ruleStatusesFilter,\n tagsFilter,\n filterConsumers,\n}", "description": [], "signature": [ "LoadRuleAggregationsProps" @@ -6238,6 +6238,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.RuleCreationValidConsumer", + "type": "Type", + "tags": [], + "label": "RuleCreationValidConsumer", + "description": [], + "signature": [ + "\"logs\" | \"infrastructure\" | \"stackAlerts\"" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-public.RuleEventLogListProps", diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 1097cbe608606..df5a76abf9f2d 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 576 | 1 | 550 | 52 | +| 577 | 1 | 551 | 52 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 1cbb5fba59fb8..d52144d661862 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-09-21 +date: 2023-09-22 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 d9d66d5e74ee3..05e5d8e42c28c 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 9e53e32a5431c..33048024dc6e7 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 14e7d09cda721..e03dbbc665e92 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 7a4d624baa26f..22d4518d69543 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-09-21 +date: 2023-09-22 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 f6bd35705d3d3..c5462d81d5497 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index ad87dc1ae461f..4f0d39cd4a159 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index a608afc4f8085..f0026daef911b 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-09-21 +date: 2023-09-22 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 d709c17c5879e..ea963f774c09b 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-09-21 +date: 2023-09-22 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 6cd6a2755d511..064481b8f8f6b 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-09-21 +date: 2023-09-22 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 d9876b235a598..273e3e9156ee9 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-09-21 +date: 2023-09-22 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 8fc1446a1081c..3db41e76a99c2 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-09-21 +date: 2023-09-22 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 4b2db22360e64..6b6a69fddd6dc 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-09-21 +date: 2023-09-22 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 0ddeff74aafca..97d72682a3492 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-09-21 +date: 2023-09-22 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 defb27e85ef61..def64f41e8e54 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-09-21 +date: 2023-09-22 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 017a8b07f6406..1181189a097a8 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-09-21 +date: 2023-09-22 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 f847aee632b62..4d58d808a52d7 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-09-21 +date: 2023-09-22 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 3cb1db646e81f..6562041cfc499 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-09-21 +date: 2023-09-22 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 1561f33597aa2..5ffd1754e564d 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-09-21 +date: 2023-09-22 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 043982c89fc8d..683d3cff7fcff 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-09-21 +date: 2023-09-22 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 d3c74ddb82506..e7250b4926ef4 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-09-21 +date: 2023-09-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/packages/kbn-profiling-utils/common/profiling_status.ts b/packages/kbn-profiling-utils/common/profiling_status.ts new file mode 100644 index 0000000000000..72c15a5b6a15f --- /dev/null +++ b/packages/kbn-profiling-utils/common/profiling_status.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +export interface ProfilingStatus { + has_setup: boolean; + has_data: boolean; + pre_8_9_1_data: boolean; + unauthorized?: boolean; +} diff --git a/packages/kbn-profiling-utils/index.ts b/packages/kbn-profiling-utils/index.ts index f5719dbc7b32d..38ab8d11be237 100644 --- a/packages/kbn-profiling-utils/index.ts +++ b/packages/kbn-profiling-utils/index.ts @@ -49,4 +49,5 @@ export type { StackTrace, StackTraceID, } from './common/profiling'; +export type { ProfilingStatus } from './common/profiling_status'; export type { TopNFunctions } from './common/functions'; diff --git a/packages/kbn-rule-data-utils/index.ts b/packages/kbn-rule-data-utils/index.ts index ea0028b972ed9..3e9787891be05 100644 --- a/packages/kbn-rule-data-utils/index.ts +++ b/packages/kbn-rule-data-utils/index.ts @@ -14,3 +14,4 @@ export * from './src/alerts_as_data_severity'; export * from './src/alerts_as_data_status'; export * from './src/alerts_as_data_cases'; export * from './src/routes/stack_rule_paths'; +export * from './src/rule_types'; diff --git a/packages/kbn-rule-data-utils/src/rule_types/index.ts b/packages/kbn-rule-data-utils/src/rule_types/index.ts new file mode 100644 index 0000000000000..b2f860b063c9b --- /dev/null +++ b/packages/kbn-rule-data-utils/src/rule_types/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './stack_rules'; +export * from './o11y_rules'; diff --git a/packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts b/packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts new file mode 100644 index 0000000000000..86c5ef3f2e646 --- /dev/null +++ b/packages/kbn-rule-data-utils/src/rule_types/o11y_rules.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export const OBSERVABILITY_THRESHOLD_RULE_TYPE_ID = 'observability.rules.custom_threshold'; diff --git a/packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts b/packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts new file mode 100644 index 0000000000000..ff426a9069537 --- /dev/null +++ b/packages/kbn-rule-data-utils/src/rule_types/stack_rules.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export const STACK_ALERTS_FEATURE_ID = 'stackAlerts'; +export const ES_QUERY_ID = '.es-query'; diff --git a/packages/kbn-url-state/index.test.ts b/packages/kbn-url-state/index.test.ts index 33dc285e100e5..e2a85e58902f1 100644 --- a/packages/kbn-url-state/index.test.ts +++ b/packages/kbn-url-state/index.test.ts @@ -23,6 +23,7 @@ describe('useSyncToUrl', () => { window.location = { ...originalLocation, search: '', + hash: '', }; window.history = { ...originalHistory, @@ -65,9 +66,30 @@ describe('useSyncToUrl', () => { ); }); + it('should should not alter the location hash', () => { + const key = 'testKey'; + const valueToSerialize = { test: 'value' }; + window.location.hash = '#should_be_there'; + + const { result } = renderHook(() => useSyncToUrl(key, jest.fn())); + + act(() => { + result.current(valueToSerialize); + }); + + expect(window.history.replaceState).toHaveBeenCalledWith( + { path: expect.any(String) }, + '', + '/#should_be_there?testKey=%28test%3Avalue%29' + ); + }); + it('should clear the value from the query string on unmount', () => { const key = 'testKey'; + // Location should have a key to clear + window.location.search = `?${key}=${encode({ test: 'value' })}`; + const { unmount } = renderHook(() => useSyncToUrl(key, jest.fn())); act(() => { @@ -85,6 +107,9 @@ describe('useSyncToUrl', () => { const key = 'testKey'; const restore = jest.fn(); + // Location should have a key to clear + window.location.search = `?${key}=${encode({ test: 'value' })}`; + renderHook(() => useSyncToUrl(key, restore, true)); act(() => { @@ -92,10 +117,6 @@ describe('useSyncToUrl', () => { }); expect(window.history.replaceState).toHaveBeenCalledTimes(1); - expect(window.history.replaceState).toHaveBeenCalledWith( - { path: expect.any(String) }, - '', - '/?' - ); + expect(window.history.replaceState).toHaveBeenCalledWith({ path: expect.any(String) }, '', '/'); }); }); diff --git a/packages/kbn-url-state/use_sync_to_url.ts b/packages/kbn-url-state/use_sync_to_url.ts index e38f9bc688a8b..e6f1531980f75 100644 --- a/packages/kbn-url-state/use_sync_to_url.ts +++ b/packages/kbn-url-state/use_sync_to_url.ts @@ -55,10 +55,15 @@ export const useSyncToUrl = ( searchParams.delete(key); } - const newSearch = searchParams.toString(); + const stringifiedSearchParams = searchParams.toString(); + const newSearch = stringifiedSearchParams.length > 0 ? `?${stringifiedSearchParams}` : ''; + + if (window.location.search === newSearch) { + return; + } // Update query string without unnecessary re-render - const newUrl = `${window.location.pathname}?${newSearch}`; + const newUrl = `${window.location.pathname}${window.location.hash}${newSearch}`; window.history.replaceState({ path: newUrl }, '', newUrl); }, [key] diff --git a/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.tsx b/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.tsx index cb352fe883152..109079f43fb8f 100644 --- a/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.tsx +++ b/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.tsx @@ -184,7 +184,7 @@ export const MetricVis = ({ const baseMetric: MetricWNumber = { value, valueFormatter: formatPrimaryMetric, - title, + title: String(title), subtitle, icon: config.metric?.icon ? getIcon(config.metric?.icon) : undefined, extra: ( diff --git a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx index 2993193ccc2bf..618557d4388eb 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/open_alerts_popover.tsx @@ -13,6 +13,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import type { DataView } from '@kbn/data-plugin/common'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { STACK_ALERTS_FEATURE_ID } from '@kbn/rule-data-utils'; import { DiscoverStateContainer } from '../../services/discover_state'; import { DiscoverServices } from '../../../../build_services'; @@ -97,7 +98,7 @@ export function AlertsPopover({ return triggersActionsUi?.getAddRuleFlyout({ metadata: discoverMetadata, - consumer: 'discover', + consumer: STACK_ALERTS_FEATURE_ID, onClose: (_, metadata) => { onFinishFlyoutInteraction(metadata as EsQueryAlertMetaData); onClose(); diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json index f7b1e45e9a608..cb84d95d69f7c 100644 --- a/src/plugins/discover/tsconfig.json +++ b/src/plugins/discover/tsconfig.json @@ -72,6 +72,7 @@ "@kbn/react-kibana-context-render", "@kbn/unified-data-table", "@kbn/no-data-page-plugin", + "@kbn/rule-data-utils", "@kbn/global-search-plugin" ], "exclude": [ diff --git a/x-pack/performance/journeys/many_fields_transform.ts b/x-pack/performance/journeys/many_fields_transform.ts index 6fe945914c358..14187c20e5c59 100644 --- a/x-pack/performance/journeys/many_fields_transform.ts +++ b/x-pack/performance/journeys/many_fields_transform.ts @@ -15,11 +15,11 @@ export const journey = new Journey({ .step('Go to Transforms', async ({ page, kbnUrl, kibanaPage }) => { await page.goto(kbnUrl.get(`app/management/data/transform`)); await kibanaPage.waitForHeader(); - await page.waitForSelector(subj('transformCreateFirstButton')); + await page.waitForSelector(subj('transformButtonCreate')); await page.waitForSelector(subj('globalLoadingIndicator-hidden')); }) .step('Go to data view selection', async ({ page }) => { - const createButtons = page.locator(subj('transformCreateFirstButton')); + const createButtons = page.locator(subj('transformButtonCreate')); await createButtons.first().click(); await page.waitForSelector(subj('savedObjectsFinderTable')); }) diff --git a/x-pack/plugins/alerting/common/routes/rule/apis/aggregate/schemas/v1.ts b/x-pack/plugins/alerting/common/routes/rule/apis/aggregate/schemas/v1.ts index d49ccb090d53d..95f07bf3f7bda 100644 --- a/x-pack/plugins/alerting/common/routes/rule/apis/aggregate/schemas/v1.ts +++ b/x-pack/plugins/alerting/common/routes/rule/apis/aggregate/schemas/v1.ts @@ -24,6 +24,7 @@ export const aggregateRulesRequestBodySchema = schema.object({ ) ), filter: schema.maybe(schema.string()), + filter_consumers: schema.maybe(schema.arrayOf(schema.string())), }); export const aggregateRulesResponseBodySchema = schema.object({ diff --git a/x-pack/plugins/alerting/public/alert_navigation_registry/types.ts b/x-pack/plugins/alerting/public/alert_navigation_registry/types.ts index 405f040d5b3ae..136c44b2cd513 100644 --- a/x-pack/plugins/alerting/public/alert_navigation_registry/types.ts +++ b/x-pack/plugins/alerting/public/alert_navigation_registry/types.ts @@ -16,4 +16,4 @@ import { SanitizedRule } from '../../common'; * originally registered to {@link PluginSetupContract.registerNavigation}. * */ -export type AlertNavigationHandler = (rule: SanitizedRule) => string; +export type AlertNavigationHandler = (rule: SanitizedRule) => string | undefined; diff --git a/x-pack/plugins/alerting/public/plugin.ts b/x-pack/plugins/alerting/public/plugin.ts index b4cfc68bc267f..1e8f1721aa126 100644 --- a/x-pack/plugins/alerting/public/plugin.ts +++ b/x-pack/plugins/alerting/public/plugin.ts @@ -138,7 +138,8 @@ export class AlertingPublicPlugin if (this.alertNavigationRegistry!.has(rule.consumer, ruleType)) { const navigationHandler = this.alertNavigationRegistry!.get(rule.consumer, ruleType); - return navigationHandler(rule); + const navUrl = navigationHandler(rule); + if (navUrl) return navUrl; } if (rule.viewInAppRelativeUrl) { diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts index 16eaec0889ed4..2b9a1e0cf0b84 100644 --- a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts @@ -61,6 +61,7 @@ const ruleType: jest.Mocked = { mappings: { fieldMap: { field: { type: 'keyword', required: false } } }, shouldWrite: true, }, + validLegacyConsumers: [], }; const mockLegacyAlertsClient = legacyAlertsClientMock.create(); @@ -1302,6 +1303,236 @@ describe('Alerts Client', () => { ); }); + test('should log if alert to update belongs to a non-standard index', async () => { + clusterClient.search.mockResolvedValue({ + took: 10, + timed_out: false, + _shards: { failed: 0, successful: 1, total: 1, skipped: 0 }, + hits: { + total: { + relation: 'eq', + value: 2, + }, + hits: [ + { + _id: 'abc', + _index: 'partial-.internal.alerts-test.alerts-default-000001', + _seq_no: 41, + _primary_term: 665, + _source: { + '@timestamp': '2023-03-28T12:27:28.159Z', + event: { + action: 'active', + kind: 'signal', + }, + kibana: { + alert: { + action_group: 'default', + duration: { + us: '0', + }, + flapping: false, + flapping_history: [true], + instance: { + id: '1', + }, + rule: { + category: 'My test rule', + consumer: 'bar', + execution: { + uuid: '5f6aa57d-3e22-484e-bae8-cbed868f4d28', + }, + name: 'rule-name', + parameters: { + bar: true, + }, + producer: 'alerts', + revision: 0, + rule_type_id: 'test.rule-type', + tags: ['rule-', '-tags'], + uuid: '1', + }, + start: '2023-03-28T12:27:28.159Z', + status: 'active', + time_range: { + gte: '2023-03-28T12:27:28.159Z', + }, + uuid: 'abc', + workflow_status: 'open', + }, + space_ids: ['default'], + version: '8.8.0', + }, + tags: ['rule-', '-tags'], + }, + }, + { + _id: 'xyz', + _index: '.internal.alerts-test.alerts-default-000002', + _seq_no: 41, + _primary_term: 665, + _source: { + '@timestamp': '2023-03-28T12:27:28.159Z', + event: { + action: 'active', + kind: 'signal', + }, + kibana: { + alert: { + action_group: 'default', + duration: { + us: '0', + }, + flapping: false, + flapping_history: [true], + instance: { + id: '2', + }, + rule: { + category: 'My test rule', + consumer: 'bar', + execution: { + uuid: '5f6aa57d-3e22-484e-bae8-cbed868f4d28', + }, + name: 'rule-name', + parameters: { + bar: true, + }, + producer: 'alerts', + revision: 0, + rule_type_id: 'test.rule-type', + tags: ['rule-', '-tags'], + uuid: '1', + }, + start: '2023-03-28T12:27:28.159Z', + status: 'active', + time_range: { + gte: '2023-03-28T12:27:28.159Z', + }, + uuid: 'xyz', + workflow_status: 'open', + }, + space_ids: ['default'], + version: '8.8.0', + }, + tags: ['rule-', '-tags'], + }, + }, + ], + }, + }); + const alertsClient = new AlertsClient<{}, {}, {}, 'default', 'recovered'>( + alertsClientParams + ); + + await alertsClient.initializeExecution({ + maxAlerts, + ruleLabel: `test: rule-name`, + flappingSettings: DEFAULT_FLAPPING_SETTINGS, + activeAlertsFromState: { + '1': { + state: { foo: true, start: '2023-03-28T12:27:28.159Z', duration: '0' }, + meta: { + flapping: false, + flappingHistory: [true], + maintenanceWindowIds: [], + lastScheduledActions: { group: 'default', date: new Date().toISOString() }, + uuid: 'abc', + }, + }, + '2': { + state: { foo: true, start: '2023-03-28T12:27:28.159Z', duration: '0' }, + meta: { + flapping: false, + flappingHistory: [true], + maintenanceWindowIds: [], + lastScheduledActions: { group: 'default', date: new Date().toISOString() }, + uuid: 'xyz', + }, + }, + }, + recoveredAlertsFromState: {}, + }); + + // Report 2 active alerts + const alertExecutorService = alertsClient.factory(); + alertExecutorService.create('1').scheduleActions('default'); + alertExecutorService.create('2').scheduleActions('default'); + + alertsClient.processAndLogAlerts(processAndLogAlertsOpts); + + await alertsClient.persistAlerts(); + + expect(clusterClient.bulk).toHaveBeenCalledWith({ + index: '.alerts-test.alerts-default', + refresh: 'wait_for', + require_alias: !useDataStreamForAlerts, + body: [ + { + index: { + _id: 'xyz', + _index: '.internal.alerts-test.alerts-default-000002', + if_seq_no: 41, + if_primary_term: 665, + require_alias: false, + }, + }, + // ongoing alert doc + { + '@timestamp': date, + event: { + action: 'active', + kind: 'signal', + }, + kibana: { + alert: { + action_group: 'default', + duration: { + us: '36000000000000', + }, + flapping: false, + flapping_history: [true, false], + instance: { + id: '2', + }, + maintenance_window_ids: [], + rule: { + category: 'My test rule', + consumer: 'bar', + execution: { + uuid: '5f6aa57d-3e22-484e-bae8-cbed868f4d28', + }, + name: 'rule-name', + parameters: { + bar: true, + }, + producer: 'alerts', + revision: 0, + rule_type_id: 'test.rule-type', + tags: ['rule-', '-tags'], + uuid: '1', + }, + start: '2023-03-28T12:27:28.159Z', + status: 'active', + time_range: { + gte: '2023-03-28T12:27:28.159Z', + }, + uuid: 'xyz', + workflow_status: 'open', + }, + space_ids: ['default'], + version: '8.9.0', + }, + tags: ['rule-', '-tags'], + }, + ], + }); + + expect(logger.warn).toHaveBeenCalledWith( + `Could not update alert abc in partial-.internal.alerts-test.alerts-default-000001. Partial and restored alert indices are not supported.` + ); + }); + test('should log and swallow error if bulk indexing throws error', async () => { clusterClient.bulk.mockImplementation(() => { throw new Error('fail'); diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts index 03500c8b94575..90fbba5969de8 100644 --- a/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts @@ -48,6 +48,7 @@ import { getLifecycleAlertsQueries, getContinualAlertsQuery, } from './lib'; +import { isValidAlertIndexName } from '../alerts_service'; // Term queries can take up to 10,000 terms const CHUNK_SIZE = 10000; @@ -369,7 +370,7 @@ export class AlertsClient< }) ); } else { - this.options.logger.warn( + this.options.logger.debug( `Could not find alert document to update for recovered alert with id ${id} and uuid ${recoveredAlerts[ id ].getUuid()}` @@ -377,10 +378,23 @@ export class AlertsClient< } } - const alertsToIndex = [...activeAlertsToIndex, ...recoveredAlertsToIndex]; + const alertsToIndex = [...activeAlertsToIndex, ...recoveredAlertsToIndex].filter( + (alert: Alert & AlertData) => { + const alertIndex = this.fetchedAlerts.indices[alert.kibana.alert.uuid]; + if (!alertIndex) { + return true; + } else if (!isValidAlertIndexName(alertIndex)) { + this.options.logger.warn( + `Could not update alert ${alert.kibana.alert.uuid} in ${alertIndex}. Partial and restored alert indices are not supported.` + ); + return false; + } + return true; + } + ); if (alertsToIndex.length > 0) { const bulkBody = flatMap( - [...activeAlertsToIndex, ...recoveredAlertsToIndex].map((alert: Alert & AlertData) => [ + alertsToIndex.map((alert: Alert & AlertData) => [ getBulkMeta( alert.kibana.alert.uuid, this.fetchedAlerts.indices[alert.kibana.alert.uuid], diff --git a/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.test.ts b/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.test.ts index d723f0d0b64fc..72d222edf5593 100644 --- a/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.test.ts @@ -99,6 +99,7 @@ const ruleType: jest.Mocked = { validate: { params: schema.any(), }, + validLegacyConsumers: [], }; const testAlert1 = { diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/format_rule.test.ts b/x-pack/plugins/alerting/server/alerts_client/lib/format_rule.test.ts index cb90b75d2c16d..6e8d28de01753 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/format_rule.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/format_rule.test.ts @@ -29,6 +29,7 @@ const ruleType: jest.Mocked = { mappings: { fieldMap: { field: { type: 'keyword', required: false } } }, shouldWrite: true, }, + validLegacyConsumers: [], }; describe('formatRule', () => { diff --git a/x-pack/plugins/alerting/server/alerts_service/alerts_service.test.ts b/x-pack/plugins/alerting/server/alerts_service/alerts_service.test.ts index 18a80a0bae31d..1803bdf156469 100644 --- a/x-pack/plugins/alerting/server/alerts_service/alerts_service.test.ts +++ b/x-pack/plugins/alerting/server/alerts_service/alerts_service.test.ts @@ -53,7 +53,7 @@ interface EsError extends Error { } const GetAliasResponse = { - real_index: { + '.internal.alerts-test.alerts-default-000001': { aliases: { alias_1: { is_hidden: true, @@ -203,6 +203,7 @@ const ruleType: jest.Mocked = { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], }; const ruleTypeWithAlertDefinition: jest.Mocked = { diff --git a/x-pack/plugins/alerting/server/alerts_service/index.ts b/x-pack/plugins/alerting/server/alerts_service/index.ts index b08ae1ecf824f..db6f205129980 100644 --- a/x-pack/plugins/alerting/server/alerts_service/index.ts +++ b/x-pack/plugins/alerting/server/alerts_service/index.ts @@ -10,7 +10,7 @@ export { DEFAULT_ALERTS_ILM_POLICY_NAME, } from './default_lifecycle_policy'; export { ECS_COMPONENT_TEMPLATE_NAME, ECS_CONTEXT, TOTAL_FIELDS_LIMIT } from './alerts_service'; -export { getComponentTemplate } from './resource_installer_utils'; +export { getComponentTemplate, VALID_ALERT_INDEX_PREFIXES } from './resource_installer_utils'; export { type InitializationPromise, successResult, @@ -24,4 +24,5 @@ export { createOrUpdateIndexTemplate, createConcreteWriteIndex, installWithTimeout, + isValidAlertIndexName, } from './lib'; diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/create_concrete_write_index.test.ts b/x-pack/plugins/alerting/server/alerts_service/lib/create_concrete_write_index.test.ts index e2ee309b123f5..1d6555ea799a1 100644 --- a/x-pack/plugins/alerting/server/alerts_service/lib/create_concrete_write_index.test.ts +++ b/x-pack/plugins/alerting/server/alerts_service/lib/create_concrete_write_index.test.ts @@ -26,7 +26,7 @@ interface EsError extends Error { } const GetAliasResponse = { - real_index: { + '.internal.alerts-test.alerts-default-000001': { aliases: { alias_1: { is_hidden: true, @@ -63,6 +63,7 @@ const IndexPatterns = { basePattern: '.alerts-test.alerts-*', alias: '.alerts-test.alerts-default', name: '.internal.alerts-test.alerts-default-000001', + validPrefixes: ['.internal.alerts-', '.alerts-'], }; describe('createConcreteWriteIndex', () => { @@ -372,6 +373,49 @@ describe('createConcreteWriteIndex', () => { expect(clusterClient.indices.putMapping).toHaveBeenCalledTimes(useDataStream ? 1 : 2); }); + it(`should skip updating underlying settings and mappings of existing concrete indices if they follow an unexpected naming convention`, async () => { + clusterClient.indices.getAlias.mockImplementation(async () => ({ + bad_index_name: { + aliases: { + alias_1: { + is_hidden: true, + }, + }, + }, + })); + + clusterClient.indices.getDataStream.mockImplementation(async () => GetDataStreamResponse); + clusterClient.indices.simulateIndexTemplate.mockImplementation( + async () => SimulateTemplateResponse + ); + await createConcreteWriteIndex({ + logger, + esClient: clusterClient, + indexPatterns: IndexPatterns, + totalFieldsLimit: 2500, + dataStreamAdapter, + }); + + if (!useDataStream) { + expect(clusterClient.indices.create).toHaveBeenCalledWith({ + index: '.internal.alerts-test.alerts-default-000001', + body: { + aliases: { + '.alerts-test.alerts-default': { + is_write_index: true, + }, + }, + }, + }); + expect(logger.warn).toHaveBeenCalledWith( + `Found unexpected concrete index name "bad_index_name" while expecting index with one of the following prefixes: [.internal.alerts-,.alerts-] Not updating mappings or settings for this index.` + ); + } + + expect(clusterClient.indices.putSettings).toHaveBeenCalledTimes(useDataStream ? 1 : 0); + expect(clusterClient.indices.putMapping).toHaveBeenCalledTimes(useDataStream ? 1 : 0); + }); + it(`should retry simulateIndexTemplate on transient ES errors`, async () => { clusterClient.indices.getAlias.mockImplementation(async () => GetAliasResponse); clusterClient.indices.getDataStream.mockImplementation(async () => GetDataStreamResponse); diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/create_concrete_write_index.ts b/x-pack/plugins/alerting/server/alerts_service/lib/create_concrete_write_index.ts index 8ad628e1b2905..7278f32f014c4 100644 --- a/x-pack/plugins/alerting/server/alerts_service/lib/create_concrete_write_index.ts +++ b/x-pack/plugins/alerting/server/alerts_service/lib/create_concrete_write_index.ts @@ -22,6 +22,7 @@ interface UpdateIndexMappingsOpts { logger: Logger; esClient: ElasticsearchClient; totalFieldsLimit: number; + validIndexPrefixes?: string[]; concreteIndices: ConcreteIndexInfo[]; } @@ -107,22 +108,42 @@ export const updateIndexMappings = async ({ esClient, totalFieldsLimit, concreteIndices, + validIndexPrefixes, }: UpdateIndexMappingsOpts) => { + let validConcreteIndices = []; + if (validIndexPrefixes) { + for (const cIdx of concreteIndices) { + if (!validIndexPrefixes?.some((prefix: string) => cIdx.index.startsWith(prefix))) { + logger.warn( + `Found unexpected concrete index name "${ + cIdx.index + }" while expecting index with one of the following prefixes: [${validIndexPrefixes.join( + ',' + )}] Not updating mappings or settings for this index.` + ); + } else { + validConcreteIndices.push(cIdx); + } + } + } else { + validConcreteIndices = concreteIndices; + } + logger.debug( - `Updating underlying mappings for ${concreteIndices.length} indices / data streams.` + `Updating underlying mappings for ${validConcreteIndices.length} indices / data streams.` ); // Update total field limit setting of found indices // Other index setting changes are not updated at this time await Promise.all( - concreteIndices.map((index) => + validConcreteIndices.map((index) => updateTotalFieldLimitSetting({ logger, esClient, totalFieldsLimit, concreteIndexInfo: index }) ) ); // Update mappings of the found indices. await Promise.all( - concreteIndices.map((index) => + validConcreteIndices.map((index) => updateUnderlyingMapping({ logger, esClient, totalFieldsLimit, concreteIndexInfo: index }) ) ); diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts b/x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts index 21091464a68b1..7efbf8ead8660 100644 --- a/x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts +++ b/x-pack/plugins/alerting/server/alerts_service/lib/data_stream_adapter.ts @@ -168,7 +168,13 @@ async function createAliasStream(opts: CreateConcreteWriteIndexOpts): Promise 0) { - await updateIndexMappings({ logger, esClient, totalFieldsLimit, concreteIndices }); + await updateIndexMappings({ + logger, + esClient, + totalFieldsLimit, + concreteIndices, + validIndexPrefixes: indexPatterns.validPrefixes, + }); const concreteIndicesExist = concreteIndices.some( (index) => index.alias === indexPatterns.alias diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/index.ts b/x-pack/plugins/alerting/server/alerts_service/lib/index.ts index e0d3c1ae92311..e4829d83aa5ae 100644 --- a/x-pack/plugins/alerting/server/alerts_service/lib/index.ts +++ b/x-pack/plugins/alerting/server/alerts_service/lib/index.ts @@ -10,3 +10,4 @@ export { createOrUpdateComponentTemplate } from './create_or_update_component_te export { getIndexTemplate, createOrUpdateIndexTemplate } from './create_or_update_index_template'; export { createConcreteWriteIndex } from './create_concrete_write_index'; export { installWithTimeout } from './install_with_timeout'; +export { isValidAlertIndexName } from './is_valid_alert_index_name'; diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/is_valid_alert_index_name.test.ts b/x-pack/plugins/alerting/server/alerts_service/lib/is_valid_alert_index_name.test.ts new file mode 100644 index 0000000000000..8991a027a1d06 --- /dev/null +++ b/x-pack/plugins/alerting/server/alerts_service/lib/is_valid_alert_index_name.test.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { isValidAlertIndexName } from './is_valid_alert_index_name'; + +describe('isValidAlertIndexName', () => { + test('returns true if valid', () => { + expect(isValidAlertIndexName('.internal.alerts-stack.alerts-default-000001')).toBe(true); + expect(isValidAlertIndexName('.alerts-stack.alerts-default-000001')).toBe(true); + expect(isValidAlertIndexName('.ds-.alerts-stack.alerts-default-000001')).toBe(true); + }); + + test('returns false if invalid', () => { + expect(isValidAlertIndexName('partial-.internal.alerts-stack.alerts-default-000001')).toBe( + false + ); + expect(isValidAlertIndexName('restored-.alerts-stack.alerts-default-000001')).toBe(false); + expect(isValidAlertIndexName('any-old-index-name')).toBe(false); + }); +}); diff --git a/x-pack/plugins/alerting/server/alerts_service/lib/is_valid_alert_index_name.ts b/x-pack/plugins/alerting/server/alerts_service/lib/is_valid_alert_index_name.ts new file mode 100644 index 0000000000000..9d5537ea462fe --- /dev/null +++ b/x-pack/plugins/alerting/server/alerts_service/lib/is_valid_alert_index_name.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { VALID_ALERT_INDEX_PREFIXES } from '../resource_installer_utils'; + +export const isValidAlertIndexName = (indexName: string): boolean => { + return VALID_ALERT_INDEX_PREFIXES.some((prefix: string) => indexName.startsWith(prefix)); +}; diff --git a/x-pack/plugins/alerting/server/alerts_service/resource_installer_utils.test.ts b/x-pack/plugins/alerting/server/alerts_service/resource_installer_utils.test.ts index 0f5f482cf3c84..f059b77a5c88b 100644 --- a/x-pack/plugins/alerting/server/alerts_service/resource_installer_utils.test.ts +++ b/x-pack/plugins/alerting/server/alerts_service/resource_installer_utils.test.ts @@ -38,6 +38,7 @@ describe('getIndexTemplateAndPattern', () => { pattern: '.internal.alerts-test.alerts-default-*', basePattern: '.alerts-test.alerts-*', alias: '.alerts-test.alerts-default', + validPrefixes: ['.ds-.alerts-', '.internal.alerts-', '.alerts-'], name: '.internal.alerts-test.alerts-default-000001', }); }); @@ -48,6 +49,7 @@ describe('getIndexTemplateAndPattern', () => { pattern: '.internal.alerts-test.alerts-special-*', basePattern: '.alerts-test.alerts-*', alias: '.alerts-test.alerts-special', + validPrefixes: ['.ds-.alerts-', '.internal.alerts-', '.alerts-'], name: '.internal.alerts-test.alerts-special-000001', }); }); @@ -65,6 +67,7 @@ describe('getIndexTemplateAndPattern', () => { basePattern: '.alerts-test.alerts-*', alias: '.alerts-test.alerts-special', name: '.internal.alerts-test.alerts-special-000001', + validPrefixes: ['.ds-.alerts-', '.internal.alerts-', '.alerts-'], secondaryAlias: `siem.signals-special`, }); }); diff --git a/x-pack/plugins/alerting/server/alerts_service/resource_installer_utils.ts b/x-pack/plugins/alerting/server/alerts_service/resource_installer_utils.ts index eba614e655617..7a1031cdf2224 100644 --- a/x-pack/plugins/alerting/server/alerts_service/resource_installer_utils.ts +++ b/x-pack/plugins/alerting/server/alerts_service/resource_installer_utils.ts @@ -13,6 +13,8 @@ interface GetComponentTemplateNameOpts { context?: string; name?: string; } +export const VALID_ALERT_INDEX_PREFIXES = ['.ds-.alerts-', '.internal.alerts-', '.alerts-']; + export const getComponentTemplateName = ({ context, name }: GetComponentTemplateNameOpts = {}) => `.alerts-${context ? `${context}.alerts` : name ? name : 'framework'}-mappings`; @@ -22,6 +24,7 @@ export interface IIndexPatternString { alias: string; name: string; basePattern: string; + validPrefixes?: string[]; secondaryAlias?: string; } @@ -45,6 +48,7 @@ export const getIndexTemplateAndPattern = ({ basePattern: `.alerts-${pattern}-*`, name: `.internal.alerts-${patternWithNamespace}-000001`, alias: `.alerts-${patternWithNamespace}`, + validPrefixes: VALID_ALERT_INDEX_PREFIXES, ...(secondaryAlias ? { secondaryAlias: `${secondaryAlias}-${concreteNamespace}` } : {}), }; }; diff --git a/x-pack/plugins/alerting/server/application/rule/methods/aggregate/aggregate_rules.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/aggregate/aggregate_rules.test.ts index b8fbc0427b7f4..9bdac512cd28c 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/aggregate/aggregate_rules.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/aggregate/aggregate_rules.test.ts @@ -82,6 +82,7 @@ describe('aggregate()', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]); beforeEach(() => { @@ -166,6 +167,7 @@ describe('aggregate()', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]) ); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/aggregate/aggregate_rules.ts b/x-pack/plugins/alerting/server/application/rule/methods/aggregate/aggregate_rules.ts index f992f5cead705..9011b971e629a 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/aggregate/aggregate_rules.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/aggregate/aggregate_rules.ts @@ -6,6 +6,7 @@ */ import { KueryNode, nodeBuilder } from '@kbn/es-query'; +import { isEmpty } from 'lodash'; import { findRulesSo } from '../../../../data/rule'; import { AlertingAuthorizationEntity } from '../../../../authorization'; import { ruleAuditEvent, RuleAuditAction } from '../../../../rules_client/common/audit_events'; @@ -21,13 +22,14 @@ export async function aggregateRules>( params: AggregateParams ): Promise { const { options = {}, aggs } = params; - const { filter, page = 1, perPage = 0, ...restOptions } = options; + const { filter, page = 1, perPage = 0, filterConsumers, ...restOptions } = options; let authorizationTuple; try { authorizationTuple = await context.authorization.getFindAuthorizationFilter( AlertingAuthorizationEntity.Rule, - alertingAuthorizationFilterOpts + alertingAuthorizationFilterOpts, + isEmpty(filterConsumers) ? undefined : new Set(filterConsumers) ); validateRuleAggregationFields(aggs); aggregateOptionsSchema.validate(options); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/aggregate/schemas/aggregate_options_schema.ts b/x-pack/plugins/alerting/server/application/rule/methods/aggregate/schemas/aggregate_options_schema.ts index 3ac244b808752..7250094160a04 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/aggregate/schemas/aggregate_options_schema.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/aggregate/schemas/aggregate_options_schema.ts @@ -16,6 +16,7 @@ export const aggregateOptionsSchema = schema.object({ id: schema.string(), }) ), + filterConsumers: schema.maybe(schema.arrayOf(schema.string())), // filter type is `string | KueryNode`, but `KueryNode` has no schema to import yet filter: schema.maybe( schema.oneOf([schema.string(), schema.recordOf(schema.string(), schema.any())]) diff --git a/x-pack/plugins/alerting/server/application/rule/methods/aggregate/types/index.ts b/x-pack/plugins/alerting/server/application/rule/methods/aggregate/types/index.ts index 3733a49003bba..2156fb91e8778 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/aggregate/types/index.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/aggregate/types/index.ts @@ -19,6 +19,7 @@ export type AggregateOptions = TypeOf & { filter?: string | KueryNode; page?: AggregateOptionsSchemaTypes['page']; perPage?: AggregateOptionsSchemaTypes['perPage']; + filterConsumers?: string[]; }; export interface AggregateParams { diff --git a/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.test.ts index af51009d71da1..1a2faed2e0e66 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/bulk_edit/bulk_edit_rules.test.ts @@ -243,6 +243,7 @@ describe('bulkEdit()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], }); (migrateLegacyActions as jest.Mock).mockResolvedValue(migrateLegacyActionsMock); @@ -745,6 +746,7 @@ describe('bulkEdit()', () => { mappings: { fieldMap: { field: { type: 'keyword', required: false } } }, shouldWrite: true, }, + validLegacyConsumers: [], }); const existingAction = { frequency: { @@ -2351,6 +2353,7 @@ describe('bulkEdit()', () => { return { state: {} }; }, producer: 'alerts', + validLegacyConsumers: [], }); const result = await rulesClient.bulkEdit({ @@ -2395,6 +2398,7 @@ describe('bulkEdit()', () => { return { state: {} }; }, producer: 'alerts', + validLegacyConsumers: [], }); const result = await rulesClient.bulkEdit({ diff --git a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts index ef2d91ea484ff..2d7746f715a05 100644 --- a/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/create/create_rule.test.ts @@ -1551,6 +1551,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const data = getMockData({ params: ruleParams, @@ -1738,6 +1739,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const data = getMockData({ params: ruleParams, @@ -2557,6 +2559,7 @@ describe('create()', () => { return { state: {} }; }, producer: 'alerts', + validLegacyConsumers: [], }); await expect(rulesClient.create({ data })).rejects.toThrowErrorMatchingInlineSnapshot( `"params invalid: [param1]: expected value of type [string] but got [undefined]"` @@ -3031,6 +3034,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const createdAttributes = { ...data, @@ -3103,6 +3107,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const data = getMockData({ schedule: { interval: '1s' } }); @@ -3140,6 +3145,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const data = getMockData({ @@ -3232,6 +3238,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const data = getMockData({ @@ -3281,6 +3288,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const data = getMockData({ @@ -3343,6 +3351,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const data = getMockData({ @@ -3423,6 +3432,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const data = getMockData({ @@ -3627,6 +3637,7 @@ describe('create()', () => { mappings: { fieldMap: { field: { type: 'keyword', required: false } } }, shouldWrite: true, }, + validLegacyConsumers: [], })); const data = getMockData({ @@ -3679,6 +3690,7 @@ describe('create()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const data = getMockData({ diff --git a/x-pack/plugins/alerting/server/authorization/alerting_authorization.test.ts b/x-pack/plugins/alerting/server/authorization/alerting_authorization.test.ts index d6fb8d415e57f..c68532082f18a 100644 --- a/x-pack/plugins/alerting/server/authorization/alerting_authorization.test.ts +++ b/x-pack/plugins/alerting/server/authorization/alerting_authorization.test.ts @@ -22,7 +22,7 @@ import { } from './alerting_authorization'; import { v4 as uuidv4 } from 'uuid'; import { RecoveredActionGroup } from '../../common'; -import { RegistryRuleType } from '../rule_type_registry'; +import { NormalizedRuleType, RegistryRuleType } from '../rule_type_registry'; import { AlertingAuthorizationFilterType } from './alerting_authorization_kuery'; import { schema } from '@kbn/config-schema'; @@ -201,6 +201,7 @@ beforeEach(() => { validate: { params: schema.any(), }, + validLegacyConsumers: [], })); features.getKibanaFeatures.mockReturnValue([ myAppFeature, @@ -250,7 +251,7 @@ describe('AlertingAuthorization', () => { entity: AlertingAuthorizationEntity.Rule, }); - expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(0); + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); }); test('is a no-op when the security license is disabled', async () => { @@ -272,7 +273,7 @@ describe('AlertingAuthorization', () => { entity: AlertingAuthorizationEntity.Rule, }); - expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(0); + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); }); test('ensures the user has privileges to execute rules for the specified rule type and operation without consumer when producer and consumer are the same', async () => { @@ -305,7 +306,7 @@ describe('AlertingAuthorization', () => { expect(ruleTypeRegistry.get).toHaveBeenCalledWith('myType'); - expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(2); + expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(1); expect(authorization.actions.alerting.get).toHaveBeenCalledWith( 'myType', 'myApp', @@ -347,7 +348,7 @@ describe('AlertingAuthorization', () => { expect(ruleTypeRegistry.get).toHaveBeenCalledWith('myType'); - expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(2); + expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(1); expect(authorization.actions.alerting.get).toHaveBeenCalledWith( 'myType', 'myApp', @@ -389,13 +390,7 @@ describe('AlertingAuthorization', () => { expect(ruleTypeRegistry.get).toHaveBeenCalledWith('myType'); - expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(2); - expect(authorization.actions.alerting.get).toHaveBeenCalledWith( - 'myType', - 'alerts', - 'rule', - 'create' - ); + expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(1); expect(authorization.actions.alerting.get).toHaveBeenCalledWith( 'myType', 'myApp', @@ -437,13 +432,7 @@ describe('AlertingAuthorization', () => { expect(ruleTypeRegistry.get).toHaveBeenCalledWith('myType'); - expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(2); - expect(authorization.actions.alerting.get).toHaveBeenCalledWith( - 'myType', - 'alerts', - 'alert', - 'update' - ); + expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(1); expect(authorization.actions.alerting.get).toHaveBeenCalledWith( 'myType', 'myApp', @@ -485,13 +474,7 @@ describe('AlertingAuthorization', () => { expect(ruleTypeRegistry.get).toHaveBeenCalledWith('myType'); - expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(2); - expect(authorization.actions.alerting.get).toHaveBeenCalledWith( - 'myType', - 'myApp', - 'rule', - 'create' - ); + expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(1); expect(authorization.actions.alerting.get).toHaveBeenCalledWith( 'myType', 'myOtherApp', @@ -499,10 +482,7 @@ describe('AlertingAuthorization', () => { 'create' ); expect(checkPrivileges).toHaveBeenCalledWith({ - kibana: [ - mockAuthorizationAction('myType', 'myOtherApp', 'rule', 'create'), - mockAuthorizationAction('myType', 'myApp', 'rule', 'create'), - ], + kibana: [mockAuthorizationAction('myType', 'myOtherApp', 'rule', 'create')], }); }); @@ -536,24 +516,57 @@ describe('AlertingAuthorization', () => { expect(ruleTypeRegistry.get).toHaveBeenCalledWith('myType'); - expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(2); + expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(1); expect(authorization.actions.alerting.get).toHaveBeenCalledWith( 'myType', - 'myApp', + 'myOtherApp', 'alert', 'update' ); + expect(checkPrivileges).toHaveBeenCalledWith({ + kibana: [mockAuthorizationAction('myType', 'myOtherApp', 'alert', 'update')], + }); + }); + + test('ensures the producer is used for authorization if the consumer is `alerts`', async () => { + const { authorization } = mockSecurity(); + const checkPrivileges: jest.MockedFunction< + ReturnType + > = jest.fn(); + authorization.checkPrivilegesDynamicallyWithRequest.mockReturnValue(checkPrivileges); + checkPrivileges.mockResolvedValueOnce({ + username: 'some-user', + hasAllRequested: true, + privileges: { kibana: [] }, + }); + + const alertAuthorization = new AlertingAuthorization({ + request, + authorization, + ruleTypeRegistry, + features, + getSpace, + getSpaceId, + }); + + await alertAuthorization.ensureAuthorized({ + ruleTypeId: 'myType', + consumer: 'alerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }); + + expect(ruleTypeRegistry.get).toHaveBeenCalledWith('myType'); + + expect(authorization.actions.alerting.get).toHaveBeenCalledTimes(1); expect(authorization.actions.alerting.get).toHaveBeenCalledWith( 'myType', - 'myOtherApp', - 'alert', - 'update' + 'myApp', + 'rule', + 'create' ); expect(checkPrivileges).toHaveBeenCalledWith({ - kibana: [ - mockAuthorizationAction('myType', 'myOtherApp', 'alert', 'update'), - mockAuthorizationAction('myType', 'myApp', 'alert', 'update'), - ], + kibana: [mockAuthorizationAction('myType', 'myApp', 'rule', 'create')], }); }); @@ -597,7 +610,7 @@ describe('AlertingAuthorization', () => { entity: AlertingAuthorizationEntity.Rule, }) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Unauthorized to create a \\"myType\\" rule for \\"myOtherApp\\""` + `"Unauthorized by \\"myOtherApp\\" to create \\"myType\\" rule"` ); }); @@ -645,7 +658,7 @@ describe('AlertingAuthorization', () => { entity: AlertingAuthorizationEntity.Alert, }) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Unauthorized to update a \\"myType\\" alert for \\"myAppRulesOnly\\""` + `"Unauthorized by \\"myAppRulesOnly\\" to update \\"myType\\" alert"` ); }); @@ -689,7 +702,7 @@ describe('AlertingAuthorization', () => { entity: AlertingAuthorizationEntity.Alert, }) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Unauthorized to update a \\"myType\\" alert by \\"myApp\\""` + `"Unauthorized by \\"myOtherApp\\" to update \\"myType\\" alert"` ); }); @@ -733,7 +746,7 @@ describe('AlertingAuthorization', () => { entity: AlertingAuthorizationEntity.Alert, }) ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Unauthorized to create a \\"myType\\" alert for \\"myOtherApp\\""` + `"Unauthorized by \\"myOtherApp\\" to create \\"myType\\" alert"` ); }); }); @@ -752,6 +765,7 @@ describe('AlertingAuthorization', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }; const myAppAlertType: RegistryRuleType = { actionGroups: [], @@ -766,6 +780,7 @@ describe('AlertingAuthorization', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }; const mySecondAppAlertType: RegistryRuleType = { actionGroups: [], @@ -780,6 +795,7 @@ describe('AlertingAuthorization', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }; const setOfAlertTypes = new Set([myAppAlertType, myOtherAppAlertType, mySecondAppAlertType]); test('omits filter when there is no authorization api', async () => { @@ -967,7 +983,7 @@ describe('AlertingAuthorization', () => { expect(() => { ensureRuleTypeIsAuthorized('myAppAlertType', 'myOtherApp', 'alert'); }).toThrowErrorMatchingInlineSnapshot( - `"Unauthorized to find a \\"myAppAlertType\\" alert for \\"myOtherApp\\""` + `"Unauthorized by \\"myOtherApp\\" to find \\"myAppAlertType\\" alert"` ); }); test('creates an `ensureRuleTypeIsAuthorized` function which is no-op if type is authorized', async () => { @@ -1153,6 +1169,7 @@ describe('AlertingAuthorization', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }; const myAppAlertType: RegistryRuleType = { actionGroups: [], @@ -1167,6 +1184,7 @@ describe('AlertingAuthorization', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }; const setOfAlertTypes = new Set([myAppAlertType, myOtherAppAlertType]); beforeEach(() => { @@ -1233,6 +1251,7 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, Object { "actionGroups": Array [], @@ -1268,6 +1287,7 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, } `); @@ -1349,15 +1369,12 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, Object { "actionGroups": Array [], "actionVariables": undefined, "authorizedConsumers": Object { - "alerts": Object { - "all": true, - "read": true, - }, "myApp": Object { "all": true, "read": true, @@ -1380,6 +1397,7 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, } `); @@ -1430,10 +1448,6 @@ describe('AlertingAuthorization', () => { "actionGroups": Array [], "actionVariables": undefined, "authorizedConsumers": Object { - "alerts": Object { - "all": true, - "read": true, - }, "myApp": Object { "all": true, "read": true, @@ -1452,6 +1466,7 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, } `); @@ -1536,10 +1551,6 @@ describe('AlertingAuthorization', () => { "actionGroups": Array [], "actionVariables": undefined, "authorizedConsumers": Object { - "alerts": Object { - "all": false, - "read": true, - }, "myApp": Object { "all": true, "read": true, @@ -1562,15 +1573,12 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, Object { "actionGroups": Array [], "actionVariables": undefined, "authorizedConsumers": Object { - "alerts": Object { - "all": false, - "read": true, - }, "myApp": Object { "all": false, "read": true, @@ -1593,6 +1601,7 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, } `); @@ -1656,10 +1665,6 @@ describe('AlertingAuthorization', () => { "actionGroups": Array [], "actionVariables": undefined, "authorizedConsumers": Object { - "alerts": Object { - "all": true, - "read": true, - }, "myApp": Object { "all": true, "read": true, @@ -1682,6 +1687,7 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, } `); @@ -1702,6 +1708,7 @@ describe('AlertingAuthorization', () => { isExportable: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }; const myAppAlertType: RegistryRuleType = { actionGroups: [], @@ -1716,6 +1723,7 @@ describe('AlertingAuthorization', () => { isExportable: true, hasAlertsMappings: true, hasFieldsForAAD: true, + validLegacyConsumers: [], }; const mySecondAppAlertType: RegistryRuleType = { actionGroups: [], @@ -1730,6 +1738,7 @@ describe('AlertingAuthorization', () => { isExportable: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }; const setOfAlertTypes = new Set([myAppAlertType, myOtherAppAlertType, mySecondAppAlertType]); beforeEach(() => { @@ -1794,6 +1803,7 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, }, "hasAllRequested": false, @@ -1869,6 +1879,7 @@ describe('AlertingAuthorization', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, }, "hasAllRequested": false, @@ -1877,4 +1888,626 @@ describe('AlertingAuthorization', () => { `); }); }); + + describe('8.11+', () => { + let alertAuthorization: AlertingAuthorization; + + const setOfRuleTypes: RegistryRuleType[] = [ + { + actionGroups: [], + actionVariables: undefined, + defaultActionGroupId: 'default', + minimumLicenseRequired: 'basic', + isExportable: true, + recoveryActionGroup: RecoveredActionGroup, + id: '.esQuery', + name: 'ES Query', + producer: 'stackAlerts', + enabledInLicense: true, + hasAlertsMappings: false, + hasFieldsForAAD: false, + validLegacyConsumers: ['discover', 'alerts'], + }, + { + actionGroups: [], + actionVariables: undefined, + defaultActionGroupId: 'default', + minimumLicenseRequired: 'basic', + isExportable: true, + recoveryActionGroup: RecoveredActionGroup, + id: '.threshold-rule-o11y', + name: 'New threshold 011y', + producer: 'observability', + enabledInLicense: true, + hasAlertsMappings: false, + hasFieldsForAAD: false, + validLegacyConsumers: [], + }, + { + actionGroups: [], + actionVariables: undefined, + defaultActionGroupId: 'default', + minimumLicenseRequired: 'basic', + isExportable: true, + recoveryActionGroup: RecoveredActionGroup, + id: '.infrastructure-threshold-o11y', + name: 'Metrics o11y', + producer: 'infrastructure', + enabledInLicense: true, + hasAlertsMappings: false, + hasFieldsForAAD: false, + validLegacyConsumers: ['alerts'], + }, + { + actionGroups: [], + actionVariables: undefined, + defaultActionGroupId: 'default', + minimumLicenseRequired: 'basic', + isExportable: true, + recoveryActionGroup: RecoveredActionGroup, + id: '.logs-threshold-o11y', + name: 'Logs o11y', + producer: 'logs', + enabledInLicense: true, + hasAlertsMappings: false, + hasFieldsForAAD: false, + validLegacyConsumers: ['alerts'], + }, + ]; + + const onlyStackAlertsKibanaPrivileges = [ + { + privilege: mockAuthorizationAction('.esQuery', 'stackAlerts', 'rule', 'create'), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.esQuery', 'stackAlerts', 'rule', 'find'), + authorized: true, + }, + ]; + const only011yKibanaPrivileges = [ + { + privilege: mockAuthorizationAction( + '.infrastructure-threshold-o11y', + 'infrastructure', + 'rule', + 'create' + ), + authorized: true, + }, + { + privilege: mockAuthorizationAction( + '.infrastructure-threshold-o11y', + 'infrastructure', + 'rule', + 'find' + ), + authorized: true, + }, + { + privilege: mockAuthorizationAction( + '.threshold-rule-o11y', + 'infrastructure', + 'rule', + 'create' + ), + authorized: true, + }, + { + privilege: mockAuthorizationAction( + '.threshold-rule-o11y', + 'infrastructure', + 'rule', + 'find' + ), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.logs-threshold-o11y', 'logs', 'rule', 'create'), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.logs-threshold-o11y', 'logs', 'rule', 'find'), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.threshold-rule-o11y', 'logs', 'rule', 'create'), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.threshold-rule-o11y', 'logs', 'rule', 'find'), + authorized: true, + }, + ]; + const onlyLogsAndStackAlertsKibanaPrivileges = [ + { + privilege: mockAuthorizationAction('.esQuery', 'stackAlerts', 'rule', 'create'), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.esQuery', 'stackAlerts', 'rule', 'find'), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.logs-threshold-o11y', 'logs', 'rule', 'create'), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.logs-threshold-o11y', 'logs', 'rule', 'find'), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.threshold-rule-o11y', 'logs', 'rule', 'create'), + authorized: true, + }, + { + privilege: mockAuthorizationAction('.threshold-rule-o11y', 'logs', 'rule', 'find'), + authorized: true, + }, + ]; + + beforeEach(async () => { + ruleTypeRegistry.list.mockReturnValue(new Set(setOfRuleTypes)); + ruleTypeRegistry.get.mockImplementation((id: string) => { + if (setOfRuleTypes.some((rt) => rt.id === id)) { + const ruleType = setOfRuleTypes.find((rt) => rt.id === id); + return (ruleType ?? {}) as NormalizedRuleType<{}, {}, {}, {}, {}, '', '', {}>; + } + return {} as NormalizedRuleType<{}, {}, {}, {}, {}, '', '', {}>; + }); + }); + + describe('user only access to stack alerts + discover', () => { + beforeEach(() => { + const { authorization } = mockSecurity(); + const checkPrivileges: jest.MockedFunction< + ReturnType + > = jest.fn(); + authorization.mode.useRbacForRequest.mockReturnValue(true); + + features.getKibanaFeatures.mockReset(); + features.getKibanaFeatures.mockReturnValue([ + mockFeature('stackAlerts', ['.esQuery']), + mockFeature('discover', []), + ]); + checkPrivileges.mockReset(); + checkPrivileges.mockResolvedValue({ + username: 'onlyStack', + hasAllRequested: true, + privileges: { + kibana: onlyStackAlertsKibanaPrivileges, + }, + }); + authorization.checkPrivilegesDynamicallyWithRequest.mockReset(); + authorization.checkPrivilegesDynamicallyWithRequest.mockReturnValue(checkPrivileges); + alertAuthorization = new AlertingAuthorization({ + request, + authorization, + ruleTypeRegistry, + features, + getSpace, + getSpaceId, + }); + }); + + describe('ensureAuthorized', () => { + test('should allow to create .esquery rule type with stackAlerts consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'stackAlerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should allow to create .esquery rule type with discover consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'discover', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should allow to create .esquery rule type with alerts consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'alerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .esquery rule type with logs consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'logs', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"logs\\" to create \\".esQuery\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .esquery rule type with infrastructure consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'infrastructure', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"infrastructure\\" to create \\".esQuery\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .threshold-rule-o11y rule type with alerts consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.threshold-rule-o11y', + consumer: 'alerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"alerts\\" to create \\".threshold-rule-o11y\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .logs-threshold-o11y rule type with alerts infrastructure', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.logs-threshold-o11y', + consumer: 'alerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"alerts\\" to create \\".logs-threshold-o11y\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + }); + test('creates a filter based on the privileged types', async () => { + expect( + ( + await alertAuthorization.getFindAuthorizationFilter(AlertingAuthorizationEntity.Rule, { + type: AlertingAuthorizationFilterType.KQL, + fieldNames: { + ruleTypeId: 'path.to.rule_type_id', + consumer: 'consumer-field', + }, + }) + ).filter + ).toEqual( + fromKueryExpression( + `path.to.rule_type_id:.esQuery and consumer-field:(alerts or stackAlerts or discover)` + ) + ); + }); + }); + + describe('user only access to o11y', () => { + beforeEach(() => { + const { authorization } = mockSecurity(); + const checkPrivileges: jest.MockedFunction< + ReturnType + > = jest.fn(); + authorization.mode.useRbacForRequest.mockReturnValue(true); + + features.getKibanaFeatures.mockReset(); + features.getKibanaFeatures.mockReturnValue([ + mockFeature('infrastructure', [ + '.infrastructure-threshold-o11y', + '.threshold-rule-o11y', + '.esQuery', + ]), + mockFeature('logs', ['.threshold-rule-o11y', '.esQuery', '.logs-threshold-o11y']), + ]); + checkPrivileges.mockReset(); + checkPrivileges.mockResolvedValue({ + username: 'onlyO11y', + hasAllRequested: true, + privileges: { + kibana: only011yKibanaPrivileges, + }, + }); + authorization.checkPrivilegesDynamicallyWithRequest.mockReset(); + authorization.checkPrivilegesDynamicallyWithRequest.mockReturnValue(checkPrivileges); + alertAuthorization = new AlertingAuthorization({ + request, + authorization, + ruleTypeRegistry, + features, + getSpace, + getSpaceId, + }); + }); + + describe('ensureAuthorized', () => { + test('should throw an error to create .esquery rule type with stackAlerts consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'stackAlerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"stackAlerts\\" to create \\".esQuery\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .esquery rule type with discover consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'discover', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"discover\\" to create \\".esQuery\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .threshold-rule-o11y rule type with alerts consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.threshold-rule-o11y', + consumer: 'alerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"alerts\\" to create \\".threshold-rule-o11y\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should allow to create .esquery rule type with logs consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'logs', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should allow to create .esquery rule type with logs infrastructure', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'infrastructure', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should allow to create .logs-threshold-o11y rule type with alerts consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.logs-threshold-o11y', + consumer: 'alerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .threshold-rule-o11y rule type with logs consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.threshold-rule-o11y', + consumer: 'logs', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + }); + test('creates a filter based on the privileged types', async () => { + expect( + ( + await alertAuthorization.getFindAuthorizationFilter( + AlertingAuthorizationEntity.Rule, + { + type: AlertingAuthorizationFilterType.KQL, + fieldNames: { + ruleTypeId: 'path.to.rule_type_id', + consumer: 'consumer-field', + }, + }, + new Set(['infrastructure', 'logs']) + ) + ).filter + ).toEqual( + fromKueryExpression( + `(path.to.rule_type_id:.infrastructure-threshold-o11y and consumer-field:(infrastructure or alerts)) or (path.to.rule_type_id:.threshold-rule-o11y and consumer-field:(infrastructure or logs)) or (path.to.rule_type_id:.logs-threshold-o11y and consumer-field:(logs or alerts))` + ) + ); + }); + }); + + describe('user only access to logs and stackAlerts', () => { + beforeEach(() => { + const { authorization } = mockSecurity(); + const checkPrivileges: jest.MockedFunction< + ReturnType + > = jest.fn(); + authorization.mode.useRbacForRequest.mockReturnValue(true); + + features.getKibanaFeatures.mockClear(); + features.getKibanaFeatures.mockReturnValue([ + mockFeature('stackAlerts', ['.esQuery']), + mockFeature('logs', ['.logs-threshold-o11y', '.threshold-rule-o11y', '.esQuery']), + ]); + checkPrivileges.mockClear(); + checkPrivileges.mockResolvedValue({ + username: 'stackAndLogs', + hasAllRequested: true, + privileges: { + kibana: onlyLogsAndStackAlertsKibanaPrivileges, + }, + }); + authorization.checkPrivilegesDynamicallyWithRequest.mockReturnValue(checkPrivileges); + alertAuthorization = new AlertingAuthorization({ + request, + authorization, + ruleTypeRegistry, + features, + getSpace, + getSpaceId, + }); + }); + + describe('ensureAuthorized', () => { + test('should allow to create .esquery rule type with stackAlerts consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'stackAlerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should allow to create .esquery rule type with discover consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'discover', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should allow to create .esquery rule type with logs consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'logs', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should allow to create .logs-threshold-o11y rule type with alerts consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.logs-threshold-o11y', + consumer: 'alerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .threshold-rule-o11y rule type with logs consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.threshold-rule-o11y', + consumer: 'logs', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).resolves.toEqual(undefined); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .esquery rule type with logs infrastructure', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'infrastructure', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"infrastructure\\" to create \\".esQuery\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .threshold-rule-o11y rule type with alerts consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.threshold-rule-o11y', + consumer: 'alerts', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"alerts\\" to create \\".threshold-rule-o11y\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + test('should throw an error to create .esquery rule type with infrastructure consumer', async () => { + await expect( + alertAuthorization.ensureAuthorized({ + ruleTypeId: '.esQuery', + consumer: 'infrastructure', + operation: WriteOperations.Create, + entity: AlertingAuthorizationEntity.Rule, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unauthorized by \\"infrastructure\\" to create \\".esQuery\\" rule"` + ); + + expect(ruleTypeRegistry.get).toHaveBeenCalledTimes(1); + }); + }); + test('creates a filter based on the privileged types', async () => { + expect( + ( + await alertAuthorization.getFindAuthorizationFilter(AlertingAuthorizationEntity.Rule, { + type: AlertingAuthorizationFilterType.KQL, + fieldNames: { + ruleTypeId: 'path.to.rule_type_id', + consumer: 'consumer-field', + }, + }) + ).filter + ).toEqual( + fromKueryExpression( + `(path.to.rule_type_id:.esQuery and consumer-field:(alerts or stackAlerts or logs or discover)) or (path.to.rule_type_id:.logs-threshold-o11y and consumer-field:(alerts or stackAlerts or logs or discover)) or (path.to.rule_type_id:.threshold-rule-o11y and consumer-field:(alerts or stackAlerts or logs or discover))` + ) + ); + }); + }); + }); }); diff --git a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts index 051972b944261..90f4b189b1197 100644 --- a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts +++ b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts @@ -6,7 +6,7 @@ */ import Boom from '@hapi/boom'; -import { map, mapValues, fromPairs, has } from 'lodash'; +import { has, isEmpty } from 'lodash'; import { KibanaRequest } from '@kbn/core/server'; import { JsonObject } from '@kbn/utility-types'; import { KueryNode } from '@kbn/es-query'; @@ -167,42 +167,26 @@ export class AlertingAuthorization { ); } - public async ensureAuthorized({ ruleTypeId, consumer, operation, entity }: EnsureAuthorizedOpts) { + public async ensureAuthorized({ + ruleTypeId, + consumer: legacyConsumer, + operation, + entity, + }: EnsureAuthorizedOpts) { const { authorization } = this; + const ruleType = this.ruleTypeRegistry.get(ruleTypeId); + const consumer = getValidConsumer({ + validLegacyConsumers: ruleType.validLegacyConsumers, + legacyConsumer, + producer: ruleType.producer, + }); const isAvailableConsumer = has(await this.allPossibleConsumers, consumer); if (authorization && this.shouldCheckAuthorization()) { - const ruleType = this.ruleTypeRegistry.get(ruleTypeId); - const requiredPrivilegesByScope = { - consumer: authorization.actions.alerting.get(ruleTypeId, consumer, entity, operation), - producer: authorization.actions.alerting.get( - ruleTypeId, - ruleType.producer, - entity, - operation - ), - }; - - // Skip authorizing consumer if consumer is the Rules Management consumer (`alerts`) - // This means that rules and their derivative alerts created in the Rules Management UI - // will only be subject to checking if user has access to the rule producer. - const shouldAuthorizeConsumer = consumer !== ALERTS_FEATURE_ID; - const checkPrivileges = authorization.checkPrivilegesDynamicallyWithRequest(this.request); - const { hasAllRequested, privileges } = await checkPrivileges({ - kibana: - shouldAuthorizeConsumer && consumer !== ruleType.producer - ? [ - // check for access at consumer level - requiredPrivilegesByScope.consumer, - // check for access at producer level - requiredPrivilegesByScope.producer, - ] - : [ - // skip consumer privilege checks under `alerts` as all rule types can - // be created under `alerts` if you have producer level privileges - requiredPrivilegesByScope.producer, - ], + + const { hasAllRequested } = await checkPrivileges({ + kibana: [authorization.actions.alerting.get(ruleTypeId, consumer, entity, operation)], }); if (!isAvailableConsumer) { @@ -213,51 +197,31 @@ export class AlertingAuthorization { * as Privileged. * This check will ensure we don't accidentally let these through */ - throw Boom.forbidden( - getUnauthorizedMessage(ruleTypeId, ScopeType.Consumer, consumer, operation, entity) - ); + throw Boom.forbidden(getUnauthorizedMessage(ruleTypeId, legacyConsumer, operation, entity)); } if (!hasAllRequested) { - const authorizedPrivileges = map( - privileges.kibana.filter((privilege) => privilege.authorized), - 'privilege' - ); - const unauthorizedScopes = mapValues( - requiredPrivilegesByScope, - (privilege) => !authorizedPrivileges.includes(privilege) - ); - - const [unauthorizedScopeType, unauthorizedScope] = - shouldAuthorizeConsumer && unauthorizedScopes.consumer - ? [ScopeType.Consumer, consumer] - : [ScopeType.Producer, ruleType.producer]; - - throw Boom.forbidden( - getUnauthorizedMessage( - ruleTypeId, - unauthorizedScopeType, - unauthorizedScope, - operation, - entity - ) - ); + throw Boom.forbidden(getUnauthorizedMessage(ruleTypeId, consumer, operation, entity)); } } else if (!isAvailableConsumer) { - throw Boom.forbidden( - getUnauthorizedMessage(ruleTypeId, ScopeType.Consumer, consumer, operation, entity) - ); + throw Boom.forbidden(getUnauthorizedMessage(ruleTypeId, consumer, operation, entity)); } } public async getFindAuthorizationFilter( authorizationEntity: AlertingAuthorizationEntity, - filterOpts: AlertingAuthorizationFilterOpts + filterOpts: AlertingAuthorizationFilterOpts, + featuresIds?: Set ): Promise<{ filter?: KueryNode | JsonObject; ensureRuleTypeIsAuthorized: (ruleTypeId: string, consumer: string, auth: string) => void; }> { - return this.getAuthorizationFilter(authorizationEntity, filterOpts, ReadOperations.Find); + return this.getAuthorizationFilter( + authorizationEntity, + filterOpts, + ReadOperations.Find, + featuresIds + ); } public async getAuthorizedRuleTypes( @@ -276,7 +240,8 @@ export class AlertingAuthorization { public async getAuthorizationFilter( authorizationEntity: AlertingAuthorizationEntity, filterOpts: AlertingAuthorizationFilterOpts, - operation: WriteOperations | ReadOperations + operation: WriteOperations | ReadOperations, + featuresIds?: Set ): Promise<{ filter?: KueryNode | JsonObject; ensureRuleTypeIsAuthorized: (ruleTypeId: string, consumer: string, auth: string) => void; @@ -285,7 +250,8 @@ export class AlertingAuthorization { const { authorizedRuleTypes } = await this.augmentRuleTypesWithAuthorization( this.ruleTypeRegistry.list(), [operation], - authorizationEntity + authorizationEntity, + featuresIds ); if (!authorizedRuleTypes.size) { @@ -311,13 +277,7 @@ export class AlertingAuthorization { ensureRuleTypeIsAuthorized: (ruleTypeId: string, consumer: string, authType: string) => { if (!authorizedRuleTypeIdsToConsumers.has(`${ruleTypeId}/${consumer}/${authType}`)) { throw Boom.forbidden( - getUnauthorizedMessage( - ruleTypeId, - ScopeType.Consumer, - consumer, - 'find', - authorizationEntity - ) + getUnauthorizedMessage(ruleTypeId, consumer, 'find', authorizationEntity) ); } else { if (authorizedEntries.has(ruleTypeId)) { @@ -376,6 +336,9 @@ export class AlertingAuthorization { string, [RegistryAlertTypeWithAuth, string, HasPrivileges, IsAuthorizedAtProducerLevel] >(); + const allPossibleConsumers = await this.allPossibleConsumers; + const addLegacyConsumerPrivileges = (legacyConsumer: string) => + legacyConsumer === ALERTS_FEATURE_ID || isEmpty(featuresIds); for (const feature of fIds) { const featureDef = this.features .getKibanaFeatures() @@ -401,6 +364,31 @@ export class AlertingAuthorization { ruleTypeAuth.producer === feature, ] ); + // FUTURE ENGINEER + // We are just trying to add back the legacy consumers associated + // to the rule type to get back the privileges that was given at one point + if (!isEmpty(ruleTypeAuth.validLegacyConsumers)) { + ruleTypeAuth.validLegacyConsumers.forEach((legacyConsumer) => { + if (addLegacyConsumerPrivileges(legacyConsumer)) { + if (!allPossibleConsumers[legacyConsumer]) { + allPossibleConsumers[legacyConsumer] = { + read: true, + all: true, + }; + } + + privilegeToRuleType.set( + this.authorization!.actions.alerting.get( + ruleTypeId, + legacyConsumer, + authorizationEntity, + operation + ), + [ruleTypeAuth, legacyConsumer, hasPrivilegeByOperation(operation), false] + ); + } + }); + } } } } @@ -418,7 +406,7 @@ export class AlertingAuthorization { ? // has access to all features this.augmentWithAuthorizedConsumers( new Set(ruleTypesAuthorized.values()), - await this.allPossibleConsumers + allPossibleConsumers ) : // only has some of the required privileges privileges.kibana.reduce((authorizedRuleTypes, { authorized, privilege }) => { @@ -433,10 +421,14 @@ export class AlertingAuthorization { if (isAuthorizedAtProducerLevel) { // granting privileges under the producer automatically authorized the Rules Management UI as well - ruleType.authorizedConsumers[ALERTS_FEATURE_ID] = mergeHasPrivileges( - hasPrivileges, - ruleType.authorizedConsumers[ALERTS_FEATURE_ID] - ); + ruleType.validLegacyConsumers.forEach((legacyConsumer) => { + if (addLegacyConsumerPrivileges(legacyConsumer)) { + ruleType.authorizedConsumers[legacyConsumer] = mergeHasPrivileges( + hasPrivileges, + ruleType.authorizedConsumers[legacyConsumer] + ); + } + }); } authorizedRuleTypes.add(ruleType); } @@ -488,22 +480,30 @@ function asAuthorizedConsumers( consumers: string[], hasPrivileges: HasPrivileges ): AuthorizedConsumers { - return fromPairs(consumers.map((feature) => [feature, hasPrivileges])); -} - -enum ScopeType { - Consumer, - Producer, + return consumers.reduce((acc, feature) => { + acc[feature] = hasPrivileges; + return acc; + }, {}); } function getUnauthorizedMessage( alertTypeId: string, - scopeType: ScopeType, scope: string, operation: string, entity: string ): string { - return `Unauthorized to ${operation} a "${alertTypeId}" ${entity} ${ - scopeType === ScopeType.Consumer ? `for "${scope}"` : `by "${scope}"` - }`; + return `Unauthorized by "${scope}" to ${operation} "${alertTypeId}" ${entity}`; } + +export const getValidConsumer = ({ + validLegacyConsumers, + legacyConsumer, + producer, +}: { + validLegacyConsumers: string[]; + legacyConsumer: string; + producer: string; +}): string => + legacyConsumer === ALERTS_FEATURE_ID || validLegacyConsumers.includes(legacyConsumer) + ? producer + : legacyConsumer; diff --git a/x-pack/plugins/alerting/server/authorization/alerting_authorization_kuery.test.ts b/x-pack/plugins/alerting/server/authorization/alerting_authorization_kuery.test.ts index c9e129085c3c0..bfa36ccfd46c5 100644 --- a/x-pack/plugins/alerting/server/authorization/alerting_authorization_kuery.test.ts +++ b/x-pack/plugins/alerting/server/authorization/alerting_authorization_kuery.test.ts @@ -34,6 +34,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { @@ -71,6 +72,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { @@ -111,6 +113,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, { actionGroups: [], @@ -130,6 +133,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, { actionGroups: [], @@ -149,6 +153,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { @@ -189,6 +194,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, { actionGroups: [], @@ -208,6 +214,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { @@ -249,6 +256,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, { actionGroups: [], @@ -268,6 +276,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { @@ -303,6 +312,7 @@ describe('asKqlFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { @@ -339,6 +349,7 @@ describe('asEsDslFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { @@ -403,6 +414,7 @@ describe('asEsDslFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { @@ -475,6 +487,7 @@ describe('asEsDslFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, { actionGroups: [], @@ -494,6 +507,7 @@ describe('asEsDslFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, { actionGroups: [], @@ -513,6 +527,7 @@ describe('asEsDslFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { @@ -678,6 +693,7 @@ describe('asEsDslFiltersByRuleTypeAndConsumer', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]), { diff --git a/x-pack/plugins/alerting/server/index.ts b/x-pack/plugins/alerting/server/index.ts index ae42c665d73cf..6aa1c44fe6e81 100644 --- a/x-pack/plugins/alerting/server/index.ts +++ b/x-pack/plugins/alerting/server/index.ts @@ -56,6 +56,7 @@ export { ECS_COMPONENT_TEMPLATE_NAME, ECS_CONTEXT, TOTAL_FIELDS_LIMIT, + VALID_ALERT_INDEX_PREFIXES, getComponentTemplate, type PublicFrameworkAlertsService, createOrUpdateIlmPolicy, @@ -64,6 +65,7 @@ export { createOrUpdateIndexTemplate, createConcreteWriteIndex, installWithTimeout, + isValidAlertIndexName, } from './alerts_service'; export { getDataStreamAdapter } from './alerts_service/lib/data_stream_adapter'; diff --git a/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts b/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts index c8c2e5f1943ec..609c860e4f7e9 100644 --- a/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts +++ b/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts @@ -46,6 +46,7 @@ const ruleType: jest.Mocked = { validate: { params: schema.any(), }, + validLegacyConsumers: [], }; const context: RuleContextOpts = { diff --git a/x-pack/plugins/alerting/server/lib/create_alert_event_log_record_object.test.ts b/x-pack/plugins/alerting/server/lib/create_alert_event_log_record_object.test.ts index 6b18d1aac93dd..5aec760a1eadf 100644 --- a/x-pack/plugins/alerting/server/lib/create_alert_event_log_record_object.test.ts +++ b/x-pack/plugins/alerting/server/lib/create_alert_event_log_record_object.test.ts @@ -26,6 +26,7 @@ describe('createAlertEventLogRecordObject', () => { validate: { params: schema.any(), }, + validLegacyConsumers: [], }; test('created alert event "execute-start"', async () => { diff --git a/x-pack/plugins/alerting/server/routes/find_rules.test.ts b/x-pack/plugins/alerting/server/routes/find_rules.test.ts index 6e8f4e5474dbf..afd621c6e7abd 100644 --- a/x-pack/plugins/alerting/server/routes/find_rules.test.ts +++ b/x-pack/plugins/alerting/server/routes/find_rules.test.ts @@ -79,6 +79,7 @@ describe('findRulesRoute', () => { "includeSnoozeData": true, "options": Object { "defaultSearchOperator": "OR", + "filterConsumers": undefined, "page": 1, "perPage": 1, }, diff --git a/x-pack/plugins/alerting/server/routes/find_rules.ts b/x-pack/plugins/alerting/server/routes/find_rules.ts index 04b18da1a1b0c..1eab92db82383 100644 --- a/x-pack/plugins/alerting/server/routes/find_rules.ts +++ b/x-pack/plugins/alerting/server/routes/find_rules.ts @@ -47,6 +47,7 @@ const querySchema = schema.object({ ), fields: schema.maybe(schema.arrayOf(schema.string())), filter: schema.maybe(schema.string()), + filter_consumers: schema.maybe(schema.arrayOf(schema.string())), }); const rewriteQueryReq: RewriteRequestCase = ({ @@ -56,11 +57,13 @@ const rewriteQueryReq: RewriteRequestCase = ({ per_page: perPage, sort_field: sortField, sort_order: sortOrder, + filter_consumers: filterConsumers, ...rest }) => ({ ...rest, defaultSearchOperator, perPage, + filterConsumers, ...(sortField ? { sortField } : {}), ...(sortOrder ? { sortOrder } : {}), ...(hasReference ? { hasReference } : {}), diff --git a/x-pack/plugins/alerting/server/routes/health.test.ts b/x-pack/plugins/alerting/server/routes/health.test.ts index b1c562ada8717..bb42109ef8502 100644 --- a/x-pack/plugins/alerting/server/routes/health.test.ts +++ b/x-pack/plugins/alerting/server/routes/health.test.ts @@ -51,6 +51,7 @@ const ruleTypes = [ defaultScheduleInterval: '10m', hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], } as RegistryAlertTypeWithAuth, ]; diff --git a/x-pack/plugins/alerting/server/routes/legacy/health.test.ts b/x-pack/plugins/alerting/server/routes/legacy/health.test.ts index 9946f659a0744..e25485229dc0c 100644 --- a/x-pack/plugins/alerting/server/routes/legacy/health.test.ts +++ b/x-pack/plugins/alerting/server/routes/legacy/health.test.ts @@ -55,6 +55,7 @@ const ruleTypes = [ defaultScheduleInterval: '10m', hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], } as RegistryAlertTypeWithAuth, ]; diff --git a/x-pack/plugins/alerting/server/routes/legacy/list_alert_types.test.ts b/x-pack/plugins/alerting/server/routes/legacy/list_alert_types.test.ts index 7262f42319c1f..ae094df73d093 100644 --- a/x-pack/plugins/alerting/server/routes/legacy/list_alert_types.test.ts +++ b/x-pack/plugins/alerting/server/routes/legacy/list_alert_types.test.ts @@ -64,6 +64,7 @@ describe('listAlertTypesRoute', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], } as RegistryAlertTypeWithAuth, ]; rulesClient.listRuleTypes.mockResolvedValueOnce(new Set(listTypes)); @@ -98,6 +99,7 @@ describe('listAlertTypesRoute', () => { "id": "recovered", "name": "Recovered", }, + "validLegacyConsumers": Array [], }, ], } @@ -143,6 +145,7 @@ describe('listAlertTypesRoute', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], } as RegistryAlertTypeWithAuth, ]; @@ -198,6 +201,7 @@ describe('listAlertTypesRoute', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], } as RegistryAlertTypeWithAuth, ]; diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/aggregate/transforms/transform_aggregate_query_request/v1.ts b/x-pack/plugins/alerting/server/routes/rule/apis/aggregate/transforms/transform_aggregate_query_request/v1.ts index 7b5879227ce97..baa6b9bb46f9c 100644 --- a/x-pack/plugins/alerting/server/routes/rule/apis/aggregate/transforms/transform_aggregate_query_request/v1.ts +++ b/x-pack/plugins/alerting/server/routes/rule/apis/aggregate/transforms/transform_aggregate_query_request/v1.ts @@ -13,11 +13,13 @@ export const transformAggregateQueryRequest: RewriteRequestCase ({ defaultSearchOperator, ...(hasReference ? { hasReference } : {}), ...(searchFields ? { searchFields } : {}), ...(search ? { search } : {}), + ...(filterConsumers ? { filterConsumers } : {}), ...(filter ? { filter } : {}), }); diff --git a/x-pack/plugins/alerting/server/routes/rule_types.test.ts b/x-pack/plugins/alerting/server/routes/rule_types.test.ts index 2dab9284bb5ac..c52ce30e41dcd 100644 --- a/x-pack/plugins/alerting/server/routes/rule_types.test.ts +++ b/x-pack/plugins/alerting/server/routes/rule_types.test.ts @@ -62,9 +62,12 @@ describe('ruleTypesRoute', () => { doesSetRecoveryContext: false, hasAlertsMappings: true, hasFieldsForAAD: false, + validLegacyConsumers: [], } as RegistryAlertTypeWithAuth, ]; - const expectedResult: Array> = [ + const expectedResult: Array< + AsApiContract> + > = [ { id: '1', name: 'name', @@ -172,6 +175,7 @@ describe('ruleTypesRoute', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], } as RegistryAlertTypeWithAuth, ]; @@ -227,6 +231,7 @@ describe('ruleTypesRoute', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], } as RegistryAlertTypeWithAuth, ]; diff --git a/x-pack/plugins/alerting/server/routes/rule_types.ts b/x-pack/plugins/alerting/server/routes/rule_types.ts index 4c4a812d75684..4521bdfd167a2 100644 --- a/x-pack/plugins/alerting/server/routes/rule_types.ts +++ b/x-pack/plugins/alerting/server/routes/rule_types.ts @@ -8,10 +8,10 @@ import { IRouter } from '@kbn/core/server'; import { ILicenseState } from '../lib'; import { RegistryAlertTypeWithAuth } from '../authorization'; -import { RewriteResponseCase, verifyAccessAndContext } from './lib'; +import { verifyAccessAndContext } from './lib'; import { AlertingRequestHandlerContext, BASE_ALERTING_API_PATH } from '../types'; -const rewriteBodyRes: RewriteResponseCase = (results) => { +const rewriteBodyRes = (results: RegistryAlertTypeWithAuth[]) => { return results.map( ({ enabledInLicense, @@ -27,8 +27,9 @@ const rewriteBodyRes: RewriteResponseCase = (result doesSetRecoveryContext, hasAlertsMappings, hasFieldsForAAD, + validLegacyConsumers, ...rest - }) => ({ + }: RegistryAlertTypeWithAuth) => ({ ...rest, enabled_in_license: enabledInLicense, recovery_action_group: recoveryActionGroup, diff --git a/x-pack/plugins/alerting/server/rule_type_registry.test.ts b/x-pack/plugins/alerting/server/rule_type_registry.test.ts index 689741c7479ac..05aa84292ed8d 100644 --- a/x-pack/plugins/alerting/server/rule_type_registry.test.ts +++ b/x-pack/plugins/alerting/server/rule_type_registry.test.ts @@ -590,40 +590,41 @@ describe('Create Lifecycle', () => { }); const ruleType = registry.get('test'); expect(ruleType).toMatchInlineSnapshot(` - Object { - "actionGroups": Array [ - Object { - "id": "default", - "name": "Default", - }, - Object { - "id": "recovered", - "name": "Recovered", - }, - ], - "actionVariables": Object { - "context": Array [], - "params": Array [], - "state": Array [], - }, - "defaultActionGroupId": "default", - "executor": [MockFunction], - "id": "test", - "isExportable": true, - "minimumLicenseRequired": "basic", - "name": "Test", - "producer": "alerts", - "recoveryActionGroup": Object { - "id": "recovered", - "name": "Recovered", - }, - "validate": Object { - "params": Object { - "validate": [Function], - }, - }, - } - `); + Object { + "actionGroups": Array [ + Object { + "id": "default", + "name": "Default", + }, + Object { + "id": "recovered", + "name": "Recovered", + }, + ], + "actionVariables": Object { + "context": Array [], + "params": Array [], + "state": Array [], + }, + "defaultActionGroupId": "default", + "executor": [MockFunction], + "id": "test", + "isExportable": true, + "minimumLicenseRequired": "basic", + "name": "Test", + "producer": "alerts", + "recoveryActionGroup": Object { + "id": "recovered", + "name": "Recovered", + }, + "validLegacyConsumers": Array [], + "validate": Object { + "params": Object { + "validate": [Function], + }, + }, + } + `); }); test(`should throw an error if type isn't registered`, () => { @@ -713,6 +714,7 @@ describe('Create Lifecycle', () => { "name": "Recovered", }, "ruleTaskTimeout": "20m", + "validLegacyConsumers": Array [], }, } `); diff --git a/x-pack/plugins/alerting/server/rule_type_registry.ts b/x-pack/plugins/alerting/server/rule_type_registry.ts index c0339275bcf35..68e3e1d3d590b 100644 --- a/x-pack/plugins/alerting/server/rule_type_registry.ts +++ b/x-pack/plugins/alerting/server/rule_type_registry.ts @@ -38,6 +38,7 @@ import { getRuleTypeFeatureUsageName } from './lib/get_rule_type_feature_usage_n import { InMemoryMetrics } from './monitoring'; import { AlertingRulesConfig } from '.'; import { AlertsService } from './alerts_service/alerts_service'; +import { getRuleTypeIdValidLegacyConsumers } from './rule_type_registry_deprecated_consumers'; export interface ConstructorOptions { logger: Logger; @@ -70,6 +71,7 @@ export interface RegistryRuleType enabledInLicense: boolean; hasFieldsForAAD: boolean; hasAlertsMappings: boolean; + validLegacyConsumers: string[]; } /** @@ -102,6 +104,7 @@ export type NormalizedRuleType< RecoveryActionGroupId extends string, AlertData extends RuleAlertData > = { + validLegacyConsumers: string[]; actionGroups: Array>; } & Omit< RuleType< @@ -386,6 +389,7 @@ export class RuleTypeRegistry { doesSetRecoveryContext, alerts, fieldsForAAD, + validLegacyConsumers, }, ]) => { // KEEP the type here to be safe if not the map is ignoring it for some reason @@ -409,6 +413,7 @@ export class RuleTypeRegistry { ).isValid, hasFieldsForAAD: Boolean(fieldsForAAD), hasAlertsMappings: !!alerts, + validLegacyConsumers, ...(alerts ? { alerts } : {}), }; return ruleType; @@ -499,5 +504,6 @@ function augmentActionGroupsWithReserved< ...ruleType, actionGroups: [...actionGroups, ...reservedActionGroups], recoveryActionGroup: recoveryActionGroup ?? RecoveredActionGroup, + validLegacyConsumers: getRuleTypeIdValidLegacyConsumers(id), }; } diff --git a/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.test.ts b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.test.ts new file mode 100644 index 0000000000000..e1a7828d85042 --- /dev/null +++ b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.test.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + getRuleTypeIdValidLegacyConsumers, + ruleTypeIdWithValidLegacyConsumers, +} from './rule_type_registry_deprecated_consumers'; + +describe('rule_type_registry_deprecated_consumers', () => { + describe('ruleTypeIdWithValidLegacyConsumers', () => { + test('Only these rule type ids should be in the list', () => { + expect(Object.keys(ruleTypeIdWithValidLegacyConsumers)).toMatchInlineSnapshot(` + Array [ + "example.always-firing", + "transform_health", + ".index-threshold", + ".geo-containment", + ".es-query", + "xpack.ml.anomaly_detection_alert", + "xpack.ml.anomaly_detection_jobs_health", + "xpack.synthetics.alerts.monitorStatus", + "xpack.synthetics.alerts.tls", + "xpack.uptime.alerts.monitorStatus", + "xpack.uptime.alerts.tlsCertificate", + "xpack.uptime.alerts.durationAnomaly", + "xpack.uptime.alerts.tls", + "siem.eqlRule", + "siem.savedQueryRule", + "siem.indicatorRule", + "siem.mlRule", + "siem.queryRule", + "siem.thresholdRule", + "siem.newTermsRule", + "siem.notifications", + "slo.rules.burnRate", + "metrics.alert.anomaly", + "logs.alert.document.count", + "metrics.alert.inventory.threshold", + "metrics.alert.threshold", + "monitoring_alert_cluster_health", + "monitoring_alert_license_expiration", + "monitoring_alert_cpu_usage", + "monitoring_alert_missing_monitoring_data", + "monitoring_alert_disk_usage", + "monitoring_alert_thread_pool_search_rejections", + "monitoring_alert_thread_pool_write_rejections", + "monitoring_alert_jvm_memory_usage", + "monitoring_alert_nodes_changed", + "monitoring_alert_logstash_version_mismatch", + "monitoring_alert_kibana_version_mismatch", + "monitoring_alert_elasticsearch_version_mismatch", + "monitoring_ccr_read_exceptions", + "monitoring_shard_size", + "apm.transaction_duration", + "apm.anomaly", + "apm.error_rate", + "apm.transaction_error_rate", + "test.always-firing", + "test.always-firing-alert-as-data", + "test.authorization", + "test.cancellableRule", + "test.cumulative-firing", + "test.exceedsAlertLimit", + "test.failing", + "test.gold.noop", + "test.longRunning", + "test.multipleSearches", + "test.never-firing", + "test.noop", + "test.onlyContextVariables", + "test.onlyStateVariables", + "test.patternFiring", + "test.patternFiringAad", + "test.patternFiringAutoRecoverFalse", + "test.patternLongRunning", + "test.patternLongRunning.cancelAlertsOnRuleTimeout", + "test.patternSuccessOrFailure", + "test.restricted-noop", + "test.throw", + "test.unrestricted-noop", + "test.validation", + ] + `); + }); + }); + describe('getRuleTypeIdValidLegacyConsumers', () => { + test('".es-query" should have "alerts" & "discover" as legacy consumers', () => { + expect(getRuleTypeIdValidLegacyConsumers('.es-query')).toEqual(['alerts', 'discover']); + }); + + test('All other rule types except ".es-query" should have "alerts" as legacy consumer', () => { + for (const ruleTypeId of Object.keys(ruleTypeIdWithValidLegacyConsumers).filter( + (rt) => rt !== '.es-query' + )) { + expect(getRuleTypeIdValidLegacyConsumers(ruleTypeId)).toEqual(['alerts']); + } + }); + }); +}); diff --git a/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts new file mode 100644 index 0000000000000..d6a238c414243 --- /dev/null +++ b/x-pack/plugins/alerting/server/rule_type_registry_deprecated_consumers.ts @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ALERTS_FEATURE_ID } from './types'; + +export const ruleTypeIdWithValidLegacyConsumers: Record = { + 'example.always-firing': [ALERTS_FEATURE_ID], + transform_health: [ALERTS_FEATURE_ID], + '.index-threshold': [ALERTS_FEATURE_ID], + '.geo-containment': [ALERTS_FEATURE_ID], + '.es-query': [ALERTS_FEATURE_ID, 'discover'], + 'xpack.ml.anomaly_detection_alert': [ALERTS_FEATURE_ID], + 'xpack.ml.anomaly_detection_jobs_health': [ALERTS_FEATURE_ID], + 'xpack.synthetics.alerts.monitorStatus': [ALERTS_FEATURE_ID], + 'xpack.synthetics.alerts.tls': [ALERTS_FEATURE_ID], + 'xpack.uptime.alerts.monitorStatus': [ALERTS_FEATURE_ID], + 'xpack.uptime.alerts.tlsCertificate': [ALERTS_FEATURE_ID], + 'xpack.uptime.alerts.durationAnomaly': [ALERTS_FEATURE_ID], + 'xpack.uptime.alerts.tls': [ALERTS_FEATURE_ID], + 'siem.eqlRule': [ALERTS_FEATURE_ID], + 'siem.savedQueryRule': [ALERTS_FEATURE_ID], + 'siem.indicatorRule': [ALERTS_FEATURE_ID], + 'siem.mlRule': [ALERTS_FEATURE_ID], + 'siem.queryRule': [ALERTS_FEATURE_ID], + 'siem.thresholdRule': [ALERTS_FEATURE_ID], + 'siem.newTermsRule': [ALERTS_FEATURE_ID], + 'siem.notifications': [ALERTS_FEATURE_ID], + 'slo.rules.burnRate': [ALERTS_FEATURE_ID], + 'metrics.alert.anomaly': [ALERTS_FEATURE_ID], + 'logs.alert.document.count': [ALERTS_FEATURE_ID], + 'metrics.alert.inventory.threshold': [ALERTS_FEATURE_ID], + 'metrics.alert.threshold': [ALERTS_FEATURE_ID], + monitoring_alert_cluster_health: [ALERTS_FEATURE_ID], + monitoring_alert_license_expiration: [ALERTS_FEATURE_ID], + monitoring_alert_cpu_usage: [ALERTS_FEATURE_ID], + monitoring_alert_missing_monitoring_data: [ALERTS_FEATURE_ID], + monitoring_alert_disk_usage: [ALERTS_FEATURE_ID], + monitoring_alert_thread_pool_search_rejections: [ALERTS_FEATURE_ID], + monitoring_alert_thread_pool_write_rejections: [ALERTS_FEATURE_ID], + monitoring_alert_jvm_memory_usage: [ALERTS_FEATURE_ID], + monitoring_alert_nodes_changed: [ALERTS_FEATURE_ID], + monitoring_alert_logstash_version_mismatch: [ALERTS_FEATURE_ID], + monitoring_alert_kibana_version_mismatch: [ALERTS_FEATURE_ID], + monitoring_alert_elasticsearch_version_mismatch: [ALERTS_FEATURE_ID], + monitoring_ccr_read_exceptions: [ALERTS_FEATURE_ID], + monitoring_shard_size: [ALERTS_FEATURE_ID], + 'apm.transaction_duration': [ALERTS_FEATURE_ID], + 'apm.anomaly': [ALERTS_FEATURE_ID], + 'apm.error_rate': [ALERTS_FEATURE_ID], + 'apm.transaction_error_rate': [ALERTS_FEATURE_ID], + 'test.always-firing': [ALERTS_FEATURE_ID], + 'test.always-firing-alert-as-data': [ALERTS_FEATURE_ID], + 'test.authorization': [ALERTS_FEATURE_ID], + 'test.cancellableRule': [ALERTS_FEATURE_ID], + 'test.cumulative-firing': [ALERTS_FEATURE_ID], + 'test.exceedsAlertLimit': [ALERTS_FEATURE_ID], + 'test.failing': [ALERTS_FEATURE_ID], + 'test.gold.noop': [ALERTS_FEATURE_ID], + 'test.longRunning': [ALERTS_FEATURE_ID], + 'test.multipleSearches': [ALERTS_FEATURE_ID], + 'test.never-firing': [ALERTS_FEATURE_ID], + 'test.noop': [ALERTS_FEATURE_ID], + 'test.onlyContextVariables': [ALERTS_FEATURE_ID], + 'test.onlyStateVariables': [ALERTS_FEATURE_ID], + 'test.patternFiring': [ALERTS_FEATURE_ID], + 'test.patternFiringAad': [ALERTS_FEATURE_ID], + 'test.patternFiringAutoRecoverFalse': [ALERTS_FEATURE_ID], + 'test.patternLongRunning': [ALERTS_FEATURE_ID], + 'test.patternLongRunning.cancelAlertsOnRuleTimeout': [ALERTS_FEATURE_ID], + 'test.patternSuccessOrFailure': [ALERTS_FEATURE_ID], + 'test.restricted-noop': [ALERTS_FEATURE_ID], + 'test.throw': [ALERTS_FEATURE_ID], + 'test.unrestricted-noop': [ALERTS_FEATURE_ID], + 'test.validation': [ALERTS_FEATURE_ID], +}; + +const getRuleTypeIdValidLegacyConsumers = (ruleTypeId: string): string[] => { + if (ruleTypeIdWithValidLegacyConsumers[ruleTypeId]) { + return ruleTypeIdWithValidLegacyConsumers[ruleTypeId]; + } + return []; +}; + +export { getRuleTypeIdValidLegacyConsumers }; diff --git a/x-pack/plugins/alerting/server/rules_client/lib/siem_legacy_actions/migrate_legacy_actions.test.ts b/x-pack/plugins/alerting/server/rules_client/lib/siem_legacy_actions/migrate_legacy_actions.test.ts index e0bbdb0d770ec..5e6e958f3bbc0 100644 --- a/x-pack/plugins/alerting/server/rules_client/lib/siem_legacy_actions/migrate_legacy_actions.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/lib/siem_legacy_actions/migrate_legacy_actions.test.ts @@ -46,6 +46,7 @@ const ruleType: jest.Mocked = { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], }; const context = { diff --git a/x-pack/plugins/alerting/server/rules_client/lib/validate_actions.test.ts b/x-pack/plugins/alerting/server/rules_client/lib/validate_actions.test.ts index 84f0a89e72c01..d01d45abc9759 100644 --- a/x-pack/plugins/alerting/server/rules_client/lib/validate_actions.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/lib/validate_actions.test.ts @@ -32,6 +32,7 @@ describe('validateActions', () => { context: 'context', mappings: { fieldMap: { field: { type: 'fieldType', required: false } } }, }, + validLegacyConsumers: [], }; const data = { diff --git a/x-pack/plugins/alerting/server/rules_client/methods/find.ts b/x-pack/plugins/alerting/server/rules_client/methods/find.ts index 6493174a61b6a..537dfef55aff0 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/find.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/find.ts @@ -7,7 +7,7 @@ import Boom from '@hapi/boom'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { pick } from 'lodash'; +import { isEmpty, pick } from 'lodash'; import { KueryNode, nodeBuilder } from '@kbn/es-query'; import { AlertConsumers } from '@kbn/rule-data-utils'; import { RawRule, RuleTypeParams, SanitizedRule, Rule } from '../../types'; @@ -34,6 +34,7 @@ export interface FindParams { options?: FindOptions; excludeFromPublicApi?: boolean; includeSnoozeData?: boolean; + featuresIds?: string[]; } export interface FindOptions extends IndexType { @@ -50,6 +51,7 @@ export interface FindOptions extends IndexType { }; fields?: string[]; filter?: string | KueryNode; + filterConsumers?: string[]; } export interface FindResult { @@ -62,7 +64,7 @@ export interface FindResult { export async function find( context: RulesClientContext, { - options: { fields, ...options } = {}, + options: { fields, filterConsumers, ...options } = {}, excludeFromPublicApi = false, includeSnoozeData = false, }: FindParams = {} @@ -71,7 +73,8 @@ export async function find( try { authorizationTuple = await context.authorization.getFindAuthorizationFilter( AlertingAuthorizationEntity.Rule, - alertingAuthorizationFilterOpts + alertingAuthorizationFilterOpts, + isEmpty(filterConsumers) ? undefined : new Set(filterConsumers) ); } catch (error) { context.auditLogger?.log( @@ -84,7 +87,6 @@ export async function find( } const { filter: authorizationFilter, ensureRuleTypeIsAuthorized } = authorizationTuple; - const filterKueryNode = buildKueryNodeFilter(options.filter); let sortField = mapSortField(options.sortField); if (excludeFromPublicApi) { diff --git a/x-pack/plugins/alerting/server/rules_client/tests/bulk_delete.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/bulk_delete.test.ts index febf66a1d2f60..8d478b12d65a9 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/bulk_delete.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/bulk_delete.test.ts @@ -181,6 +181,7 @@ describe('bulkDelete', () => { validate: { params: schema.any(), }, + validLegacyConsumers: [], }); }); diff --git a/x-pack/plugins/alerting/server/rules_client/tests/find.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/find.test.ts index 227988aaa6da0..3d697b08dc2f1 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/find.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/find.test.ts @@ -91,6 +91,7 @@ describe('find()', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]); beforeEach(() => { @@ -153,6 +154,7 @@ describe('find()', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]) ); @@ -466,6 +468,7 @@ describe('find()', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]) ); @@ -484,6 +487,7 @@ describe('find()', () => { validate: { params: schema.any(), }, + validLegacyConsumers: [], })); ruleTypeRegistry.get.mockImplementationOnce(() => ({ id: '123', @@ -504,6 +508,7 @@ describe('find()', () => { validate: { params: schema.any(), }, + validLegacyConsumers: [], })); unsecuredSavedObjectsClient.find.mockResolvedValue({ total: 2, @@ -674,6 +679,7 @@ describe('find()', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]) ); @@ -692,6 +698,7 @@ describe('find()', () => { validate: { params: schema.any(), }, + validLegacyConsumers: [], })); ruleTypeRegistry.get.mockImplementationOnce(() => ({ id: '123', @@ -712,6 +719,7 @@ describe('find()', () => { validate: { params: schema.any(), }, + validLegacyConsumers: [], })); unsecuredSavedObjectsClient.find.mockResolvedValue({ total: 2, diff --git a/x-pack/plugins/alerting/server/rules_client/tests/get.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/get.test.ts index a5259a2ddd1e0..36a5510a03a3b 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/get.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/get.test.ts @@ -319,6 +319,7 @@ describe('get()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const rulesClient = new RulesClient(rulesClientParams); unsecuredSavedObjectsClient.get.mockResolvedValueOnce({ @@ -445,6 +446,7 @@ describe('get()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const rulesClient = new RulesClient(rulesClientParams); unsecuredSavedObjectsClient.get.mockResolvedValueOnce({ diff --git a/x-pack/plugins/alerting/server/rules_client/tests/get_tags.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/get_tags.test.ts index ca1ef9c275779..6d55fe7f40725 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/get_tags.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/get_tags.test.ts @@ -70,6 +70,7 @@ const listedTypes = new Set([ enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]); @@ -123,6 +124,7 @@ describe('getTags()', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]) ); diff --git a/x-pack/plugins/alerting/server/rules_client/tests/lib.ts b/x-pack/plugins/alerting/server/rules_client/tests/lib.ts index 25afdedf54d3c..ee84a789454ef 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/lib.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/lib.ts @@ -122,6 +122,7 @@ export function getBeforeSetup( validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); rulesClientParams.getEventLogClient.mockResolvedValue( eventLogClient ?? eventLogClientMock.create() diff --git a/x-pack/plugins/alerting/server/rules_client/tests/list_rule_types.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/list_rule_types.test.ts index 8aa5615269404..09aed8b28bfb4 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/list_rule_types.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/list_rule_types.test.ts @@ -76,6 +76,7 @@ describe('listRuleTypes', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }; const myAppAlertType: RegistryRuleType = { actionGroups: [], @@ -90,6 +91,7 @@ describe('listRuleTypes', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }; const setOfAlertTypes = new Set([myAppAlertType, alertingAlertType]); @@ -134,6 +136,7 @@ describe('listRuleTypes', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, { id: 'myOtherType', @@ -147,6 +150,7 @@ describe('listRuleTypes', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]); beforeEach(() => { @@ -170,6 +174,7 @@ describe('listRuleTypes', () => { enabledInLicense: true, hasAlertsMappings: false, hasFieldsForAAD: false, + validLegacyConsumers: [], }, ]); authorization.filterByRuleTypeAuthorization.mockResolvedValue(authorizedTypes); diff --git a/x-pack/plugins/alerting/server/rules_client/tests/resolve.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/resolve.test.ts index 4733fd81786e9..5dc753f5d4ade 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/resolve.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/resolve.test.ts @@ -294,6 +294,7 @@ describe('resolve()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const rulesClient = new RulesClient(rulesClientParams); unsecuredSavedObjectsClient.resolve.mockResolvedValueOnce({ @@ -430,6 +431,7 @@ describe('resolve()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); const rulesClient = new RulesClient(rulesClientParams); unsecuredSavedObjectsClient.resolve.mockResolvedValueOnce({ diff --git a/x-pack/plugins/alerting/server/rules_client/tests/update.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/update.test.ts index 76b62cdad887e..cd97ea0ac1bbd 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/update.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/update.test.ts @@ -186,6 +186,7 @@ describe('update()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], }); (migrateLegacyActions as jest.Mock).mockResolvedValue({ hasLegacyActions: false, @@ -1008,6 +1009,7 @@ describe('update()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); unsecuredSavedObjectsClient.create.mockResolvedValueOnce({ id: '1', @@ -1523,6 +1525,7 @@ describe('update()', () => { return { state: {} }; }, producer: 'alerts', + validLegacyConsumers: [], }); await expect( rulesClient.update({ @@ -1907,6 +1910,7 @@ describe('update()', () => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], }); encryptedSavedObjects.getDecryptedAsInternalUser.mockResolvedValueOnce({ id: alertId, diff --git a/x-pack/plugins/alerting/server/rules_client_conflict_retries.test.ts b/x-pack/plugins/alerting/server/rules_client_conflict_retries.test.ts index 6b4ce4c16fe8b..c2c1f73bbe5fb 100644 --- a/x-pack/plugins/alerting/server/rules_client_conflict_retries.test.ts +++ b/x-pack/plugins/alerting/server/rules_client_conflict_retries.test.ts @@ -373,6 +373,7 @@ beforeEach(() => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], })); ruleTypeRegistry.get.mockReturnValue({ @@ -390,6 +391,7 @@ beforeEach(() => { validate: { params: { validate: (params) => params }, }, + validLegacyConsumers: [], }); rulesClient = new RulesClient(rulesClientParams); diff --git a/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts b/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts index 22d056f489104..2c1810b0d219e 100644 --- a/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts @@ -81,6 +81,7 @@ const ruleType: NormalizedRuleType< mappings: { fieldMap: { field: { type: 'fieldType', required: false } } }, }, autoRecoverAlerts: false, + validLegacyConsumers: [], }; const rule = { id: '1', diff --git a/x-pack/plugins/alerting/server/task_runner/fixtures.ts b/x-pack/plugins/alerting/server/task_runner/fixtures.ts index 64c798b868db1..50f26248499e1 100644 --- a/x-pack/plugins/alerting/server/task_runner/fixtures.ts +++ b/x-pack/plugins/alerting/server/task_runner/fixtures.ts @@ -152,6 +152,7 @@ export const ruleType: jest.Mocked = { context: 'test', mappings: { fieldMap: { field: { type: 'keyword', required: false } } }, }, + validLegacyConsumers: [], }; export const mockRunNowResponse = { diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner_factory.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner_factory.test.ts index 3cfa7dde78341..786a0fe4a338f 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner_factory.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner_factory.test.ts @@ -63,6 +63,7 @@ const ruleType: UntypedNormalizedRuleType = { validate: { params: schema.any(), }, + validLegacyConsumers: [], }; let fakeTimer: sinon.SinonFakeTimers; diff --git a/x-pack/plugins/apm/kibana.jsonc b/x-pack/plugins/apm/kibana.jsonc index 5cdc440e0ff24..a72209f18fa52 100644 --- a/x-pack/plugins/apm/kibana.jsonc +++ b/x-pack/plugins/apm/kibana.jsonc @@ -50,7 +50,6 @@ "usageCollection", "customIntegrations", // Move this to requiredPlugins after completely migrating from the Tutorials Home App "licenseManagement", - "profiling", "profilingDataAccess" ], "requiredBundles": [ diff --git a/x-pack/plugins/apm/public/components/shared/transaction_action_menu/transaction_action_menu.test.tsx b/x-pack/plugins/apm/public/components/shared/transaction_action_menu/transaction_action_menu.test.tsx index 555217d1c0b7b..5e1b8e6b099d0 100644 --- a/x-pack/plugins/apm/public/components/shared/transaction_action_menu/transaction_action_menu.test.tsx +++ b/x-pack/plugins/apm/public/components/shared/transaction_action_menu/transaction_action_menu.test.tsx @@ -79,7 +79,8 @@ const expectInfraLocatorsToBeCalled = () => { describe('TransactionActionMenu component', () => { beforeAll(() => { jest.spyOn(hooks, 'useFetcher').mockReturnValue({ - data: [], + // return as Profiling had been initialized + data: { initialized: true }, status: hooks.FETCH_STATUS.SUCCESS, refetch: jest.fn(), }); @@ -253,6 +254,27 @@ describe('TransactionActionMenu component', () => { expect(container).toMatchSnapshot(); }); + describe('Profiling items', () => { + it('renders flamegraph item', async () => { + const component = await renderTransaction( + Transactions.transactionWithHostData + ); + expectTextsInDocument(component, ['Host flamegraph']); + }); + it('renders topN functions item', async () => { + const component = await renderTransaction( + Transactions.transactionWithHostData + ); + expectTextsInDocument(component, ['Host topN functions']); + }); + it('renders stacktraces item', async () => { + const component = await renderTransaction( + Transactions.transactionWithHostData + ); + expectTextsInDocument(component, ['Host stacktraces']); + }); + }); + describe('Custom links', () => { beforeAll(() => { // Mocks callApmAPI because it's going to be used to fecth the transaction in the custom links flyout. @@ -393,3 +415,35 @@ describe('TransactionActionMenu component', () => { }); }); }); + +describe('Profiling not initialized', () => { + beforeAll(() => { + jest.spyOn(hooks, 'useFetcher').mockReturnValue({ + // return as Profiling had not been initialized + data: { initialized: false }, + status: hooks.FETCH_STATUS.SUCCESS, + refetch: jest.fn(), + }); + }); + afterEach(() => { + jest.clearAllMocks(); + }); + it('does not render flamegraph item', async () => { + const component = await renderTransaction( + Transactions.transactionWithHostData + ); + expectTextsNotInDocument(component, ['Host flamegraph']); + }); + it('does not render topN functions item', async () => { + const component = await renderTransaction( + Transactions.transactionWithHostData + ); + expectTextsNotInDocument(component, ['Host topN functions']); + }); + it('does not render stacktraces item', async () => { + const component = await renderTransaction( + Transactions.transactionWithHostData + ); + expectTextsNotInDocument(component, ['Host stacktraces']); + }); +}); diff --git a/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx b/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx index 919e98267c8b2..941e8568a45b7 100644 --- a/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx +++ b/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx @@ -18,6 +18,7 @@ import { MlLocatorDefinition } from '@kbn/ml-plugin/public'; import { enableComparisonByDefault } from '@kbn/observability-plugin/public'; import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; import type { InfraLocators } from '@kbn/infra-plugin/common/locators'; +import { apmEnableProfilingIntegration } from '@kbn/observability-plugin/common'; import { ApmPluginContext, ApmPluginContextValue } from './apm_plugin_context'; import { ConfigSchema } from '../..'; import { createCallApmApi } from '../../services/rest/create_call_apm_api'; @@ -57,6 +58,7 @@ const mockCore = merge({}, coreStart, { value: 100000, }, [enableComparisonByDefault]: true, + [apmEnableProfilingIntegration]: true, }; return uiSettings[key]; }, @@ -108,6 +110,21 @@ const mockPlugin = { }, }, }, + observabilityShared: { + locators: { + profiling: { + flamegraphLocator: { + getRedirectUrl: () => '/profiling/flamegraphs/flamegraph', + }, + topNFunctionsLocator: { + getRedirectUrl: () => '/profiling/functions/topn', + }, + stacktracesLocator: { + getRedirectUrl: () => '/profiling/stacktraces/threads', + }, + }, + }, + }, }; export const infraLocatorsMock: InfraLocators = { diff --git a/x-pack/plugins/apm/public/hooks/use_profiling_plugin.tsx b/x-pack/plugins/apm/public/hooks/use_profiling_plugin.tsx index 829a094375d30..e28d8f22e08ff 100644 --- a/x-pack/plugins/apm/public/hooks/use_profiling_plugin.tsx +++ b/x-pack/plugins/apm/public/hooks/use_profiling_plugin.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import { useEffect, useState } from 'react'; import { apmEnableProfilingIntegration } from '@kbn/observability-plugin/common'; import { useApmPluginContext } from '../context/apm_plugin/use_apm_plugin_context'; +import { useFetcher } from './use_fetcher'; export function useProfilingPlugin() { const { plugins, core } = useApmPluginContext(); @@ -15,30 +15,19 @@ export function useProfilingPlugin() { apmEnableProfilingIntegration, false ); - const [isProfilingPluginInitialized, setIsProfilingPluginInitialized] = - useState(); - useEffect(() => { - async function fetchIsProfilingSetup() { - if (!plugins.profiling) { - setIsProfilingPluginInitialized(false); - return; - } - const resp = await plugins.profiling.hasSetup(); - setIsProfilingPluginInitialized(resp); - } - - fetchIsProfilingSetup(); - }, [plugins.profiling]); + const { data } = useFetcher((callApmApi) => { + return callApmApi('GET /internal/apm/profiling/status'); + }, []); const isProfilingAvailable = - isProfilingIntegrationEnabled && isProfilingPluginInitialized; + isProfilingIntegrationEnabled && data?.initialized; return { - isProfilingPluginInitialized, profilingLocators: isProfilingAvailable - ? plugins.profiling?.locators + ? plugins.observabilityShared.locators.profiling : undefined, + isProfilingPluginInitialized: data?.initialized, isProfilingIntegrationEnabled, isProfilingAvailable, }; diff --git a/x-pack/plugins/apm/server/feature.ts b/x-pack/plugins/apm/server/feature.ts index b34a202376b2a..79136af2f8856 100644 --- a/x-pack/plugins/apm/server/feature.ts +++ b/x-pack/plugins/apm/server/feature.ts @@ -12,17 +12,14 @@ import { LicensingPluginSetup, LicensingApiRequestHandlerContext, } from '@kbn/licensing-plugin/server'; + import { APM_INDEX_SETTINGS_SAVED_OBJECT_TYPE } from '@kbn/apm-data-access-plugin/server/saved_objects/apm_indices'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; import { ApmRuleType, APM_SERVER_FEATURE_ID, } from '../common/rules/apm_rule_types'; -const ruleTypes = [ - ...Object.values(ApmRuleType), - OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, -]; +const ruleTypes = Object.values(ApmRuleType); export const APM_FEATURE = { id: APM_SERVER_FEATURE_ID, diff --git a/x-pack/plugins/apm/server/routes/profiling/route.ts b/x-pack/plugins/apm/server/routes/profiling/route.ts index e87fbd9a513d6..78c605cb2f457 100644 --- a/x-pack/plugins/apm/server/routes/profiling/route.ts +++ b/x-pack/plugins/apm/server/routes/profiling/route.ts @@ -131,7 +131,38 @@ const profilingFunctionsRoute = createApmServerRoute({ }, }); +const profilingStatusRoute = createApmServerRoute({ + endpoint: 'GET /internal/apm/profiling/status', + options: { tags: ['access:apm'] }, + handler: async (resources): Promise<{ initialized: boolean }> => { + const { context, plugins, logger } = resources; + const [esClient, profilingDataAccessStart] = await Promise.all([ + (await context.core).elasticsearch.client, + await plugins.profilingDataAccess?.start(), + ]); + if (profilingDataAccessStart) { + try { + const response = await profilingDataAccessStart?.services.getStatus({ + esClient: esClient.asCurrentUser, + soClient: (await context.core).savedObjects.client, + spaceId: ( + await plugins.spaces?.start() + )?.spacesService.getSpaceId(resources.request), + }); + + return { initialized: response.has_setup }; + } catch (e) { + // If any error happens just return as if profiling has not been initialized + logger.warn('Could not check Universal Profiling status'); + } + } + + return { initialized: false }; + }, +}); + export const profilingRouteRepository = { ...profilingFlamegraphRoute, + ...profilingStatusRoute, ...profilingFunctionsRoute, }; diff --git a/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap b/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap index 5ab73d95c15de..3edffdda86868 100644 --- a/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap +++ b/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap @@ -680,15 +680,11 @@ Array [ "privilege": Object { "alerting": Object { "alert": Object { - "all": Array [ - ".es-query", - ], + "all": Array [], "read": Array [], }, "rule": Object { - "all": Array [ - ".es-query", - ], + "all": Array [], "read": Array [], }, }, @@ -739,18 +735,6 @@ Array [ }, Object { "privilege": Object { - "alerting": Object { - "alert": Object { - "all": Array [ - ".es-query", - ], - }, - "rule": Object { - "all": Array [ - ".es-query", - ], - }, - }, "app": Array [ "discover", "kibana", @@ -1284,15 +1268,11 @@ Array [ "privilege": Object { "alerting": Object { "alert": Object { - "all": Array [ - ".es-query", - ], + "all": Array [], "read": Array [], }, "rule": Object { - "all": Array [ - ".es-query", - ], + "all": Array [], "read": Array [], }, }, @@ -1343,18 +1323,6 @@ Array [ }, Object { "privilege": Object { - "alerting": Object { - "alert": Object { - "all": Array [ - ".es-query", - ], - }, - "rule": Object { - "all": Array [ - ".es-query", - ], - }, - }, "app": Array [ "discover", "kibana", diff --git a/x-pack/plugins/features/server/oss_features.ts b/x-pack/plugins/features/server/oss_features.ts index 076ef4941c530..4097780cdfe10 100644 --- a/x-pack/plugins/features/server/oss_features.ts +++ b/x-pack/plugins/features/server/oss_features.ts @@ -32,7 +32,6 @@ export const buildOSSFeatures = ({ category: DEFAULT_APP_CATEGORIES.kibana, app: ['discover', 'kibana'], catalogue: ['discover'], - alerting: ['.es-query'], privileges: { all: { app: ['discover', 'kibana'], @@ -43,14 +42,6 @@ export const buildOSSFeatures = ({ read: ['index-pattern'], }, ui: ['show', 'save', 'saveQuery'], - alerting: { - rule: { - all: ['.es-query'], - }, - alert: { - all: ['.es-query'], - }, - }, }, read: { app: ['discover', 'kibana'], @@ -60,14 +51,6 @@ export const buildOSSFeatures = ({ read: ['index-pattern', 'search', 'query'], }, ui: ['show'], - alerting: { - rule: { - all: ['.es-query'], - }, - alert: { - all: ['.es-query'], - }, - }, }, }, subFeatures: [ diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts index 7949c9ab98a71..3e9363fa9828f 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts @@ -534,9 +534,15 @@ export function generateTemplateName(dataStream: RegistryDataStream): string { /** * Given a data stream name, return the indexTemplate name */ -function dataStreamNameToIndexTemplateName(dataStreamName: string): string { - const [type, dataset] = dataStreamName.split('-'); // ignore namespace at the end - return [type, dataset].join('-'); +async function getIndexTemplate( + esClient: ElasticsearchClient, + dataStreamName: string +): Promise { + const dataStream = await esClient.indices.getDataStream({ + name: dataStreamName, + expand_wildcards: ['open', 'hidden'], + }); + return dataStream.data_streams[0].template; } export function generateTemplateIndexPattern(dataStream: RegistryDataStream): string { @@ -757,9 +763,9 @@ const updateExistingDataStream = async ({ let lifecycle: any; try { - const simulateResult = await retryTransientEsErrors(() => + const simulateResult = await retryTransientEsErrors(async () => esClient.indices.simulateTemplate({ - name: dataStreamNameToIndexTemplateName(dataStreamName), + name: await getIndexTemplate(esClient, dataStreamName), }) ); diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node_context_menu.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node_context_menu.tsx index 1aef6ff563192..f27c4e8f2aba4 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node_context_menu.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/waffle/node_context_menu.tsx @@ -78,7 +78,7 @@ export const NodeContextMenu: React.FC = withTheme const nodeDetailMenuItemLinkProps = useLinkProps({ ...getNodeDetailUrl({ - assetType: node.type, + assetType: nodeType, assetId: node.id, search: { from: nodeDetailFrom, @@ -171,7 +171,10 @@ export const NodeContextMenu: React.FC = withTheme )} - + diff --git a/x-pack/plugins/infra/server/features.ts b/x-pack/plugins/infra/server/features.ts index 57a9653816e80..5e6f809645ac1 100644 --- a/x-pack/plugins/infra/server/features.ts +++ b/x-pack/plugins/infra/server/features.ts @@ -8,8 +8,9 @@ import { i18n } from '@kbn/i18n'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { logViewSavedObjectName } from '@kbn/logs-shared-plugin/server'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; +import { ES_QUERY_ID } from '@kbn/rule-data-utils'; import { metricsDataSourceSavedObjectName } from '@kbn/metrics-data-access-plugin/server'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; import { LOG_DOCUMENT_COUNT_RULE_TYPE_ID } from '../common/alerting/logs/log_threshold/types'; import { METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, @@ -21,6 +22,7 @@ import { infraSourceConfigurationSavedObjectName } from './lib/sources/saved_obj const metricRuleTypes = [ METRIC_THRESHOLD_ALERT_TYPE_ID, METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, + ES_QUERY_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, ]; @@ -83,7 +85,11 @@ export const METRICS_FEATURE = { }, }; -const logsRuleTypes = [LOG_DOCUMENT_COUNT_RULE_TYPE_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID]; +const logsRuleTypes = [ + LOG_DOCUMENT_COUNT_RULE_TYPE_ID, + ES_QUERY_ID, + OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, +]; export const LOGS_FEATURE = { id: LOGS_FEATURE_ID, diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx index c80a84c5e1f4a..03466cd87a16b 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/index_input.tsx @@ -111,15 +111,34 @@ export function useIndexInput({ inferrer }: { inferrer: InferrerType }) { ); useEffect( function loadDataViewListItems() { - dataViews.getIdsWithTitle().then((items) => { + async function getFilteredDataViewListItems() { + const dataViewIds = await dataViews.getIdsWithTitle(); + const supportedFieldTypes = inferrer.getSupportedFieldTypes(); + + const hasTextField = async ({ id }: { id: string }) => { + const dataView = await dataViews.get(id); + + return dataView.fields + .getAll() + .some((dvField) => + supportedFieldTypes.some((esType) => dvField.esTypes?.includes(esType)) + ); + }; + + const allPromises = dataViewIds.map(hasTextField); + const resolvedPromises = await Promise.all(allPromises); + const filteredDataViews = dataViewIds.filter((value, index) => resolvedPromises[index]); + setDataViewListItems( - items + filteredDataViews .sort((a, b) => a.title.localeCompare(b.title)) .map(({ id, title }) => ({ text: title, value: id })) ); - }); + } + + getFilteredDataViewListItems(); }, - [dataViews] + [dataViews, inferrer] ); useEffect( diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_base.ts b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_base.ts index 5954ed710c5f2..8dc0bf6b88815 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_base.ts +++ b/x-pack/plugins/ml/public/application/model_management/test_models/models/inference_base.ts @@ -11,6 +11,7 @@ import { i18n } from '@kbn/i18n'; import { map } from 'rxjs/operators'; import { SupportedPytorchTasksType } from '@kbn/ml-trained-models-utils'; +import { ES_FIELD_TYPES } from '@kbn/field-types'; import type { MLHttpFetchError } from '@kbn/ml-error-utils'; import { trainedModelsApiProvider } from '../../../services/ml_api_service/trained_models'; import { getInferenceInfoComponent } from './inference_info'; @@ -70,6 +71,7 @@ export abstract class InferenceBase { private runningState$ = new BehaviorSubject(RUNNING_STATE.STOPPED); private isValid$ = new BehaviorSubject(false); private pipeline$ = new BehaviorSubject({}); + private supportedFieldTypes: ES_FIELD_TYPES[] = [ES_FIELD_TYPES.TEXT]; protected readonly info: string[] = []; @@ -241,6 +243,10 @@ export abstract class InferenceBase { return this.pipeline$.getValue(); } + public getSupportedFieldTypes(): ES_FIELD_TYPES[] { + return this.supportedFieldTypes; + } + protected getBasicProcessors( inferenceConfigOverrides?: InferenceOptions ): estypes.IngestProcessorContainer[] { diff --git a/x-pack/plugins/observability/common/constants.ts b/x-pack/plugins/observability/common/constants.ts index 97f4341168fd9..11f23808d8fa3 100644 --- a/x-pack/plugins/observability/common/constants.ts +++ b/x-pack/plugins/observability/common/constants.ts @@ -8,9 +8,9 @@ import { i18n } from '@kbn/i18n'; import { AlertConsumers } from '@kbn/rule-data-utils'; import type { ValidFeatureId } from '@kbn/rule-data-utils'; +import type { RuleCreationValidConsumer } from '@kbn/triggers-actions-ui-plugin/public'; export const SLO_BURN_RATE_RULE_TYPE_ID = 'slo.rules.burnRate'; -export const OBSERVABILITY_THRESHOLD_RULE_TYPE_ID = 'observability.rules.custom_threshold'; export const INVALID_EQUATION_REGEX = /[^A-Z|+|\-|\s|\d+|\.|\(|\)|\/|\*|>|<|=|\?|\:|&|\!|\|]+/g; export const ALERT_STATUS_ALL = 'all'; @@ -56,3 +56,8 @@ export const observabilityAlertFeatureIds: ValidFeatureId[] = [ AlertConsumers.SLO, AlertConsumers.OBSERVABILITY, ]; + +export const observabilityRuleCreationValidConsumers: RuleCreationValidConsumer[] = [ + AlertConsumers.INFRASTRUCTURE, + AlertConsumers.LOGS, +]; diff --git a/x-pack/plugins/observability/public/components/custom_threshold/components/alert_flyout.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/alert_flyout.tsx index 824d5b41d14ca..ba39bcd7c4861 100644 --- a/x-pack/plugins/observability/public/components/custom_threshold/components/alert_flyout.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/alert_flyout.tsx @@ -6,12 +6,14 @@ */ import React, { useCallback, useContext, useMemo } from 'react'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '../../../../common/constants'; + +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { MetricsExplorerSeries } from '../../../../common/custom_threshold_rule/metrics_explorer'; import { TriggerActionsContext } from './triggers_actions_context'; import { useAlertPrefillContext } from '../helpers/use_alert_prefill'; import { MetricsExplorerOptions } from '../hooks/use_metrics_explorer_options'; +import { observabilityRuleCreationValidConsumers } from '../../../../common/constants'; interface Props { visible?: boolean; @@ -28,7 +30,7 @@ export function AlertFlyout(props: Props) { () => triggersActionsUI && triggersActionsUI.getAddRuleFlyout({ - consumer: 'alerts', + consumer: 'logs', onClose: onCloseFlyout, canChangeTrigger: false, ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, @@ -36,6 +38,7 @@ export function AlertFlyout(props: Props) { currentOptions: props.options, series: props.series, }, + validConsumers: observabilityRuleCreationValidConsumers, }), // eslint-disable-next-line react-hooks/exhaustive-deps [triggersActionsUI, onCloseFlyout] diff --git a/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts b/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts index d72118182ed65..834cc31f39d2e 100644 --- a/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts +++ b/x-pack/plugins/observability/public/hooks/use_get_filtered_rule_types.ts @@ -6,10 +6,13 @@ */ import { useMemo } from 'react'; +import { ES_QUERY_ID } from '@kbn/rule-data-utils'; import { usePluginContext } from './use_plugin_context'; export function useGetFilteredRuleTypes() { const { observabilityRuleTypeRegistry } = usePluginContext(); - return useMemo(() => observabilityRuleTypeRegistry.list(), [observabilityRuleTypeRegistry]); + return useMemo(() => { + return [...observabilityRuleTypeRegistry.list(), ES_QUERY_ID]; + }, [observabilityRuleTypeRegistry]); } diff --git a/x-pack/plugins/observability/public/pages/alerts/alerts.tsx b/x-pack/plugins/observability/public/pages/alerts/alerts.tsx index afd71d888143e..27ae07cbf768d 100644 --- a/x-pack/plugins/observability/public/pages/alerts/alerts.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/alerts.tsx @@ -19,6 +19,7 @@ import { useKibana } from '../../utils/kibana_react'; import { useHasData } from '../../hooks/use_has_data'; import { usePluginContext } from '../../hooks/use_plugin_context'; import { useTimeBuckets } from '../../hooks/use_time_buckets'; +import { useGetFilteredRuleTypes } from '../../hooks/use_get_filtered_rule_types'; import { useToasts } from '../../hooks/use_toast'; import { LoadingObservability } from '../../components/loading_observability'; import { renderRuleStats, RuleStatsState } from './components/rule_stats'; @@ -33,7 +34,6 @@ import { getAlertSummaryTimeRange } from '../../utils/alert_summary_widget'; import { observabilityAlertFeatureIds } from '../../../common/constants'; import { ALERTS_URL_STORAGE_KEY } from '../../../common/constants'; import { HeaderMenu } from '../overview/components/header_menu/header_menu'; -import { useGetFilteredRuleTypes } from '../../hooks/use_get_filtered_rule_types'; const ALERTS_SEARCH_BAR_ID = 'alerts-search-bar-o11y'; const ALERTS_PER_PAGE = 50; @@ -130,6 +130,7 @@ function InternalAlertsPage() { const response = await loadRuleAggregations({ http, typesFilter: filteredRuleTypes, + filterConsumers: observabilityAlertFeatureIds, }); const { ruleExecutionStatus, ruleMutedStatus, ruleEnabledStatus, ruleSnoozedStatus } = response; diff --git a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx index 1ba58e56aa77e..567bb32b07f8c 100644 --- a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx @@ -20,8 +20,7 @@ import { CaseAttachmentsWithoutOwner } from '@kbn/cases-plugin/public'; import { AttachmentType } from '@kbn/cases-plugin/common'; import { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { TimelineNonEcsData } from '@kbn/timelines-plugin/common'; - -import { ALERT_RULE_TYPE_ID } from '@kbn/rule-data-utils'; +import { ALERT_RULE_TYPE_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { useKibana } from '../../../utils/kibana_react'; import { useGetUserCasesPermissions } from '../../../hooks/use_get_user_cases_permissions'; @@ -32,7 +31,6 @@ import { RULE_DETAILS_PAGE_ID } from '../../rule_details/constants'; import type { ObservabilityRuleTypeRegistry } from '../../..'; import type { ConfigSchema } from '../../../plugin'; import type { TopAlert } from '../../../typings/alerts'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '../../../../common/constants'; const ALERT_DETAILS_PAGE_ID = 'alert-details-o11y'; diff --git a/x-pack/plugins/observability/public/pages/rule_details/rule_details.tsx b/x-pack/plugins/observability/public/pages/rule_details/rule_details.tsx index 6e14506604a61..5585ccdeb7099 100644 --- a/x-pack/plugins/observability/public/pages/rule_details/rule_details.tsx +++ b/x-pack/plugins/observability/public/pages/rule_details/rule_details.tsx @@ -17,6 +17,7 @@ import { useKibana } from '../../utils/kibana_react'; import { usePluginContext } from '../../hooks/use_plugin_context'; import { useFetchRule } from '../../hooks/use_fetch_rule'; import { useFetchRuleTypes } from '../../hooks/use_fetch_rule_types'; +import { useGetFilteredRuleTypes } from '../../hooks/use_get_filtered_rule_types'; import { PageTitle } from './components/page_title'; import { DeleteConfirmationModal } from './components/delete_confirmation_modal'; import { CenterJustifiedSpinner } from '../../components/center_justified_spinner'; @@ -39,7 +40,6 @@ import { } from '../../utils/alert_summary_widget'; import type { AlertStatus } from '../../../common/typings'; import { HeaderMenu } from '../overview/components/header_menu/header_menu'; -import { useGetFilteredRuleTypes } from '../../hooks/use_get_filtered_rule_types'; export type TabId = typeof RULE_DETAILS_ALERTS_TAB | typeof RULE_DETAILS_EXECUTION_TAB; diff --git a/x-pack/plugins/observability/public/pages/rules/rules.tsx b/x-pack/plugins/observability/public/pages/rules/rules.tsx index af3eba0b67636..700f348842757 100644 --- a/x-pack/plugins/observability/public/pages/rules/rules.tsx +++ b/x-pack/plugins/observability/public/pages/rules/rules.tsx @@ -18,6 +18,7 @@ import { RULES_LOGS_PATH, RULES_PATH } from '../../../common/locators/paths'; import { useKibana } from '../../utils/kibana_react'; import { usePluginContext } from '../../hooks/use_plugin_context'; import { useGetFilteredRuleTypes } from '../../hooks/use_get_filtered_rule_types'; +import { observabilityRuleCreationValidConsumers } from '../../../common/constants'; import { HeaderMenu } from '../overview/components/header_menu/header_menu'; import { RulesTab } from './rules_tab'; @@ -141,6 +142,7 @@ export function RulesPage({ activeTab = RULES_TAB_NAME }: RulesPageProps) { { setAddRuleFlyoutVisibility(false); }} @@ -148,6 +150,7 @@ export function RulesPage({ activeTab = RULES_TAB_NAME }: RulesPageProps) { setRefresh(new Date()); return Promise.resolve(); }} + useRuleProducer={true} /> )} diff --git a/x-pack/plugins/observability/public/pages/rules/rules_tab.tsx b/x-pack/plugins/observability/public/pages/rules/rules_tab.tsx index 317091e81fb29..a2939bb4876e9 100644 --- a/x-pack/plugins/observability/public/pages/rules/rules_tab.tsx +++ b/x-pack/plugins/observability/public/pages/rules/rules_tab.tsx @@ -11,6 +11,7 @@ import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import { RuleStatus } from '@kbn/triggers-actions-ui-plugin/public'; import { useKibana } from '../../utils/kibana_react'; import { useGetFilteredRuleTypes } from '../../hooks/use_get_filtered_rule_types'; +import { observabilityAlertFeatureIds } from '../../../common/constants'; interface RulesTabProps { setRefresh: React.Dispatch>; @@ -73,6 +74,7 @@ export function RulesTab({ setRefresh, stateRefresh }: RulesTabProps) { return ( { private logger: Logger; diff --git a/x-pack/plugins/observability/server/services/slo/slo_installer.ts b/x-pack/plugins/observability/server/services/slo/slo_installer.ts index 44c2a7752e315..bdee31f62912d 100644 --- a/x-pack/plugins/observability/server/services/slo/slo_installer.ts +++ b/x-pack/plugins/observability/server/services/slo/slo_installer.ts @@ -22,7 +22,7 @@ export class DefaultSLOInstaller implements SLOInstaller { ) {} public async install() { - if (this.isInstalling || process.env.CI) { + if (this.isInstalling) { return; } this.isInstalling = true; diff --git a/x-pack/plugins/observability_onboarding/server/plugin.ts b/x-pack/plugins/observability_onboarding/server/plugin.ts index 6ed20935398ab..44aac3df2e5a4 100644 --- a/x-pack/plugins/observability_onboarding/server/plugin.ts +++ b/x-pack/plugins/observability_onboarding/server/plugin.ts @@ -46,7 +46,10 @@ export class ObservabilityOnboardingPlugin } public setup( - core: CoreSetup, + core: CoreSetup< + ObservabilityOnboardingPluginStartDependencies, + ObservabilityOnboardingPluginStart + >, plugins: ObservabilityOnboardingPluginSetupDependencies ) { this.logger.debug('observability_onboarding: Setup'); diff --git a/x-pack/plugins/observability_onboarding/server/routes/logs/route.ts b/x-pack/plugins/observability_onboarding/server/routes/logs/route.ts index 085f7cece0d8a..a11dcd918f3ed 100644 --- a/x-pack/plugins/observability_onboarding/server/routes/logs/route.ts +++ b/x-pack/plugins/observability_onboarding/server/routes/logs/route.ts @@ -40,9 +40,23 @@ const installShipperSetupRoute = createObservabilityOnboardingServerRoute({ scriptDownloadUrl: string; elasticAgentVersion: string; }> { - const { core, plugins } = resources; + const { core, plugins, kibanaVersion } = resources; const coreStart = await core.start(); + const fleetPluginStart = await plugins.fleet.start(); + const agentClient = fleetPluginStart.agentService.asInternalUser; + + // If undefined, we will follow fleet's strategy to select latest available version: + // for serverless we will use the latest published version, for statefull we will use + // current Kibana version. If false, irrespective of fleet flags and logic, we are + // explicitly deciding to not append the current version. + const includeCurrentVersion = kibanaVersion.endsWith('-SNAPSHOT') + ? false + : undefined; + + const elasticAgentVersion = + await agentClient.getLatestAgentAvailableVersion(includeCurrentVersion); + const kibanaUrl = core.setup.http.basePath.publicBaseUrl ?? // priority given to server.publicBaseUrl plugins.cloud?.setup?.kibanaUrl ?? // then cloud id @@ -53,7 +67,7 @@ const installShipperSetupRoute = createObservabilityOnboardingServerRoute({ return { apiEndpoint, scriptDownloadUrl, - elasticAgentVersion: '8.9.1', + elasticAgentVersion, }; }, }); diff --git a/x-pack/plugins/observability_onboarding/server/types.ts b/x-pack/plugins/observability_onboarding/server/types.ts index 93113a5043904..6823a0087c950 100644 --- a/x-pack/plugins/observability_onboarding/server/types.ts +++ b/x-pack/plugins/observability_onboarding/server/types.ts @@ -11,6 +11,10 @@ import { PluginSetup as DataPluginSetup, PluginStart as DataPluginStart, } from '@kbn/data-plugin/server'; +import { + FleetSetupContract, + FleetStartContract, +} from '@kbn/fleet-plugin/server'; import { ObservabilityPluginSetup } from '@kbn/observability-plugin/server'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; @@ -19,6 +23,7 @@ export interface ObservabilityOnboardingPluginSetupDependencies { observability: ObservabilityPluginSetup; cloud: CloudSetup; usageCollection: UsageCollectionSetup; + fleet: FleetSetupContract; } export interface ObservabilityOnboardingPluginStartDependencies { @@ -26,6 +31,7 @@ export interface ObservabilityOnboardingPluginStartDependencies { observability: undefined; cloud: CloudStart; usageCollection: undefined; + fleet: FleetStartContract; } // eslint-disable-next-line @typescript-eslint/no-empty-interface diff --git a/x-pack/plugins/observability_onboarding/tsconfig.json b/x-pack/plugins/observability_onboarding/tsconfig.json index 4e1e2bacdf437..4730fbe256009 100644 --- a/x-pack/plugins/observability_onboarding/tsconfig.json +++ b/x-pack/plugins/observability_onboarding/tsconfig.json @@ -32,7 +32,8 @@ "@kbn/use-tracked-promise", "@kbn/custom-integrations", "@kbn/share-plugin", - "@kbn/deeplinks-observability" + "@kbn/deeplinks-observability", + "@kbn/fleet-plugin", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/observability_shared/kibana.jsonc b/x-pack/plugins/observability_shared/kibana.jsonc index f4e97551031bf..e1d5b14d23932 100644 --- a/x-pack/plugins/observability_shared/kibana.jsonc +++ b/x-pack/plugins/observability_shared/kibana.jsonc @@ -7,7 +7,7 @@ "server": false, "browser": true, "configPath": ["xpack", "observability_shared"], - "requiredPlugins": ["cases", "guidedOnboarding", "uiActions", "embeddable"], + "requiredPlugins": ["cases", "guidedOnboarding", "uiActions", "embeddable", "share"], "optionalPlugins": [], "requiredBundles": ["data", "inspector", "kibanaReact", "kibanaUtils"], "extraPublicDirs": ["common"] diff --git a/x-pack/plugins/profiling/public/locators/flamegraph_locator.ts b/x-pack/plugins/observability_shared/public/locators/profiling/flamegraph_locator.ts similarity index 100% rename from x-pack/plugins/profiling/public/locators/flamegraph_locator.ts rename to x-pack/plugins/observability_shared/public/locators/profiling/flamegraph_locator.ts diff --git a/x-pack/plugins/profiling/public/locators/stacktraces_locator.ts b/x-pack/plugins/observability_shared/public/locators/profiling/stacktraces_locator.ts similarity index 100% rename from x-pack/plugins/profiling/public/locators/stacktraces_locator.ts rename to x-pack/plugins/observability_shared/public/locators/profiling/stacktraces_locator.ts diff --git a/x-pack/plugins/profiling/public/locators/topn_functions_locator.ts b/x-pack/plugins/observability_shared/public/locators/profiling/topn_functions_locator.ts similarity index 100% rename from x-pack/plugins/profiling/public/locators/topn_functions_locator.ts rename to x-pack/plugins/observability_shared/public/locators/profiling/topn_functions_locator.ts diff --git a/x-pack/plugins/observability_shared/public/plugin.ts b/x-pack/plugins/observability_shared/public/plugin.ts index b2f886a2368d7..550259184dfb1 100644 --- a/x-pack/plugins/observability_shared/public/plugin.ts +++ b/x-pack/plugins/observability_shared/public/plugin.ts @@ -6,15 +6,22 @@ */ import { BehaviorSubject } from 'rxjs'; - -import type { CoreStart, Plugin } from '@kbn/core/public'; +import type { CoreStart, Plugin, CoreSetup } from '@kbn/core/public'; import type { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/public'; import { CasesUiStart } from '@kbn/cases-plugin/public'; import { SpacesPluginStart } from '@kbn/spaces-plugin/public'; import type { EmbeddableStart } from '@kbn/embeddable-plugin/public'; +import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import { createNavigationRegistry } from './components/page_template/helpers/navigation_registry'; import { createLazyObservabilityPageTemplate } from './components/page_template'; import { updateGlobalNavigation } from './services/update_global_navigation'; +import { FlamegraphLocatorDefinition } from './locators/profiling/flamegraph_locator'; +import { TopNFunctionsLocatorDefinition } from './locators/profiling/topn_functions_locator'; +import { StacktracesLocatorDefinition } from './locators/profiling/stacktraces_locator'; + +export interface ObservabilitySharedSetup { + share: SharePluginSetup; +} export interface ObservabilitySharedStart { spaces?: SpacesPluginStart; @@ -22,6 +29,7 @@ export interface ObservabilitySharedStart { guidedOnboarding: GuidedOnboardingPluginStart; setIsSidebarEnabled: (isEnabled: boolean) => void; embeddable: EmbeddableStart; + share: SharePluginStart; } export type ObservabilitySharedPluginSetup = ReturnType; @@ -35,8 +43,21 @@ export class ObservabilitySharedPlugin implements Plugin { this.isSidebarEnabled$ = new BehaviorSubject(true); } - public setup() { + public setup(coreSetup: CoreSetup, pluginsSetup: ObservabilitySharedSetup) { return { + locators: { + profiling: { + flamegraphLocator: pluginsSetup.share.url.locators.create( + new FlamegraphLocatorDefinition() + ), + topNFunctionsLocator: pluginsSetup.share.url.locators.create( + new TopNFunctionsLocatorDefinition() + ), + stacktracesLocator: pluginsSetup.share.url.locators.create( + new StacktracesLocatorDefinition() + ), + }, + }, navigation: { registerSections: this.navigationRegistry.registerSections, }, diff --git a/x-pack/plugins/observability_shared/tsconfig.json b/x-pack/plugins/observability_shared/tsconfig.json index f5ca4094ee961..ee7efc921b6aa 100644 --- a/x-pack/plugins/observability_shared/tsconfig.json +++ b/x-pack/plugins/observability_shared/tsconfig.json @@ -33,7 +33,9 @@ "@kbn/kibana-utils-plugin", "@kbn/shared-ux-router", "@kbn/embeddable-plugin", - "@kbn/profiling-utils" + "@kbn/profiling-utils", + "@kbn/utility-types", + "@kbn/share-plugin" ], "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/profiling/public/plugin.tsx b/x-pack/plugins/profiling/public/plugin.tsx index 5534519e93877..d888ba6ce9784 100644 --- a/x-pack/plugins/profiling/public/plugin.tsx +++ b/x-pack/plugins/profiling/public/plugin.tsx @@ -17,13 +17,10 @@ import type { NavigationSection } from '@kbn/observability-shared-plugin/public' import type { Location } from 'history'; import { BehaviorSubject, combineLatest, from, map } from 'rxjs'; import { registerEmbeddables } from './embeddables/register_embeddables'; -import { FlamegraphLocatorDefinition } from './locators/flamegraph_locator'; -import { StacktracesLocatorDefinition } from './locators/stacktraces_locator'; -import { TopNFunctionsLocatorDefinition } from './locators/topn_functions_locator'; import { getServices } from './services'; import type { ProfilingPluginPublicSetupDeps, ProfilingPluginPublicStartDeps } from './types'; -export type ProfilingPluginSetup = ReturnType; +export type ProfilingPluginSetup = void; export type ProfilingPluginStart = void; export class ProfilingPlugin implements Plugin { @@ -133,33 +130,7 @@ export class ProfilingPlugin implements Plugin { registerEmbeddables(pluginsSetup.embeddable); - return { - locators: { - flamegraphLocator: pluginsSetup.share.url.locators.create( - new FlamegraphLocatorDefinition() - ), - topNFunctionsLocator: pluginsSetup.share.url.locators.create( - new TopNFunctionsLocatorDefinition() - ), - stacktracesLocator: pluginsSetup.share.url.locators.create( - new StacktracesLocatorDefinition() - ), - }, - hasSetup: async () => { - try { - const response = (await coreSetup.http.get('/internal/profiling/setup/es_resources')) as { - has_setup: boolean; - has_data: boolean; - unauthorized: boolean; - }; - - return response.has_setup; - } catch (e) { - // If any error happens while checking return as it has not been set up - return false; - } - }, - }; + return {}; } public start(core: CoreStart) { diff --git a/x-pack/plugins/profiling/server/lib/setup/cluster_settings.ts b/x-pack/plugins/profiling/server/lib/setup/cluster_settings.ts index dde0b33da6291..3d838bc7a5c31 100644 --- a/x-pack/plugins/profiling/server/lib/setup/cluster_settings.ts +++ b/x-pack/plugins/profiling/server/lib/setup/cluster_settings.ts @@ -5,22 +5,8 @@ * 2.0. */ +import { MAX_BUCKETS } from '@kbn/profiling-data-access-plugin/common'; import { ProfilingSetupOptions } from './types'; -import { PartialSetupState } from '../../../common/setup'; - -const MAX_BUCKETS = 150000; - -export async function validateMaximumBuckets({ - client, -}: ProfilingSetupOptions): Promise { - const settings = await client.getEsClient().cluster.getSettings({}); - const maxBuckets = settings.persistent.search?.max_buckets; - return { - settings: { - configured: maxBuckets === MAX_BUCKETS.toString(), - }, - }; -} export async function setMaximumBuckets({ client }: ProfilingSetupOptions) { await client.getEsClient().cluster.putSettings({ @@ -32,21 +18,6 @@ export async function setMaximumBuckets({ client }: ProfilingSetupOptions) { }); } -export async function validateResourceManagement({ - client, -}: ProfilingSetupOptions): Promise { - const statusResponse = await client.profilingStatus(); - return { - resource_management: { - enabled: statusResponse.resource_management.enabled, - }, - resources: { - created: statusResponse.resources.created, - pre_8_9_1_data: statusResponse.resources.pre_8_9_1_data, - }, - }; -} - export async function enableResourceManagement({ client }: ProfilingSetupOptions) { await client.getEsClient().cluster.putSettings({ persistent: { diff --git a/x-pack/plugins/profiling/server/lib/setup/fleet_policies.ts b/x-pack/plugins/profiling/server/lib/setup/fleet_policies.ts index ccba170b5fed9..326ebc19dd9f1 100644 --- a/x-pack/plugins/profiling/server/lib/setup/fleet_policies.ts +++ b/x-pack/plugins/profiling/server/lib/setup/fleet_policies.ts @@ -5,53 +5,18 @@ * 2.0. */ -import { SavedObjectsClientContract } from '@kbn/core/server'; -import { PackagePolicyClient } from '@kbn/fleet-plugin/server'; import { fetchFindLatestPackageOrThrow } from '@kbn/fleet-plugin/server/services/epm/registry'; +import { + COLLECTOR_PACKAGE_POLICY_NAME, + ELASTIC_CLOUD_APM_POLICY, + SYMBOLIZER_PACKAGE_POLICY_NAME, + getApmPolicy, +} from '@kbn/profiling-data-access-plugin/common'; import { omit } from 'lodash'; import { PackageInputType } from '../..'; -import { PartialSetupState } from '../../../common/setup'; -import { ELASTIC_CLOUD_APM_POLICY, getApmPolicy } from './get_apm_policy'; import { ProfilingSetupOptions } from './types'; const CLOUD_AGENT_POLICY_ID = 'policy-elastic-agent-on-cloud'; -const COLLECTOR_PACKAGE_POLICY_NAME = 'elastic-universal-profiling-collector'; -const SYMBOLIZER_PACKAGE_POLICY_NAME = 'elastic-universal-profiling-symbolizer'; - -async function getPackagePolicy({ - soClient, - packagePolicyClient, - packageName, -}: { - packagePolicyClient: PackagePolicyClient; - soClient: SavedObjectsClientContract; - packageName: string; -}) { - const packagePolicies = await packagePolicyClient.list(soClient, {}); - return packagePolicies.items.find((pkg) => pkg.name === packageName); -} - -export async function getCollectorPolicy({ - soClient, - packagePolicyClient, -}: { - packagePolicyClient: PackagePolicyClient; - soClient: SavedObjectsClientContract; -}) { - return getPackagePolicy({ - soClient, - packagePolicyClient, - packageName: COLLECTOR_PACKAGE_POLICY_NAME, - }); -} - -export async function validateCollectorPackagePolicy({ - soClient, - packagePolicyClient, -}: ProfilingSetupOptions): Promise { - const collectorPolicy = await getCollectorPolicy({ soClient, packagePolicyClient }); - return { policies: { collector: { installed: !!collectorPolicy } } }; -} export function generateSecretToken() { let result = ''; @@ -126,28 +91,6 @@ export async function createCollectorPackagePolicy({ }); } -export async function getSymbolizerPolicy({ - soClient, - packagePolicyClient, -}: { - packagePolicyClient: PackagePolicyClient; - soClient: SavedObjectsClientContract; -}) { - return getPackagePolicy({ - soClient, - packagePolicyClient, - packageName: SYMBOLIZER_PACKAGE_POLICY_NAME, - }); -} - -export async function validateSymbolizerPackagePolicy({ - soClient, - packagePolicyClient, -}: ProfilingSetupOptions): Promise { - const symbolizerPackagePolicy = await getSymbolizerPolicy({ soClient, packagePolicyClient }); - return { policies: { symbolizer: { installed: !!symbolizerPackagePolicy } } }; -} - export async function createSymbolizerPackagePolicy({ client, soClient, @@ -185,29 +128,6 @@ export async function createSymbolizerPackagePolicy({ }); } -export async function validateProfilingInApmPackagePolicy({ - soClient, - packagePolicyClient, -}: ProfilingSetupOptions): Promise { - try { - const apmPolicy = await getApmPolicy({ packagePolicyClient, soClient }); - return { - policies: { - apm: { - profilingEnabled: !!( - apmPolicy && apmPolicy?.inputs[0].config?.['apm-server'].value?.profiling - ), - }, - }, - }; - } catch (e) { - // In case apm integration is not available ignore the error and return as profiling is not enabled on the integration - return { - policies: { apm: { profilingEnabled: false } }, - }; - } -} - export async function removeProfilingFromApmPackagePolicy({ client, soClient, diff --git a/x-pack/plugins/profiling/server/lib/setup/get_setup_instructions.ts b/x-pack/plugins/profiling/server/lib/setup/get_setup_instructions.ts index f21098492e8e8..64b857f93de27 100644 --- a/x-pack/plugins/profiling/server/lib/setup/get_setup_instructions.ts +++ b/x-pack/plugins/profiling/server/lib/setup/get_setup_instructions.ts @@ -8,7 +8,7 @@ import { SavedObjectsClientContract } from '@kbn/core/server'; import { PackagePolicyClient } from '@kbn/fleet-plugin/server'; import { fetchFindLatestPackageOrThrow } from '@kbn/fleet-plugin/server/services/epm/registry'; -import { getCollectorPolicy, getSymbolizerPolicy } from './fleet_policies'; +import { getCollectorPolicy, getSymbolizerPolicy } from '@kbn/profiling-data-access-plugin/common'; export interface SetupDataCollectionInstructions { collector: { diff --git a/x-pack/plugins/profiling/server/lib/setup/security_role.ts b/x-pack/plugins/profiling/server/lib/setup/security_role.ts index 1827bf73e5d2a..b578c2ef2cff6 100644 --- a/x-pack/plugins/profiling/server/lib/setup/security_role.ts +++ b/x-pack/plugins/profiling/server/lib/setup/security_role.ts @@ -5,24 +5,11 @@ * 2.0. */ +import { + METADATA_VERSION, + PROFILING_READER_ROLE_NAME, +} from '@kbn/profiling-data-access-plugin/common'; import { ProfilingSetupOptions } from './types'; -import { PartialSetupState } from '../../../common/setup'; - -const PROFILING_READER_ROLE_NAME = 'profiling-reader'; -const METADATA_VERSION = 1; - -export async function validateSecurityRole({ - client, -}: ProfilingSetupOptions): Promise { - const esClient = client.getEsClient(); - const roles = await esClient.security.getRole(); - const profilingRole = roles[PROFILING_READER_ROLE_NAME]; - return { - permissions: { - configured: !!profilingRole && profilingRole.metadata.version === METADATA_VERSION, - }, - }; -} export async function setSecurityRole({ client }: ProfilingSetupOptions) { const esClient = client.getEsClient(); diff --git a/x-pack/plugins/profiling/server/routes/setup.ts b/x-pack/plugins/profiling/server/routes/setup.ts index 1ce7d8d056201..45a5f9d691307 100644 --- a/x-pack/plugins/profiling/server/routes/setup.ts +++ b/x-pack/plugins/profiling/server/routes/setup.ts @@ -8,29 +8,14 @@ import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import { RouteRegisterParameters } from '.'; import { getRoutePaths } from '../../common'; -import { - areResourcesSetup, - createDefaultSetupState, - mergePartialSetupStates, -} from '../../common/setup'; -import { - enableResourceManagement, - setMaximumBuckets, - validateMaximumBuckets, - validateResourceManagement, -} from '../lib/setup/cluster_settings'; +import { enableResourceManagement, setMaximumBuckets } from '../lib/setup/cluster_settings'; import { createCollectorPackagePolicy, createSymbolizerPackagePolicy, removeProfilingFromApmPackagePolicy, - validateCollectorPackagePolicy, - validateProfilingInApmPackagePolicy, - validateSymbolizerPackagePolicy, } from '../lib/setup/fleet_policies'; import { getSetupInstructions } from '../lib/setup/get_setup_instructions'; -import { hasProfilingData } from '../lib/setup/has_profiling_data'; -import { setSecurityRole, validateSecurityRole } from '../lib/setup/security_role'; -import { ProfilingSetupOptions } from '../lib/setup/types'; +import { setSecurityRole } from '../lib/setup/security_role'; import { handleRouteHandlerError } from '../utils/handle_route_error_handler'; import { getClient } from './compat'; @@ -52,82 +37,15 @@ export function registerSetupRoute({ try { const esClient = await getClient(context); const core = await context.core; - const clientWithDefaultAuth = createProfilingEsClient({ - esClient, - request, - useDefaultAuth: true, - }); - const clientWithProfilingAuth = createProfilingEsClient({ - esClient, - request, - useDefaultAuth: false, - }); - const setupOptions: ProfilingSetupOptions = { - client: clientWithDefaultAuth, - logger, - packagePolicyClient: dependencies.start.fleet.packagePolicyService, + const profilingStatus = await dependencies.start.profilingDataAccess.services.getStatus({ + esClient, soClient: core.savedObjects.client, - spaceId: - dependencies.setup.spaces?.spacesService?.getSpaceId(request) ?? DEFAULT_SPACE_ID, - isCloudEnabled: dependencies.setup.cloud.isCloudEnabled, - config: dependencies.config, - }; - - const state = createDefaultSetupState(); - state.cloud.available = dependencies.setup.cloud.isCloudEnabled; - - if (!state.cloud.available) { - const msg = `Elastic Cloud is required to set up Elasticsearch and Fleet for Universal Profiling`; - logger.error(msg); - return response.custom({ - statusCode: 500, - body: { - message: msg, - }, - }); - } - const verifyFunctions = [ - validateMaximumBuckets, - validateResourceManagement, - validateSecurityRole, - validateCollectorPackagePolicy, - validateSymbolizerPackagePolicy, - validateProfilingInApmPackagePolicy, - ]; - - const partialStates = await Promise.all([ - ...verifyFunctions.map((fn) => fn(setupOptions)), - hasProfilingData({ - ...setupOptions, - client: clientWithProfilingAuth, - }), - ]); - - const mergedState = mergePartialSetupStates(state, partialStates); - - return response.ok({ - body: { - has_setup: areResourcesSetup(mergedState), - has_data: mergedState.data.available, - pre_8_9_1_data: mergedState.resources.pre_8_9_1_data, - }, + spaceId: dependencies.setup.spaces?.spacesService?.getSpaceId(request), }); + + return response.ok({ body: profilingStatus }); } catch (error) { - // We cannot fully check the status of all resources - // to make sure Profiling has been set up and has data - // for users with monitor privileges. This privileges - // is needed to call the profiling ES plugin for example. - if (error?.meta?.statusCode === 403) { - return response.ok({ - body: { - has_setup: true, - pre_8_9_1_data: false, - has_data: true, - unauthorized: true, - }, - }); - } return handleRouteHandlerError({ error, logger, @@ -146,6 +64,19 @@ export function registerSetupRoute({ }, async (context, request, response) => { try { + const isCloudEnabled = dependencies.setup.cloud.isCloudEnabled; + + if (!isCloudEnabled) { + const msg = `Elastic Cloud is required to set up Elasticsearch and Fleet for Universal Profiling`; + logger.error(msg); + return response.custom({ + statusCode: 500, + body: { + message: msg, + }, + }); + } + const esClient = await getClient(context); const core = await context.core; const clientWithDefaultAuth = createProfilingEsClient({ @@ -153,53 +84,37 @@ export function registerSetupRoute({ request, useDefaultAuth: true, }); - const setupOptions: ProfilingSetupOptions = { + const clientWithProfilingAuth = createProfilingEsClient({ + esClient, + request, + useDefaultAuth: false, + }); + + const commonParams = { client: clientWithDefaultAuth, logger, packagePolicyClient: dependencies.start.fleet.packagePolicyService, soClient: core.savedObjects.client, spaceId: dependencies.setup.spaces?.spacesService?.getSpaceId(request) ?? DEFAULT_SPACE_ID, - isCloudEnabled: dependencies.setup.cloud.isCloudEnabled, - config: dependencies.config, + isCloudEnabled, }; - const state = createDefaultSetupState(); - state.cloud.available = dependencies.setup.cloud.isCloudEnabled; - - if (!state.cloud.available) { - const msg = `Elastic Cloud is required to set up Elasticsearch and Fleet for Universal Profiling`; - logger.error(msg); - return response.custom({ - statusCode: 500, - body: { - message: msg, - }, - }); - } - - const partialStates = await Promise.all( - [ - validateResourceManagement, - validateSecurityRole, - validateMaximumBuckets, - validateCollectorPackagePolicy, - validateSymbolizerPackagePolicy, - validateProfilingInApmPackagePolicy, - ].map((fn) => fn(setupOptions)) + const setupState = await dependencies.start.profilingDataAccess.services.getSetupState( + commonParams, + clientWithProfilingAuth ); - const mergedState = mergePartialSetupStates(state, partialStates); const executeAdminFunctions = [ - ...(mergedState.resource_management.enabled ? [] : [enableResourceManagement]), - ...(mergedState.permissions.configured ? [] : [setSecurityRole]), - ...(mergedState.settings.configured ? [] : [setMaximumBuckets]), + ...(setupState.resource_management.enabled ? [] : [enableResourceManagement]), + ...(setupState.permissions.configured ? [] : [setSecurityRole]), + ...(setupState.settings.configured ? [] : [setMaximumBuckets]), ]; const executeViewerFunctions = [ - ...(mergedState.policies.collector.installed ? [] : [createCollectorPackagePolicy]), - ...(mergedState.policies.symbolizer.installed ? [] : [createSymbolizerPackagePolicy]), - ...(mergedState.policies.apm.profilingEnabled + ...(setupState.policies.collector.installed ? [] : [createCollectorPackagePolicy]), + ...(setupState.policies.symbolizer.installed ? [] : [createSymbolizerPackagePolicy]), + ...(setupState.policies.apm.profilingEnabled ? [removeProfilingFromApmPackagePolicy] : []), ]; @@ -208,8 +123,12 @@ export function registerSetupRoute({ return response.ok(); } - await Promise.all(executeAdminFunctions.map((fn) => fn(setupOptions))); - await Promise.all(executeViewerFunctions.map((fn) => fn(setupOptions))); + const setupParams = { + ...commonParams, + config: dependencies.config, + }; + await Promise.all(executeAdminFunctions.map((fn) => fn(setupParams))); + await Promise.all(executeViewerFunctions.map((fn) => fn(setupParams))); if (dependencies.telemetryUsageCounter) { dependencies.telemetryUsageCounter.incrementCounter({ diff --git a/x-pack/plugins/profiling/tsconfig.json b/x-pack/plugins/profiling/tsconfig.json index b5de94dc4f559..60c06119bfa67 100644 --- a/x-pack/plugins/profiling/tsconfig.json +++ b/x-pack/plugins/profiling/tsconfig.json @@ -45,7 +45,6 @@ "@kbn/share-plugin", "@kbn/observability-shared-plugin", "@kbn/licensing-plugin", - "@kbn/utility-types", "@kbn/usage-collection-plugin", "@kbn/observability-ai-assistant-plugin", "@kbn/profiling-data-access-plugin", diff --git a/x-pack/plugins/profiling_data_access/common/cluster_settings.ts b/x-pack/plugins/profiling_data_access/common/cluster_settings.ts new file mode 100644 index 0000000000000..a1e92ab1c996f --- /dev/null +++ b/x-pack/plugins/profiling_data_access/common/cluster_settings.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PartialSetupState, ProfilingSetupOptions } from './setup'; + +export const MAX_BUCKETS = 150000; + +export async function validateMaximumBuckets({ + client, +}: ProfilingSetupOptions): Promise { + const settings = await client.getEsClient().cluster.getSettings({}); + const maxBuckets = settings.persistent.search?.max_buckets; + return { + settings: { + configured: maxBuckets === MAX_BUCKETS.toString(), + }, + }; +} + +export async function validateResourceManagement({ + client, +}: ProfilingSetupOptions): Promise { + const statusResponse = await client.profilingStatus(); + return { + resource_management: { + enabled: statusResponse.resource_management.enabled, + }, + resources: { + created: statusResponse.resources.created, + pre_8_9_1_data: statusResponse.resources.pre_8_9_1_data, + }, + }; +} diff --git a/x-pack/plugins/profiling_data_access/common/fleet_policies.ts b/x-pack/plugins/profiling_data_access/common/fleet_policies.ts new file mode 100644 index 0000000000000..c3c489563b8ac --- /dev/null +++ b/x-pack/plugins/profiling_data_access/common/fleet_policies.ts @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SavedObjectsClientContract } from '@kbn/core/server'; +import type { PackagePolicyClient } from '@kbn/fleet-plugin/server'; +import { getApmPolicy } from './get_apm_policy'; +import { PartialSetupState, ProfilingSetupOptions } from './setup'; + +export const COLLECTOR_PACKAGE_POLICY_NAME = 'elastic-universal-profiling-collector'; +export const SYMBOLIZER_PACKAGE_POLICY_NAME = 'elastic-universal-profiling-symbolizer'; + +async function getPackagePolicy({ + soClient, + packagePolicyClient, + packageName, +}: { + packagePolicyClient: PackagePolicyClient; + soClient: SavedObjectsClientContract; + packageName: string; +}) { + const packagePolicies = await packagePolicyClient.list(soClient, {}); + return packagePolicies.items.find((pkg) => pkg.name === packageName); +} + +export async function getCollectorPolicy({ + soClient, + packagePolicyClient, +}: { + packagePolicyClient: PackagePolicyClient; + soClient: SavedObjectsClientContract; +}) { + return getPackagePolicy({ + soClient, + packagePolicyClient, + packageName: COLLECTOR_PACKAGE_POLICY_NAME, + }); +} + +export async function validateCollectorPackagePolicy({ + soClient, + packagePolicyClient, +}: ProfilingSetupOptions): Promise { + const collectorPolicy = await getCollectorPolicy({ soClient, packagePolicyClient }); + return { policies: { collector: { installed: !!collectorPolicy } } }; +} + +export function generateSecretToken() { + let result = ''; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + + for (let i = 0; i < 16; i++) { + const randomIndex = Math.floor(Math.random() * characters.length); + result += characters.charAt(randomIndex); + } + + return result; +} + +export async function getSymbolizerPolicy({ + soClient, + packagePolicyClient, +}: { + packagePolicyClient: PackagePolicyClient; + soClient: SavedObjectsClientContract; +}) { + return getPackagePolicy({ + soClient, + packagePolicyClient, + packageName: SYMBOLIZER_PACKAGE_POLICY_NAME, + }); +} + +export async function validateSymbolizerPackagePolicy({ + soClient, + packagePolicyClient, +}: ProfilingSetupOptions): Promise { + const symbolizerPackagePolicy = await getSymbolizerPolicy({ soClient, packagePolicyClient }); + return { policies: { symbolizer: { installed: !!symbolizerPackagePolicy } } }; +} + +export async function validateProfilingInApmPackagePolicy({ + soClient, + packagePolicyClient, +}: ProfilingSetupOptions): Promise { + try { + const apmPolicy = await getApmPolicy({ packagePolicyClient, soClient }); + return { + policies: { + apm: { + profilingEnabled: !!( + apmPolicy && apmPolicy?.inputs[0].config?.['apm-server'].value?.profiling + ), + }, + }, + }; + } catch (e) { + // In case apm integration is not available ignore the error and return as profiling is not enabled on the integration + return { + policies: { apm: { profilingEnabled: false } }, + }; + } +} diff --git a/x-pack/plugins/profiling/server/lib/setup/get_apm_policy.ts b/x-pack/plugins/profiling_data_access/common/get_apm_policy.ts similarity index 89% rename from x-pack/plugins/profiling/server/lib/setup/get_apm_policy.ts rename to x-pack/plugins/profiling_data_access/common/get_apm_policy.ts index ecc23f42ac99c..8631b6480878f 100644 --- a/x-pack/plugins/profiling/server/lib/setup/get_apm_policy.ts +++ b/x-pack/plugins/profiling_data_access/common/get_apm_policy.ts @@ -6,7 +6,7 @@ */ import { SavedObjectsClientContract } from '@kbn/core/server'; -import { PackagePolicyClient } from '@kbn/fleet-plugin/server'; +import type { PackagePolicyClient } from '@kbn/fleet-plugin/server'; export const ELASTIC_CLOUD_APM_POLICY = 'elastic-cloud-apm'; diff --git a/x-pack/plugins/profiling/server/lib/setup/has_profiling_data.ts b/x-pack/plugins/profiling_data_access/common/has_profiling_data.ts similarity index 85% rename from x-pack/plugins/profiling/server/lib/setup/has_profiling_data.ts rename to x-pack/plugins/profiling_data_access/common/has_profiling_data.ts index 11a755a18450a..13ed8a2830543 100644 --- a/x-pack/plugins/profiling/server/lib/setup/has_profiling_data.ts +++ b/x-pack/plugins/profiling_data_access/common/has_profiling_data.ts @@ -5,8 +5,7 @@ * 2.0. */ -import { PartialSetupState } from '../../../common/setup'; -import { ProfilingSetupOptions } from './types'; +import { PartialSetupState, ProfilingSetupOptions } from './setup'; export async function hasProfilingData({ client, diff --git a/x-pack/plugins/profiling_data_access/common/index.ts b/x-pack/plugins/profiling_data_access/common/index.ts new file mode 100644 index 0000000000000..8e654f7a85144 --- /dev/null +++ b/x-pack/plugins/profiling_data_access/common/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { getApmPolicy, ELASTIC_CLOUD_APM_POLICY } from './get_apm_policy'; +export { MAX_BUCKETS } from './cluster_settings'; +export { METADATA_VERSION, PROFILING_READER_ROLE_NAME } from './security_role'; +export { + getCollectorPolicy, + getSymbolizerPolicy, + COLLECTOR_PACKAGE_POLICY_NAME, + SYMBOLIZER_PACKAGE_POLICY_NAME, +} from './fleet_policies'; diff --git a/x-pack/plugins/profiling_data_access/common/profiling_es_client.ts b/x-pack/plugins/profiling_data_access/common/profiling_es_client.ts new file mode 100644 index 0000000000000..efc612d5590ef --- /dev/null +++ b/x-pack/plugins/profiling_data_access/common/profiling_es_client.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { ElasticsearchClient } from '@kbn/core/server'; +import type { ESSearchRequest, InferSearchResponseOf } from '@kbn/es-types'; +import type { ProfilingStatusResponse, StackTraceResponse } from '@kbn/profiling-utils'; + +export interface ProfilingESClient { + search( + operationName: string, + searchRequest: TSearchRequest + ): Promise>; + profilingStacktraces({}: { + query: QueryDslQueryContainer; + sampleSize: number; + }): Promise; + profilingStatus(): Promise; + getEsClient(): ElasticsearchClient; +} diff --git a/x-pack/plugins/profiling_data_access/common/security_role.ts b/x-pack/plugins/profiling_data_access/common/security_role.ts new file mode 100644 index 0000000000000..ed6cf1dbd4e62 --- /dev/null +++ b/x-pack/plugins/profiling_data_access/common/security_role.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PartialSetupState, ProfilingSetupOptions } from './setup'; + +export const PROFILING_READER_ROLE_NAME = 'profiling-reader'; +export const METADATA_VERSION = 1; + +export async function validateSecurityRole({ + client, +}: ProfilingSetupOptions): Promise { + const esClient = client.getEsClient(); + const roles = await esClient.security.getRole(); + const profilingRole = roles[PROFILING_READER_ROLE_NAME]; + return { + permissions: { + configured: !!profilingRole && profilingRole.metadata.version === METADATA_VERSION, + }, + }; +} diff --git a/x-pack/plugins/profiling/common/setup.test.ts b/x-pack/plugins/profiling_data_access/common/setup.test.ts similarity index 100% rename from x-pack/plugins/profiling/common/setup.test.ts rename to x-pack/plugins/profiling_data_access/common/setup.test.ts diff --git a/x-pack/plugins/profiling/common/setup.ts b/x-pack/plugins/profiling_data_access/common/setup.ts similarity index 83% rename from x-pack/plugins/profiling/common/setup.ts rename to x-pack/plugins/profiling_data_access/common/setup.ts index facae98f25012..d3411ea9ee020 100644 --- a/x-pack/plugins/profiling/common/setup.ts +++ b/x-pack/plugins/profiling_data_access/common/setup.ts @@ -4,9 +4,20 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import { merge } from 'lodash'; import type { RecursivePartial } from '@elastic/eui'; +import { Logger, SavedObjectsClientContract } from '@kbn/core/server'; +import type { PackagePolicyClient } from '@kbn/fleet-plugin/server'; +import { merge } from 'lodash'; +import { ProfilingESClient } from './profiling_es_client'; + +export interface ProfilingSetupOptions { + client: ProfilingESClient; + soClient: SavedObjectsClientContract; + packagePolicyClient: PackagePolicyClient; + logger: Logger; + spaceId: string; + isCloudEnabled: boolean; +} export interface SetupState { cloud: { diff --git a/x-pack/plugins/profiling_data_access/kibana.jsonc b/x-pack/plugins/profiling_data_access/kibana.jsonc index 3f0254ba92647..654cb93a0460c 100644 --- a/x-pack/plugins/profiling_data_access/kibana.jsonc +++ b/x-pack/plugins/profiling_data_access/kibana.jsonc @@ -7,7 +7,11 @@ "server": true, "browser": false, "configPath": ["xpack", "profiling"], - "requiredPlugins": ["data"], + "requiredPlugins": [ + "data", + "fleet", + "cloud" + ], "optionalPlugins": [], "requiredBundles": [] } diff --git a/x-pack/plugins/profiling_data_access/server/plugin.ts b/x-pack/plugins/profiling_data_access/server/plugin.ts index 23d72f39caee6..12705b9508c30 100644 --- a/x-pack/plugins/profiling_data_access/server/plugin.ts +++ b/x-pack/plugins/profiling_data_access/server/plugin.ts @@ -5,19 +5,30 @@ * 2.0. */ -import type { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/server'; +import type { + CoreSetup, + CoreStart, + Logger, + Plugin, + PluginInitializerContext, +} from '@kbn/core/server'; import { ProfilingConfig } from '.'; import { registerServices } from './services/register_services'; import { createProfilingEsClient } from './utils/create_profiling_es_client'; +import { ProfilingPluginStartDeps } from './types'; export type ProfilingDataAccessPluginSetup = ReturnType; export type ProfilingDataAccessPluginStart = ReturnType; export class ProfilingDataAccessPlugin implements Plugin { - constructor(private readonly initializerContext: PluginInitializerContext) {} + private readonly logger: Logger; + + constructor(private readonly initializerContext: PluginInitializerContext) { + this.logger = initializerContext.logger.get(); + } public setup(core: CoreSetup) {} - public start(core: CoreStart) { + public start(core: CoreStart, plugins: ProfilingPluginStartDeps) { const config = this.initializerContext.config.get(); const profilingSpecificEsClient = config.elasticsearch @@ -37,6 +48,11 @@ export class ProfilingDataAccessPlugin implements Plugin { return createProfilingEsClient({ esClient }); }, + logger: this.logger, + deps: { + fleet: plugins.fleet, + cloud: plugins.cloud, + }, }); // called after all plugins are set up diff --git a/x-pack/plugins/profiling_data_access/server/services/get_setup_state/index.ts b/x-pack/plugins/profiling_data_access/server/services/get_setup_state/index.ts new file mode 100644 index 0000000000000..9110883900c27 --- /dev/null +++ b/x-pack/plugins/profiling_data_access/server/services/get_setup_state/index.ts @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + validateMaximumBuckets, + validateResourceManagement, +} from '../../../common/cluster_settings'; +import { + validateCollectorPackagePolicy, + validateProfilingInApmPackagePolicy, + validateSymbolizerPackagePolicy, +} from '../../../common/fleet_policies'; +import { hasProfilingData } from '../../../common/has_profiling_data'; +import { ProfilingESClient } from '../../../common/profiling_es_client'; +import { validateSecurityRole } from '../../../common/security_role'; +import { + ProfilingSetupOptions, + createDefaultSetupState, + mergePartialSetupStates, +} from '../../../common/setup'; +import { RegisterServicesParams } from '../register_services'; + +export async function getSetupState( + options: ProfilingSetupOptions, + clientWithProfilingAuth: ProfilingESClient +) { + const state = createDefaultSetupState(); + state.cloud.available = options.isCloudEnabled; + + const verifyFunctions = [ + validateMaximumBuckets, + validateResourceManagement, + validateSecurityRole, + validateCollectorPackagePolicy, + validateSymbolizerPackagePolicy, + validateProfilingInApmPackagePolicy, + ]; + + const partialStates = await Promise.all([ + ...verifyFunctions.map((fn) => fn(options)), + hasProfilingData({ + ...options, + client: clientWithProfilingAuth, + }), + ]); + + return mergePartialSetupStates(state, partialStates); +} + +export function createGetSetupState(params: RegisterServicesParams) { + return getSetupState; +} diff --git a/x-pack/plugins/profiling_data_access/server/services/register_services.ts b/x-pack/plugins/profiling_data_access/server/services/register_services.ts index 371e998d3398d..095f8e1826794 100644 --- a/x-pack/plugins/profiling_data_access/server/services/register_services.ts +++ b/x-pack/plugins/profiling_data_access/server/services/register_services.ts @@ -5,9 +5,13 @@ * 2.0. */ -import { ElasticsearchClient } from '@kbn/core/server'; +import { CloudStart } from '@kbn/cloud-plugin/server'; +import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { FleetStartContract } from '@kbn/fleet-plugin/server'; import { createFetchFlamechart } from './fetch_flamechart'; -import { ProfilingESClient } from '../utils/create_profiling_es_client'; +import { createGetStatusService } from './status'; +import { createGetSetupState } from './get_setup_state'; +import { ProfilingESClient } from '../../common/profiling_es_client'; import { createFetchFunctions } from './functions'; export interface RegisterServicesParams { @@ -15,11 +19,18 @@ export interface RegisterServicesParams { esClient: ElasticsearchClient; useDefaultAuth?: boolean; }) => ProfilingESClient; + logger: Logger; + deps: { + fleet: FleetStartContract; + cloud: CloudStart; + }; } export function registerServices(params: RegisterServicesParams) { return { fetchFlamechartData: createFetchFlamechart(params), + getStatus: createGetStatusService(params), + getSetupState: createGetSetupState(params), fetchFunction: createFetchFunctions(params), }; } diff --git a/x-pack/plugins/profiling_data_access/server/services/search_stack_traces/index.ts b/x-pack/plugins/profiling_data_access/server/services/search_stack_traces/index.ts index 3585086bff69b..33cb1c6c8dc26 100644 --- a/x-pack/plugins/profiling_data_access/server/services/search_stack_traces/index.ts +++ b/x-pack/plugins/profiling_data_access/server/services/search_stack_traces/index.ts @@ -6,7 +6,7 @@ */ import { decodeStackTraceResponse } from '@kbn/profiling-utils'; -import { ProfilingESClient } from '../../utils/create_profiling_es_client'; +import { ProfilingESClient } from '../../../common/profiling_es_client'; import { kqlQuery } from '../../utils/query'; export async function searchStackTraces({ diff --git a/x-pack/plugins/profiling_data_access/server/services/status/index.ts b/x-pack/plugins/profiling_data_access/server/services/status/index.ts new file mode 100644 index 0000000000000..6aea8b1037bd6 --- /dev/null +++ b/x-pack/plugins/profiling_data_access/server/services/status/index.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; +import { ProfilingStatus } from '@kbn/profiling-utils'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { getSetupState } from '../get_setup_state'; +import { RegisterServicesParams } from '../register_services'; +import { ProfilingSetupOptions, areResourcesSetup } from '../../../common/setup'; + +interface HasSetupParams { + soClient: SavedObjectsClientContract; + esClient: ElasticsearchClient; + spaceId?: string; +} + +export function createGetStatusService({ + createProfilingEsClient, + deps, + logger, +}: RegisterServicesParams) { + return async ({ esClient, soClient, spaceId }: HasSetupParams): Promise => { + try { + const isCloudEnabled = deps.cloud.isCloudEnabled; + if (!isCloudEnabled) { + // When not on cloud just return that is has not set up and has no data + return { + has_setup: false, + has_data: false, + pre_8_9_1_data: false, + }; + } + + const clientWithDefaultAuth = createProfilingEsClient({ + esClient, + useDefaultAuth: true, + }); + const clientWithProfilingAuth = createProfilingEsClient({ + esClient, + useDefaultAuth: false, + }); + + const setupOptions: ProfilingSetupOptions = { + client: clientWithDefaultAuth, + logger, + packagePolicyClient: deps.fleet.packagePolicyService, + soClient, + spaceId: spaceId ?? DEFAULT_SPACE_ID, + isCloudEnabled, + }; + + const setupState = await getSetupState(setupOptions, clientWithProfilingAuth); + + return { + has_setup: areResourcesSetup(setupState), + has_data: setupState.data.available, + pre_8_9_1_data: setupState.resources.pre_8_9_1_data, + }; + } catch (error) { + // We cannot fully check the status of all resources + // to make sure Profiling has been set up and has data + // for users with monitor privileges. This privileges + // is needed to call the profiling ES plugin for example. + if (error?.meta?.statusCode === 403 || error?.originalError?.meta?.statusCode === 403) { + return { + has_setup: true, + pre_8_9_1_data: false, + has_data: true, + unauthorized: true, + }; + } + + throw error; + } + }; +} diff --git a/x-pack/plugins/profiling_data_access/server/types.ts b/x-pack/plugins/profiling_data_access/server/types.ts new file mode 100644 index 0000000000000..4092b18c6b953 --- /dev/null +++ b/x-pack/plugins/profiling_data_access/server/types.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { CloudStart } from '@kbn/cloud-plugin/server'; +import { FleetStartContract } from '@kbn/fleet-plugin/server'; + +export interface ProfilingPluginStartDeps { + fleet: FleetStartContract; + cloud: CloudStart; +} diff --git a/x-pack/plugins/profiling_data_access/server/utils/create_profiling_es_client.ts b/x-pack/plugins/profiling_data_access/server/utils/create_profiling_es_client.ts index 4b7f785bb6f3f..c35ee17a64d32 100644 --- a/x-pack/plugins/profiling_data_access/server/utils/create_profiling_es_client.ts +++ b/x-pack/plugins/profiling_data_access/server/utils/create_profiling_es_client.ts @@ -5,26 +5,13 @@ * 2.0. */ -import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { ElasticsearchClient } from '@kbn/core/server'; import type { ESSearchRequest, InferSearchResponseOf } from '@kbn/es-types'; import type { ProfilingStatusResponse, StackTraceResponse } from '@kbn/profiling-utils'; +import { ProfilingESClient } from '../../common/profiling_es_client'; import { unwrapEsResponse } from './unwrap_es_response'; import { withProfilingSpan } from './with_profiling_span'; -export interface ProfilingESClient { - search( - operationName: string, - searchRequest: TSearchRequest - ): Promise>; - profilingStacktraces({}: { - query: QueryDslQueryContainer; - sampleSize: number; - }): Promise; - profilingStatus(): Promise; - getEsClient(): ElasticsearchClient; -} - export function createProfilingEsClient({ esClient, }: { diff --git a/x-pack/plugins/profiling_data_access/tsconfig.json b/x-pack/plugins/profiling_data_access/tsconfig.json index 9075978c5a927..ccd0d3e54e816 100644 --- a/x-pack/plugins/profiling_data_access/tsconfig.json +++ b/x-pack/plugins/profiling_data_access/tsconfig.json @@ -4,6 +4,7 @@ "outDir": "target/types" }, "include": [ + "common/**/*", "server/**/*", "jest.config.js" ], @@ -16,6 +17,9 @@ "@kbn/es-query", "@kbn/es-types", "@kbn/apm-utils", - "@kbn/profiling-utils" + "@kbn/profiling-utils", + "@kbn/fleet-plugin", + "@kbn/cloud-plugin", + "@kbn/spaces-plugin", ] } diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts index 16781a17962c9..47eeb6e46c406 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts @@ -10,7 +10,6 @@ import { PublicMethodsOf } from '@kbn/utility-types'; import { Filter, buildEsQuery, EsQueryConfig } from '@kbn/es-query'; import { decodeVersion, encodeHitVersion } from '@kbn/securitysolution-es-utils'; import { - AlertConsumers, ALERT_TIME_RANGE, ALERT_STATUS, getEsQueryConfig, @@ -29,7 +28,7 @@ import { InlineScript, QueryDslQueryContainer, } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { RuleTypeParams } from '@kbn/alerting-plugin/server'; +import { RuleTypeParams, PluginStartContract as AlertingStart } from '@kbn/alerting-plugin/server'; import { ReadOperations, AlertingAuthorization, @@ -50,7 +49,7 @@ import { SPACE_IDS, } from '../../common/technical_rule_data_field_names'; import { ParsedTechnicalFields } from '../../common/parse_technical_fields'; -import { Dataset, IRuleDataService } from '../rule_data_plugin_service'; +import { IRuleDataService } from '../rule_data_plugin_service'; import { getAuthzFilter, getSpacesFilter } from '../lib'; import { fieldDescriptorToBrowserFieldMapper } from './browser_fields'; @@ -81,6 +80,7 @@ export interface ConstructorOptions { esClient: ElasticsearchClient; ruleDataService: IRuleDataService; getRuleType: RuleTypeRegistry['get']; + getAlertIndicesAlias: AlertingStart['getAlertIndicesAlias']; } export interface UpdateOptions { @@ -137,6 +137,7 @@ interface SingleSearchAfterAndAudit { operation: WriteOperations.Update | ReadOperations.Find | ReadOperations.Get; sort?: estypes.SortOptions[] | undefined; lastSortIds?: Array | undefined; + featureIds?: string[]; } /** @@ -152,6 +153,7 @@ export class AlertsClient { private readonly spaceId: string | undefined; private readonly ruleDataService: IRuleDataService; private readonly getRuleType: RuleTypeRegistry['get']; + private getAlertIndicesAlias!: AlertingStart['getAlertIndicesAlias']; constructor(options: ConstructorOptions) { this.logger = options.logger; @@ -163,6 +165,7 @@ export class AlertsClient { this.spaceId = this.authorization.getSpaceId(); this.ruleDataService = options.ruleDataService; this.getRuleType = options.getRuleType; + this.getAlertIndicesAlias = options.getAlertIndicesAlias; } private getOutcome( @@ -281,6 +284,7 @@ export class AlertsClient { operation, sort, lastSortIds = [], + featureIds, }: SingleSearchAfterAndAudit) { try { const alertSpaceId = this.spaceId; @@ -294,7 +298,14 @@ export class AlertsClient { let queryBody: estypes.SearchRequest['body'] = { fields: [ALERT_RULE_TYPE_ID, ALERT_RULE_CONSUMER, ALERT_WORKFLOW_STATUS, SPACE_IDS], - query: await this.buildEsQueryWithAuthz(query, id, alertSpaceId, operation, config), + query: await this.buildEsQueryWithAuthz( + query, + id, + alertSpaceId, + operation, + config, + featureIds ? new Set(featureIds) : undefined + ), aggs, _source, track_total_hits: trackTotalHits, @@ -433,10 +444,15 @@ export class AlertsClient { id: string | null | undefined, alertSpaceId: string, operation: WriteOperations.Update | ReadOperations.Get | ReadOperations.Find, - config: EsQueryConfig + config: EsQueryConfig, + featuresIds?: Set ) { try { - const authzFilter = (await getAuthzFilter(this.authorization, operation)) as Filter; + const authzFilter = (await getAuthzFilter( + this.authorization, + operation, + featuresIds + )) as Filter; const spacesFilter = getSpacesFilter(alertSpaceId) as unknown as Filter; let esQuery; if (id != null) { @@ -681,6 +697,7 @@ export class AlertsClient { }, }, size: 0, + featureIds, }); let activeAlertCount = 0; @@ -1006,35 +1023,16 @@ export class AlertsClient { public async getAuthorizedAlertsIndices(featureIds: string[]): Promise { try { - // ATTENTION FUTURE DEVELOPER when you are a super user the augmentedRuleTypes.authorizedRuleTypes will - // return all of the features that you can access and does not care about your featureIds - const augmentedRuleTypes = await this.authorization.getAugmentedRuleTypesWithAuthorization( - featureIds, - [ReadOperations.Find, ReadOperations.Get, WriteOperations.Update], - AlertingAuthorizationEntity.Alert + const authorizedRuleTypes = await this.authorization.getAuthorizedRuleTypes( + AlertingAuthorizationEntity.Alert, + new Set(featureIds) ); - // As long as the user can read a minimum of one type of rule type produced by the provided feature, - // the user should be provided that features' alerts index. - // Limiting which alerts that user can read on that index will be done via the findAuthorizationFilter - const authorizedFeatures = new Set(); - for (const ruleType of augmentedRuleTypes.authorizedRuleTypes) { - authorizedFeatures.add(ruleType.producer); - } - const validAuthorizedFeatures = Array.from(authorizedFeatures).filter( - (feature): feature is ValidFeatureId => - featureIds.includes(feature) && isValidFeatureId(feature) + const indices = this.getAlertIndicesAlias( + authorizedRuleTypes.map((art: { id: any }) => art.id), + this.spaceId ); - const toReturn = validAuthorizedFeatures.map((feature) => { - const index = this.ruleDataService.findIndexByFeature(feature, Dataset.alerts); - if (index == null) { - throw new Error(`This feature id ${feature} should be associated to an alert index`); - } - return ( - index?.getPrimaryAlias(feature === AlertConsumers.SIEM ? this.spaceId ?? '*' : '*') ?? '' - ); - }); - return toReturn; + return indices; } catch (exc) { const errMessage = `getAuthorizedAlertsIndices failed to get authorized rule types: ${exc}`; this.logger.error(errMessage); diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client_factory.test.ts b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client_factory.test.ts index bbb33244e2975..43966d1207004 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client_factory.test.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client_factory.test.ts @@ -26,6 +26,7 @@ const alertsClientFactoryParams: AlertsClientFactoryProps = { esClient: {} as ElasticsearchClient, ruleDataService: ruleDataServiceMock.create(), getRuleType: jest.fn(), + getAlertIndicesAlias: jest.fn(), }; const auditLogger = auditLoggerMock.create(); @@ -53,6 +54,7 @@ describe('AlertsClientFactory', () => { esClient: {}, ruleDataService: alertsClientFactoryParams.ruleDataService, getRuleType: alertsClientFactoryParams.getRuleType, + getAlertIndicesAlias: alertsClientFactoryParams.getAlertIndicesAlias, }); }); diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client_factory.ts b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client_factory.ts index 9a171514b588a..de0afb5a0b226 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client_factory.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client_factory.ts @@ -8,7 +8,10 @@ import { PublicMethodsOf } from '@kbn/utility-types'; import { ElasticsearchClient, KibanaRequest, Logger } from '@kbn/core/server'; import type { RuleTypeRegistry } from '@kbn/alerting-plugin/server/types'; -import { AlertingAuthorization } from '@kbn/alerting-plugin/server'; +import { + AlertingAuthorization, + PluginStartContract as AlertingStart, +} from '@kbn/alerting-plugin/server'; import { SecurityPluginSetup } from '@kbn/security-plugin/server'; import { IRuleDataService } from '../rule_data_plugin_service'; import { AlertsClient } from './alerts_client'; @@ -20,6 +23,7 @@ export interface AlertsClientFactoryProps { securityPluginSetup: SecurityPluginSetup | undefined; ruleDataService: IRuleDataService | null; getRuleType: RuleTypeRegistry['get']; + getAlertIndicesAlias: AlertingStart['getAlertIndicesAlias']; } export class AlertsClientFactory { @@ -32,6 +36,7 @@ export class AlertsClientFactory { private securityPluginSetup!: SecurityPluginSetup | undefined; private ruleDataService!: IRuleDataService | null; private getRuleType!: RuleTypeRegistry['get']; + private getAlertIndicesAlias!: AlertingStart['getAlertIndicesAlias']; public initialize(options: AlertsClientFactoryProps) { /** @@ -48,6 +53,7 @@ export class AlertsClientFactory { this.securityPluginSetup = options.securityPluginSetup; this.ruleDataService = options.ruleDataService; this.getRuleType = options.getRuleType; + this.getAlertIndicesAlias = options.getAlertIndicesAlias; } public async create(request: KibanaRequest): Promise { @@ -60,6 +66,7 @@ export class AlertsClientFactory { esClient: this.esClient, ruleDataService: this.ruleDataService!, getRuleType: this.getRuleType, + getAlertIndicesAlias: this.getAlertIndicesAlias, }); } } diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/tests/bulk_update.test.ts b/x-pack/plugins/rule_registry/server/alert_data_client/tests/bulk_update.test.ts index fb3acbd5e26fd..4229ae23793fc 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/tests/bulk_update.test.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/tests/bulk_update.test.ts @@ -31,6 +31,7 @@ const alertsClientParams: jest.Mocked = { auditLogger, ruleDataService: ruleDataServiceMock.create(), getRuleType: jest.fn(), + getAlertIndicesAlias: jest.fn(), }; const DEFAULT_SPACE = 'test_default_space_id'; @@ -334,10 +335,10 @@ describe('bulkUpdate()', () => { status: 'closed', }) ).rejects.toThrowErrorMatchingInlineSnapshot(` - "queryAndAuditAllAlerts threw an error: Unable to retrieve alerts with query \\"kibana.alert.status: active\\" and operation update - Error: Unable to retrieve alert details for alert with id of \\"null\\" or with query \\"kibana.alert.status: active\\" and operation update - Error: Error: Unauthorized for fake.rule and apm" - `); + "queryAndAuditAllAlerts threw an error: Unable to retrieve alerts with query \\"kibana.alert.status: active\\" and operation update + Error: Unable to retrieve alert details for alert with id of \\"null\\" or with query \\"kibana.alert.status: active\\" and operation update + Error: Error: Unauthorized for fake.rule and apm" + `); expect(auditLogger.log).toHaveBeenNthCalledWith(1, { message: `Failed attempt to update alert [id=${fakeAlertId}]`, @@ -401,10 +402,10 @@ describe('bulkUpdate()', () => { status: 'closed', }) ).rejects.toThrowErrorMatchingInlineSnapshot(` - "queryAndAuditAllAlerts threw an error: Unable to retrieve alerts with query \\"kibana.alert.status: active\\" and operation update - Error: Unable to retrieve alert details for alert with id of \\"null\\" or with query \\"kibana.alert.status: active\\" and operation update - Error: Error: Unauthorized for fake.rule and apm" - `); + "queryAndAuditAllAlerts threw an error: Unable to retrieve alerts with query \\"kibana.alert.status: active\\" and operation update + Error: Unable to retrieve alert details for alert with id of \\"null\\" or with query \\"kibana.alert.status: active\\" and operation update + Error: Error: Unauthorized for fake.rule and apm" + `); expect(auditLogger.log).toHaveBeenCalledTimes(2); expect(auditLogger.log).toHaveBeenNthCalledWith(1, { diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/tests/bulk_update_cases.test.ts b/x-pack/plugins/rule_registry/server/alert_data_client/tests/bulk_update_cases.test.ts index 20db7747fc898..4047a3ecadd27 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/tests/bulk_update_cases.test.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/tests/bulk_update_cases.test.ts @@ -37,6 +37,7 @@ describe('bulkUpdateCases', () => { auditLogger, ruleDataService: ruleDataServiceMock.create(), getRuleType: jest.fn(), + getAlertIndicesAlias: jest.fn(), }; beforeEach(() => { diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/tests/find_alerts.test.ts b/x-pack/plugins/rule_registry/server/alert_data_client/tests/find_alerts.test.ts index b287ba863e5fa..37ad46a523a70 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/tests/find_alerts.test.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/tests/find_alerts.test.ts @@ -30,6 +30,7 @@ const alertsClientParams: jest.Mocked = { auditLogger, ruleDataService: ruleDataServiceMock.create(), getRuleType: jest.fn(), + getAlertIndicesAlias: jest.fn(), }; const DEFAULT_SPACE = 'test_default_space_id'; @@ -420,9 +421,9 @@ describe('find()', () => { index: '.alerts-observability.apm.alerts', }) ).rejects.toThrowErrorMatchingInlineSnapshot(` - "Unable to retrieve alert details for alert with id of \\"undefined\\" or with query \\"[object Object]\\" and operation find - Error: Error: Unauthorized for fake.rule and apm" - `); + "Unable to retrieve alert details for alert with id of \\"undefined\\" or with query \\"[object Object]\\" and operation find + Error: Error: Unauthorized for fake.rule and apm" + `); expect(auditLogger.log).toHaveBeenNthCalledWith(1, { message: `Failed attempt to access alert [id=${fakeAlertId}]`, @@ -450,9 +451,9 @@ describe('find()', () => { index: '.alerts-observability.apm.alerts', }) ).rejects.toThrowErrorMatchingInlineSnapshot(` - "Unable to retrieve alert details for alert with id of \\"undefined\\" or with query \\"[object Object]\\" and operation find - Error: Error: something went wrong" - `); + "Unable to retrieve alert details for alert with id of \\"undefined\\" or with query \\"[object Object]\\" and operation find + Error: Error: something went wrong" + `); }); describe('authorization', () => { diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/tests/get.test.ts b/x-pack/plugins/rule_registry/server/alert_data_client/tests/get.test.ts index c7b342f0fa548..fb1e0eef432ef 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/tests/get.test.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/tests/get.test.ts @@ -31,6 +31,7 @@ const alertsClientParams: jest.Mocked = { auditLogger, ruleDataService: ruleDataServiceMock.create(), getRuleType: jest.fn(), + getAlertIndicesAlias: jest.fn(), }; const DEFAULT_SPACE = 'test_default_space_id'; @@ -266,9 +267,9 @@ describe('get()', () => { await expect(alertsClient.get({ id: fakeAlertId, index: '.alerts-observability.apm.alerts' })) .rejects.toThrowErrorMatchingInlineSnapshot(` - "Unable to retrieve alert details for alert with id of \\"myfakeid1\\" or with query \\"undefined\\" and operation get - Error: Error: Unauthorized for fake.rule and apm" - `); + "Unable to retrieve alert details for alert with id of \\"myfakeid1\\" or with query \\"undefined\\" and operation get + Error: Error: Unauthorized for fake.rule and apm" + `); expect(auditLogger.log).toHaveBeenNthCalledWith(1, { message: `Failed attempt to access alert [id=${fakeAlertId}]`, @@ -293,9 +294,9 @@ describe('get()', () => { await expect( alertsClient.get({ id: 'NoxgpHkBqbdrfX07MqXV', index: '.alerts-observability.apm.alerts' }) ).rejects.toThrowErrorMatchingInlineSnapshot(` - "Unable to retrieve alert details for alert with id of \\"NoxgpHkBqbdrfX07MqXV\\" or with query \\"undefined\\" and operation get - Error: Error: something went wrong" - `); + "Unable to retrieve alert details for alert with id of \\"NoxgpHkBqbdrfX07MqXV\\" or with query \\"undefined\\" and operation get + Error: Error: something went wrong" + `); }); describe('authorization', () => { diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/tests/remove_cases_from_alerts.test.ts b/x-pack/plugins/rule_registry/server/alert_data_client/tests/remove_cases_from_alerts.test.ts index 08f0c3c21ea37..2611200afd85f 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/tests/remove_cases_from_alerts.test.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/tests/remove_cases_from_alerts.test.ts @@ -32,6 +32,7 @@ describe('remove cases from alerts', () => { auditLogger, ruleDataService: ruleDataServiceMock.create(), getRuleType: jest.fn(), + getAlertIndicesAlias: jest.fn(), }; beforeEach(() => { @@ -89,6 +90,7 @@ describe('remove cases from alerts', () => { auditLogger, ruleDataService: ruleDataServiceMock.create(), getRuleType: jest.fn(), + getAlertIndicesAlias: jest.fn(), }; beforeEach(() => { diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/tests/update.test.ts b/x-pack/plugins/rule_registry/server/alert_data_client/tests/update.test.ts index 4db890d93b326..bca5e7d967f3a 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/tests/update.test.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/tests/update.test.ts @@ -30,6 +30,7 @@ const alertsClientParams: jest.Mocked = { auditLogger, ruleDataService: ruleDataServiceMock.create(), getRuleType: jest.fn(), + getAlertIndicesAlias: jest.fn(), }; const DEFAULT_SPACE = 'test_default_space_id'; @@ -257,9 +258,9 @@ describe('update()', () => { index: '.alerts-observability.apm.alerts', }) ).rejects.toThrowErrorMatchingInlineSnapshot(` - "Unable to retrieve alert details for alert with id of \\"myfakeid1\\" or with query \\"undefined\\" and operation update - Error: Error: Unauthorized for fake.rule and apm" - `); + "Unable to retrieve alert details for alert with id of \\"myfakeid1\\" or with query \\"undefined\\" and operation update + Error: Error: Unauthorized for fake.rule and apm" + `); expect(auditLogger.log).toHaveBeenNthCalledWith(1, { message: `Failed attempt to update alert [id=${fakeAlertId}]`, @@ -289,9 +290,9 @@ describe('update()', () => { index: '.alerts-observability.apm.alerts', }) ).rejects.toThrowErrorMatchingInlineSnapshot(` - "Unable to retrieve alert details for alert with id of \\"NoxgpHkBqbdrfX07MqXV\\" or with query \\"undefined\\" and operation update - Error: Error: something went wrong on update" - `); + "Unable to retrieve alert details for alert with id of \\"NoxgpHkBqbdrfX07MqXV\\" or with query \\"undefined\\" and operation update + Error: Error: something went wrong on update" + `); }); test(`throws an error if ES client update fails`, async () => { diff --git a/x-pack/plugins/rule_registry/server/lib/get_authz_filter.ts b/x-pack/plugins/rule_registry/server/lib/get_authz_filter.ts index 35bab55c7c4e3..e1524b99f88d9 100644 --- a/x-pack/plugins/rule_registry/server/lib/get_authz_filter.ts +++ b/x-pack/plugins/rule_registry/server/lib/get_authz_filter.ts @@ -19,7 +19,8 @@ import { export async function getAuthzFilter( authorization: PublicMethodsOf, - operation: WriteOperations.Update | ReadOperations.Get | ReadOperations.Find + operation: WriteOperations.Update | ReadOperations.Get | ReadOperations.Find, + featuresIds?: Set ) { const { filter } = await authorization.getAuthorizationFilter( AlertingAuthorizationEntity.Alert, @@ -27,7 +28,8 @@ export async function getAuthzFilter( type: AlertingAuthorizationFilterType.ESDSL, fieldNames: { consumer: ALERT_RULE_CONSUMER, ruleTypeId: ALERT_RULE_TYPE_ID }, }, - operation + operation, + featuresIds ); return filter; } diff --git a/x-pack/plugins/rule_registry/server/plugin.ts b/x-pack/plugins/rule_registry/server/plugin.ts index 0b17e237057e6..6fba837a10c1a 100644 --- a/x-pack/plugins/rule_registry/server/plugin.ts +++ b/x-pack/plugins/rule_registry/server/plugin.ts @@ -166,6 +166,7 @@ export class RuleRegistryPlugin securityPluginSetup: security, ruleDataService, getRuleType: plugins.alerting.getType, + getAlertIndicesAlias: plugins.alerting.getAlertIndicesAlias, }); const getRacClientWithRequest = (request: KibanaRequest) => { diff --git a/x-pack/plugins/rule_registry/server/routes/get_browser_fields_by_feature_id.ts b/x-pack/plugins/rule_registry/server/routes/get_browser_fields_by_feature_id.ts index 3441a8571e81f..259ca03478745 100644 --- a/x-pack/plugins/rule_registry/server/routes/get_browser_fields_by_feature_id.ts +++ b/x-pack/plugins/rule_registry/server/routes/get_browser_fields_by_feature_id.ts @@ -35,11 +35,13 @@ export const getBrowserFieldsByFeatureId = (router: IRouter fId !== 'siem' ); const o11yIndices = - indices?.filter((index) => index.startsWith('.alerts-observability')) ?? []; + (onlyO11yFeatureIds + ? await alertsClient.getAuthorizedAlertsIndices(onlyO11yFeatureIds) + : []) ?? []; if (o11yIndices.length === 0) { return response.notFound({ body: { diff --git a/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.test.ts b/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.test.ts index d2961eeee7580..b8189e9a0eb85 100644 --- a/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.test.ts +++ b/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.test.ts @@ -26,7 +26,7 @@ const frameworkAlertsService = { }; const GetAliasResponse = { - real_index: { + '.internal.alerts-test.alerts-default-000001': { aliases: { alias_1: { is_hidden: true, diff --git a/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.ts b/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.ts index 225df2ffe1b89..f1dfb6f851eb0 100644 --- a/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.ts +++ b/x-pack/plugins/rule_registry/server/rule_data_plugin_service/resource_installer.ts @@ -21,6 +21,7 @@ import { TOTAL_FIELDS_LIMIT, type PublicFrameworkAlertsService, type DataStreamAdapter, + VALID_ALERT_INDEX_PREFIXES, } from '@kbn/alerting-plugin/server'; import { TECHNICAL_COMPONENT_TEMPLATE_NAME } from '../../common/assets'; import { technicalComponentTemplate } from '../../common/assets/component_templates/technical_component_template'; @@ -220,6 +221,7 @@ export class ResourceInstaller { alias: indexInfo.getPrimaryAlias(namespace), name: indexInfo.getConcreteIndexInitialName(namespace), template: indexInfo.getIndexTemplateName(namespace), + validPrefixes: VALID_ALERT_INDEX_PREFIXES, ...(secondaryNamespacedAlias ? { secondaryAlias: secondaryNamespacedAlias } : {}), }; diff --git a/x-pack/plugins/rule_registry/server/search_strategy/search_strategy.ts b/x-pack/plugins/rule_registry/server/search_strategy/search_strategy.ts index 76c1168d50d0b..f8da02ad0666d 100644 --- a/x-pack/plugins/rule_registry/server/search_strategy/search_strategy.ts +++ b/x-pack/plugins/rule_registry/server/search_strategy/search_strategy.ts @@ -72,20 +72,18 @@ export const ruleRegistrySearchStrategyProvider = ( alerting.getAlertingAuthorizationWithRequest(deps.request), ]); let authzFilter; - - if (!siemRequest) { + const fIds = new Set(featureIds); + if (!siemRequest && featureIds.length > 0) { authzFilter = (await getAuthzFilter( authorization, - ReadOperations.Find + ReadOperations.Find, + fIds )) as estypes.QueryDslQueryContainer; } const authorizedRuleTypes = featureIds.length > 0 - ? await authorization.getAuthorizedRuleTypes( - AlertingAuthorizationEntity.Alert, - new Set(featureIds) - ) + ? await authorization.getAuthorizedRuleTypes(AlertingAuthorizationEntity.Alert, fIds) : []; return { space, authzFilter, authorizedRuleTypes }; }; diff --git a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.test.ts b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.test.ts index 7e8e0ac73f907..afed418ec8d3d 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.test.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.test.ts @@ -151,7 +151,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -171,7 +171,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must not show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 1, _primary_term: 3, }, @@ -231,7 +231,7 @@ describe('createLifecycleExecutor', () => { { index: { _id: 'TEST_ALERT_0_UUID', - _index: 'alerts-index-name', + _index: '.alerts-index-name', if_primary_term: 2, if_seq_no: 4, require_alias: false, @@ -249,7 +249,7 @@ describe('createLifecycleExecutor', () => { { index: { _id: 'TEST_ALERT_1_UUID', - _index: 'alerts-index-name', + _index: '.alerts-index-name', if_primary_term: 3, if_seq_no: 1, require_alias: false, @@ -279,6 +279,141 @@ describe('createLifecycleExecutor', () => { ); }); + it('logs warning if existing documents are in unexpected index', async () => { + const logger = loggerMock.create(); + const ruleDataClientMock = createRuleDataClientMock(); + ruleDataClientMock.getReader().search.mockResolvedValue({ + hits: { + hits: [ + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_0', + [ALERT_UUID]: 'ALERT_0_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [ALERT_WORKFLOW_STATUS]: 'closed', + [SPACE_IDS]: ['fake-space-id'], + labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must show up in the written doc + }, + _index: 'partial-.alerts-index-name', + _seq_no: 4, + _primary_term: 2, + }, + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_1', + [ALERT_UUID]: 'ALERT_1_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [ALERT_WORKFLOW_STATUS]: 'open', + [SPACE_IDS]: ['fake-space-id'], + labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must not show up in the written doc + }, + _index: '.alerts-index-name', + _seq_no: 1, + _primary_term: 3, + }, + ], + }, + } as any); + const executor = createLifecycleExecutor( + logger, + ruleDataClientMock + )<{}, TestRuleState, never, never, never>(async ({ services, state }) => { + services.alertWithLifecycle({ + id: 'TEST_ALERT_0', + fields: {}, + }); + services.alertWithLifecycle({ + id: 'TEST_ALERT_1', + fields: {}, + }); + + return { state }; + }); + + await executor( + createDefaultAlertExecutorOptions({ + alertId: 'TEST_ALERT_0', + params: {}, + state: { + wrapped: initialRuleState, + trackedAlerts: { + TEST_ALERT_0: { + alertId: 'TEST_ALERT_0', + alertUuid: 'TEST_ALERT_0_UUID', + started: '2020-01-01T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + }, + TEST_ALERT_1: { + alertId: 'TEST_ALERT_1', + alertUuid: 'TEST_ALERT_1_UUID', + started: '2020-01-02T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + }, + }, + trackedAlertsRecovered: {}, + }, + logger, + }) + ); + + expect((await ruleDataClientMock.getWriter()).bulk).toHaveBeenCalledWith( + expect.objectContaining({ + body: [ + // alert document + { + index: { + _id: 'TEST_ALERT_1_UUID', + _index: '.alerts-index-name', + if_primary_term: 3, + if_seq_no: 1, + require_alias: false, + }, + }, + expect.objectContaining({ + [ALERT_INSTANCE_ID]: 'TEST_ALERT_1', + [ALERT_WORKFLOW_STATUS]: 'open', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + + [EVENT_ACTION]: 'active', + [EVENT_KIND]: 'signal', + }), + ], + }) + ); + expect((await ruleDataClientMock.getWriter()).bulk).not.toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.arrayContaining([ + // evaluation documents + { index: {} }, + expect.objectContaining({ + [EVENT_KIND]: 'event', + }), + ]), + }) + ); + expect(logger.warn).toHaveBeenCalledWith( + `Could not update alert TEST_ALERT_0 in partial-.alerts-index-name. Partial and restored alert indices are not supported.` + ); + }); + it('updates existing documents for recovered alerts', async () => { const logger = loggerMock.create(); const ruleDataClientMock = createRuleDataClientMock(); @@ -301,7 +436,7 @@ describe('createLifecycleExecutor', () => { labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must show up in the written doc [TAGS]: ['source-tag1', 'source-tag2'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -321,7 +456,7 @@ describe('createLifecycleExecutor', () => { labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must not show up in the written doc [TAGS]: ['source-tag3', 'source-tag4'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -538,7 +673,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -558,7 +693,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must not show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -656,7 +791,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -676,7 +811,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must not show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -773,7 +908,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -792,7 +927,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must not show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -887,7 +1022,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -906,7 +1041,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must not show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1065,7 +1200,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1085,7 +1220,7 @@ describe('createLifecycleExecutor', () => { [SPACE_IDS]: ['fake-space-id'], labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must not show up in the written doc }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1199,7 +1334,7 @@ describe('createLifecycleExecutor', () => { labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must show up in the written doc [TAGS]: ['source-tag1', 'source-tag2'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1219,7 +1354,7 @@ describe('createLifecycleExecutor', () => { labels: { LABEL_0_KEY: 'LABEL_0_VALUE' }, // this must not show up in the written doc [TAGS]: ['source-tag3', 'source-tag4'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1333,7 +1468,7 @@ describe('createLifecycleExecutor', () => { [ALERT_WORKFLOW_STATUS]: 'closed', [SPACE_IDS]: ['fake-space-id'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1352,7 +1487,7 @@ describe('createLifecycleExecutor', () => { [ALERT_WORKFLOW_STATUS]: 'open', [SPACE_IDS]: ['fake-space-id'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1371,7 +1506,7 @@ describe('createLifecycleExecutor', () => { [ALERT_WORKFLOW_STATUS]: 'open', [SPACE_IDS]: ['fake-space-id'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1390,7 +1525,7 @@ describe('createLifecycleExecutor', () => { [ALERT_WORKFLOW_STATUS]: 'open', [SPACE_IDS]: ['fake-space-id'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1569,7 +1704,7 @@ describe('createLifecycleExecutor', () => { [ALERT_STATUS]: ALERT_STATUS_ACTIVE, [SPACE_IDS]: ['fake-space-id'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1587,7 +1722,7 @@ describe('createLifecycleExecutor', () => { [ALERT_STATUS]: ALERT_STATUS_ACTIVE, [SPACE_IDS]: ['fake-space-id'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1605,7 +1740,7 @@ describe('createLifecycleExecutor', () => { [ALERT_STATUS]: ALERT_STATUS_ACTIVE, [SPACE_IDS]: ['fake-space-id'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, @@ -1623,7 +1758,7 @@ describe('createLifecycleExecutor', () => { [ALERT_STATUS]: ALERT_STATUS_ACTIVE, [SPACE_IDS]: ['fake-space-id'], }, - _index: 'alerts-index-name', + _index: '.alerts-index-name', _seq_no: 4, _primary_term: 2, }, diff --git a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.ts b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.ts index f91f6dfdf72d0..deac218c9c49e 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.ts @@ -17,6 +17,7 @@ import { AlertInstanceState, RuleTypeParams, RuleTypeState, + isValidAlertIndexName, } from '@kbn/alerting-plugin/server'; import { isFlapping } from '@kbn/alerting-plugin/server/lib'; import { wrappedStateRt, WrappedLifecycleRuleState } from '@kbn/alerting-state-types'; @@ -252,83 +253,97 @@ export const createLifecycleExecutor = } const makeEventsDataMapFor = (alertIds: string[]) => - alertIds.map((alertId) => { - const alertData = trackedAlertsDataMap[alertId]; - const currentAlertData = currentAlerts[alertId]; - const trackedAlert = state.trackedAlerts[alertId]; - - if (!alertData) { - logger.debug(`[Rule Registry] Could not find alert data for ${alertId}`); - } + alertIds + .filter((alertId) => { + const alertData = trackedAlertsDataMap[alertId]; + const alertIndex = alertData?.indexName; + if (!alertIndex) { + return true; + } else if (!isValidAlertIndexName(alertIndex)) { + logger.warn( + `Could not update alert ${alertId} in ${alertIndex}. Partial and restored alert indices are not supported.` + ); + return false; + } + return true; + }) + .map((alertId) => { + const alertData = trackedAlertsDataMap[alertId]; + const currentAlertData = currentAlerts[alertId]; + const trackedAlert = state.trackedAlerts[alertId]; - const isNew = !trackedAlert; - const isRecovered = !currentAlertData; - const isActive = !isRecovered; - - const flappingHistory = getUpdatedFlappingHistory( - flappingSettings, - alertId, - state, - isNew, - isRecovered, - isActive, - trackedAlertRecoveredIds - ); + if (!alertData) { + logger.debug(`[Rule Registry] Could not find alert data for ${alertId}`); + } - const { alertUuid, started, flapping, pendingRecoveredCount } = !isNew - ? state.trackedAlerts[alertId] - : { - alertUuid: lifecycleAlertServices.getAlertUuid(alertId), - started: commonRuleFields[TIMESTAMP], - flapping: state.trackedAlertsRecovered[alertId] - ? state.trackedAlertsRecovered[alertId].flapping - : false, - pendingRecoveredCount: 0, - }; + const isNew = !trackedAlert; + const isRecovered = !currentAlertData; + const isActive = !isRecovered; - const event: ParsedTechnicalFields & ParsedExperimentalFields = { - ...alertData?.fields, - ...commonRuleFields, - ...currentAlertData, - [ALERT_DURATION]: (options.startedAt.getTime() - new Date(started).getTime()) * 1000, - [ALERT_TIME_RANGE]: isRecovered - ? { - gte: started, - lte: commonRuleFields[TIMESTAMP], - } - : { gte: started }, - [ALERT_INSTANCE_ID]: alertId, - [ALERT_START]: started, - [ALERT_UUID]: alertUuid, - [ALERT_STATUS]: isRecovered ? ALERT_STATUS_RECOVERED : ALERT_STATUS_ACTIVE, - [ALERT_WORKFLOW_STATUS]: alertData?.fields[ALERT_WORKFLOW_STATUS] ?? 'open', - [EVENT_KIND]: 'signal', - [EVENT_ACTION]: isNew ? 'open' : isActive ? 'active' : 'close', - [TAGS]: Array.from( - new Set([ - ...(currentAlertData?.tags ?? []), - ...(alertData?.fields[TAGS] ?? []), - ...(options.rule.tags ?? []), - ]) - ), - [VERSION]: ruleDataClient.kibanaVersion, - [ALERT_FLAPPING]: flapping, - ...(isRecovered ? { [ALERT_END]: commonRuleFields[TIMESTAMP] } : {}), - ...(isNew && maintenanceWindowIds?.length - ? { [ALERT_MAINTENANCE_WINDOW_IDS]: maintenanceWindowIds } - : {}), - }; - - return { - indexName: alertData?.indexName, - seqNo: alertData?.seqNo, - primaryTerm: alertData?.primaryTerm, - event, - flappingHistory, - flapping, - pendingRecoveredCount, - }; - }); + const flappingHistory = getUpdatedFlappingHistory( + flappingSettings, + alertId, + state, + isNew, + isRecovered, + isActive, + trackedAlertRecoveredIds + ); + + const { alertUuid, started, flapping, pendingRecoveredCount } = !isNew + ? state.trackedAlerts[alertId] + : { + alertUuid: lifecycleAlertServices.getAlertUuid(alertId), + started: commonRuleFields[TIMESTAMP], + flapping: state.trackedAlertsRecovered[alertId] + ? state.trackedAlertsRecovered[alertId].flapping + : false, + pendingRecoveredCount: 0, + }; + + const event: ParsedTechnicalFields & ParsedExperimentalFields = { + ...alertData?.fields, + ...commonRuleFields, + ...currentAlertData, + [ALERT_DURATION]: (options.startedAt.getTime() - new Date(started).getTime()) * 1000, + [ALERT_TIME_RANGE]: isRecovered + ? { + gte: started, + lte: commonRuleFields[TIMESTAMP], + } + : { gte: started }, + [ALERT_INSTANCE_ID]: alertId, + [ALERT_START]: started, + [ALERT_UUID]: alertUuid, + [ALERT_STATUS]: isRecovered ? ALERT_STATUS_RECOVERED : ALERT_STATUS_ACTIVE, + [ALERT_WORKFLOW_STATUS]: alertData?.fields[ALERT_WORKFLOW_STATUS] ?? 'open', + [EVENT_KIND]: 'signal', + [EVENT_ACTION]: isNew ? 'open' : isActive ? 'active' : 'close', + [TAGS]: Array.from( + new Set([ + ...(currentAlertData?.tags ?? []), + ...(alertData?.fields[TAGS] ?? []), + ...(options.rule.tags ?? []), + ]) + ), + [VERSION]: ruleDataClient.kibanaVersion, + [ALERT_FLAPPING]: flapping, + ...(isRecovered ? { [ALERT_END]: commonRuleFields[TIMESTAMP] } : {}), + ...(isNew && maintenanceWindowIds?.length + ? { [ALERT_MAINTENANCE_WINDOW_IDS]: maintenanceWindowIds } + : {}), + }; + + return { + indexName: alertData?.indexName, + seqNo: alertData?.seqNo, + primaryTerm: alertData?.primaryTerm, + event, + flappingHistory, + flapping, + pendingRecoveredCount, + }; + }); const trackedEventsToIndex = makeEventsDataMapFor(trackedAlertIds); const newEventsToIndex = makeEventsDataMapFor(newAlertIds); diff --git a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts index bbdd4806b55e7..fc5fc1b4b9547 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts @@ -437,7 +437,12 @@ describe('createLifecycleRuleTypeFactory', () => { helpers.ruleDataClientMock.getReader().search.mockResolvedValueOnce({ hits: { hits: [ - { _source: lastOpbeansNodeDoc, _index: 'a', _primary_term: 4, _seq_no: 2 } as any, + { + _source: lastOpbeansNodeDoc, + _index: '.alerts-a', + _primary_term: 4, + _seq_no: 2, + } as any, ], total: { value: 1, diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts index 86689c03ab96b..cd919f0725a23 100644 --- a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts +++ b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts @@ -87,6 +87,7 @@ describe(`feature_privilege_builder`, () => { "alerting:alert-type/my-feature/rule/getRuleState", "alerting:alert-type/my-feature/rule/getAlertSummary", "alerting:alert-type/my-feature/rule/getExecutionLog", + "alerting:alert-type/my-feature/rule/getActionErrorLog", "alerting:alert-type/my-feature/rule/find", "alerting:alert-type/my-feature/rule/getRuleExecutionKPI", "alerting:alert-type/my-feature/rule/runSoon", @@ -174,6 +175,7 @@ describe(`feature_privilege_builder`, () => { "alerting:alert-type/my-feature/rule/getRuleState", "alerting:alert-type/my-feature/rule/getAlertSummary", "alerting:alert-type/my-feature/rule/getExecutionLog", + "alerting:alert-type/my-feature/rule/getActionErrorLog", "alerting:alert-type/my-feature/rule/find", "alerting:alert-type/my-feature/rule/getRuleExecutionKPI", "alerting:alert-type/my-feature/rule/runSoon", @@ -221,6 +223,7 @@ describe(`feature_privilege_builder`, () => { "alerting:alert-type/my-feature/rule/getRuleState", "alerting:alert-type/my-feature/rule/getAlertSummary", "alerting:alert-type/my-feature/rule/getExecutionLog", + "alerting:alert-type/my-feature/rule/getActionErrorLog", "alerting:alert-type/my-feature/rule/find", "alerting:alert-type/my-feature/rule/getRuleExecutionKPI", "alerting:alert-type/my-feature/rule/runSoon", @@ -325,6 +328,7 @@ describe(`feature_privilege_builder`, () => { "alerting:alert-type/my-feature/rule/getRuleState", "alerting:alert-type/my-feature/rule/getAlertSummary", "alerting:alert-type/my-feature/rule/getExecutionLog", + "alerting:alert-type/my-feature/rule/getActionErrorLog", "alerting:alert-type/my-feature/rule/find", "alerting:alert-type/my-feature/rule/getRuleExecutionKPI", "alerting:alert-type/my-feature/rule/runSoon", @@ -389,6 +393,7 @@ describe(`feature_privilege_builder`, () => { "alerting:alert-type/my-feature/rule/getRuleState", "alerting:alert-type/my-feature/rule/getAlertSummary", "alerting:alert-type/my-feature/rule/getExecutionLog", + "alerting:alert-type/my-feature/rule/getActionErrorLog", "alerting:alert-type/my-feature/rule/find", "alerting:alert-type/my-feature/rule/getRuleExecutionKPI", "alerting:alert-type/my-feature/rule/runSoon", @@ -412,6 +417,7 @@ describe(`feature_privilege_builder`, () => { "alerting:readonly-alert-type/my-feature/rule/getRuleState", "alerting:readonly-alert-type/my-feature/rule/getAlertSummary", "alerting:readonly-alert-type/my-feature/rule/getExecutionLog", + "alerting:readonly-alert-type/my-feature/rule/getActionErrorLog", "alerting:readonly-alert-type/my-feature/rule/find", "alerting:readonly-alert-type/my-feature/rule/getRuleExecutionKPI", "alerting:readonly-alert-type/my-feature/rule/runSoon", @@ -504,6 +510,7 @@ describe(`feature_privilege_builder`, () => { "alerting:alert-type/my-feature/rule/getRuleState", "alerting:alert-type/my-feature/rule/getAlertSummary", "alerting:alert-type/my-feature/rule/getExecutionLog", + "alerting:alert-type/my-feature/rule/getActionErrorLog", "alerting:alert-type/my-feature/rule/find", "alerting:alert-type/my-feature/rule/getRuleExecutionKPI", "alerting:alert-type/my-feature/rule/runSoon", @@ -527,6 +534,7 @@ describe(`feature_privilege_builder`, () => { "alerting:readonly-alert-type/my-feature/rule/getRuleState", "alerting:readonly-alert-type/my-feature/rule/getAlertSummary", "alerting:readonly-alert-type/my-feature/rule/getExecutionLog", + "alerting:readonly-alert-type/my-feature/rule/getActionErrorLog", "alerting:readonly-alert-type/my-feature/rule/find", "alerting:readonly-alert-type/my-feature/rule/getRuleExecutionKPI", "alerting:readonly-alert-type/my-feature/rule/runSoon", diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts index 612981c9ffb0c..871b1cfee169e 100644 --- a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts +++ b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts @@ -22,6 +22,7 @@ const readOperations: Record = { 'getRuleState', 'getAlertSummary', 'getExecutionLog', + 'getActionErrorLog', 'find', 'getRuleExecutionKPI', 'runSoon', diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.tsx index 0f113efe317aa..60296da8d43cd 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/components/correlations_details_alerts_table.tsx @@ -6,7 +6,7 @@ */ import type { ReactElement, ReactNode } from 'react'; -import React, { type FC, useMemo, useCallback } from 'react'; +import React, { type VFC, useMemo, useCallback } from 'react'; import { type Criteria, EuiBasicTable, formatDate } from '@elastic/eui'; import { Severity } from '@kbn/securitysolution-io-ts-alerting-types'; import type { Filter } from '@kbn/es-query'; @@ -14,6 +14,7 @@ import { isRight } from 'fp-ts/lib/Either'; import { ALERT_REASON, ALERT_RULE_NAME } from '@kbn/rule-data-utils'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; +import { CellTooltipWrapper } from '../../shared/components/cell_tooltip_wrapper'; import type { DataProvider } from '../../../../common/types'; import { SeverityBadge } from '../../../detections/components/rules/severity_badge'; import { usePaginatedAlerts } from '../hooks/use_paginated_alerts'; @@ -36,7 +37,14 @@ export const columns = [ ), truncateText: true, dataType: 'date' as const, - render: (value: string) => formatDate(value, TIMESTAMP_DATE_FORMAT), + render: (value: string) => { + const date = formatDate(value, TIMESTAMP_DATE_FORMAT); + return ( + + {date} + + ); + }, }, { field: ALERT_RULE_NAME, @@ -47,6 +55,11 @@ export const columns = [ /> ), truncateText: true, + render: (value: string) => ( + + {value} + + ), }, { field: ALERT_REASON, @@ -57,6 +70,11 @@ export const columns = [ /> ), truncateText: true, + render: (value: string) => ( + + {value} + + ), }, { field: 'kibana.alert.severity', @@ -69,7 +87,12 @@ export const columns = [ truncateText: true, render: (value: string) => { const decodedSeverity = Severity.decode(value); - return isRight(decodedSeverity) ? : value; + const renderValue = isRight(decodedSeverity) ? ( + + ) : ( +

{value}

+ ); + return {renderValue}; }, }, ]; @@ -108,7 +131,7 @@ export interface CorrelationsDetailsAlertsTableProps { /** * Renders paginated alert array based on the provided alertIds */ -export const CorrelationsDetailsAlertsTable: FC = ({ +export const CorrelationsDetailsAlertsTable: VFC = ({ title, loading, alertIds, diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.tsx index 10244240bfc60..4af7c2feeeb46 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/components/prevalence_details.tsx @@ -363,6 +363,7 @@ export const PrevalenceDetails: React.FC = () => { end={end} onTimeChange={onTimeChange} data-test-subj={PREVALENCE_DETAILS_DATE_PICKER_TEST_ID} + width="full" /> {data.length > 0 ? ( diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx index 5818b9314390c..76a97e6e71053 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx @@ -10,6 +10,7 @@ import type { EuiBasicTableColumn } from '@elastic/eui'; import { EuiInMemoryTable, EuiSkeletonText } from '@elastic/eui'; import type { RelatedCase } from '@kbn/cases-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; +import { CellTooltipWrapper } from '../../shared/components/cell_tooltip_wrapper'; import { CaseDetailsLink } from '../../../common/components/links'; import { CORRELATIONS_DETAILS_CASES_SECTION_TABLE_TEST_ID, @@ -29,11 +30,12 @@ const columns: Array> = [ defaultMessage="Name" /> ), - truncateText: true, render: (value: string, caseData: RelatedCase) => ( - - {caseData.title} - + + + {caseData.title} + + ), }, { @@ -45,6 +47,7 @@ const columns: Array> = [ /> ), truncateText: true, + width: '25%', }, ]; diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.tsx index fd582b37d6fcb..b059bcd1138d0 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/analyzer_preview_container.tsx @@ -64,7 +64,17 @@ export const AnalyzerPreviewContainer: React.FC = () => { /> ), iconType: 'timeline', - ...(isEnabled && { callback: goToAnalyzerTab }), + ...(isEnabled && { + link: { + callback: goToAnalyzerTab, + tooltip: ( + + ), + }, + }), }} data-test-subj={ANALYZER_PREVIEW_TEST_ID} > diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx index b9dddc7d07ac4..1911d3a6fb5dd 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/correlations_overview.tsx @@ -90,7 +90,15 @@ export const CorrelationsOverview: React.FC = () => { defaultMessage="Correlations" /> ), - callback: goToCorrelationsTab, + link: { + callback: goToCorrelationsTab, + tooltip: ( + + ), + }, iconType: 'arrowStart', }} data-test-subj={CORRELATIONS_TEST_ID} diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx index ff2c314ec76f4..52ac44137a1d6 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/entities_overview.tsx @@ -52,7 +52,15 @@ export const EntitiesOverview: React.FC = () => { defaultMessage="Entities" /> ), - callback: goToEntitiesTab, + link: { + callback: goToEntitiesTab, + tooltip: ( + + ), + }, iconType: 'arrowStart', }} data-test-subj={INSIGHTS_ENTITIES_TEST_ID} diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx index 5f682462d059e..36bb9c7c5b169 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/prevalence_overview.tsx @@ -31,7 +31,7 @@ export const PrevalenceOverview: FC = () => { useRightPanelContext(); const { openLeftPanel } = useExpandableFlyoutContext(); - const goToCorrelationsTab = useCallback(() => { + const goPrevalenceTab = useCallback(() => { openLeftPanel({ id: LeftPanelKey, path: { @@ -76,7 +76,15 @@ export const PrevalenceOverview: FC = () => { defaultMessage="Prevalence" /> ), - callback: goToCorrelationsTab, + link: { + callback: goPrevalenceTab, + tooltip: ( + + ), + }, iconType: 'arrowStart', }} content={{ loading, error }} diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx index 1bfca23f84ffa..889d0c2f62c04 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/session_preview.tsx @@ -8,6 +8,7 @@ import { EuiCode, EuiIcon, useEuiTheme } from '@elastic/eui'; import type { ReactElement } from 'react'; import React, { useMemo, type FC } from 'react'; +import { css } from '@emotion/react'; import { FormattedMessage } from '@kbn/i18n-react'; import { SESSION_PREVIEW_TEST_ID } from './test_ids'; import { useRightPanelContext } from '../context'; @@ -127,7 +128,12 @@ export const SessionPreview: FC = () => { }, [command, workdir]); return ( -
+
  diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.tsx index e3fe9a191ebcb..3fc3905ca6da9 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/session_preview_container.tsx @@ -130,7 +130,17 @@ export const SessionPreviewContainer: FC = () => { /> ), iconType: 'timeline', - ...(isEnabled && { callback: goToSessionViewTab }), + ...(isEnabled && { + link: { + callback: goToSessionViewTab, + tooltip: ( + + ), + }, + }), }} data-test-subj={SESSION_PREVIEW_TEST_ID} > diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx index 0175d44e4f4bd..7fbcd048a1197 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/threat_intelligence_overview.tsx @@ -55,7 +55,15 @@ export const ThreatIntelligenceOverview: FC = () => { defaultMessage="Threat intelligence" /> ), - callback: goToThreatIntelligenceTab, + link: { + callback: goToThreatIntelligenceTab, + tooltip: ( + + ), + }, iconType: 'arrowStart', }} data-test-subj={INSIGHTS_THREAT_INTELLIGENCE_TEST_ID} diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.test.tsx new file mode 100644 index 0000000000000..3e6b6d7e47f8a --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.test.tsx @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { CellTooltipWrapper } from './cell_tooltip_wrapper'; + +const TEST_ID = 'test-id'; +const children =

{'test content'}

; + +describe('', () => { + it('should render non-expandable panel by default', () => { + const { getByTestId } = render( + {children} + ); + expect(getByTestId(TEST_ID)).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.tsx new file mode 100644 index 0000000000000..39bbd08fc3ba6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/cell_tooltip_wrapper.tsx @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { VFC, ReactElement } from 'react'; +import React from 'react'; +import { EuiToolTip } from '@elastic/eui'; + +export interface CellTooltipWrapperProps { + /** + * Value displayed in the tooltip and in the cell itself + */ + tooltip: string | ReactElement; + /** + * Tooltip anchor position + */ + anchorPosition?: 'left' | 'right' | 'top' | 'bottom'; + /** + * React components to render + */ + children: React.ReactElement; +} + +export const CellTooltipWrapper: VFC = ({ + tooltip, + anchorPosition = 'top', + children, +}) => ( + + {children} + +); diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx index 1de328f5c44b6..4f06ce9a45eb4 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx @@ -18,6 +18,7 @@ import { EuiText, EuiLoadingSpinner, useEuiTheme, + EuiToolTip, } from '@elastic/eui'; import type { IconType } from '@elastic/eui'; import { css } from '@emotion/react'; @@ -28,10 +29,16 @@ export interface ExpandablePanelPanelProps { * String value of the title to be displayed in the header of panel */ title: string | React.ReactNode; - /** - * Callback function to be called when the title is clicked - */ - callback?: () => void; + link?: { + /** + * Callback function to be called when the title is clicked + */ + callback: () => void; + /** + * Tooltip text to be displayed around the title link + */ + tooltip: React.ReactNode; + }; /** * Icon string for displaying the specified icon in the header */ @@ -74,7 +81,7 @@ export interface ExpandablePanelPanelProps { * The component can be expanded or collapsed by clicking on the chevron icon on the left of the title. */ export const ExpandablePanel: React.FC = ({ - header: { title, callback, iconType, headerContent }, + header: { title, link, iconType, headerContent }, content: { loading, error } = { loading: false, error: false }, expand: { expandable, expandedOnFirstRender } = { expandable: false, @@ -116,7 +123,7 @@ export const ExpandablePanel: React.FC = ({ {expandable && children && toggleIcon} = ({ /> - {callback ? ( - - {title} - + {link?.callback ? ( + + + {title} + + ) : ( {title} @@ -145,7 +154,17 @@ export const ExpandablePanel: React.FC = ({ ), - [dataTestSubj, expandable, children, toggleIcon, callback, iconType, euiTheme.size.s, title] + [ + dataTestSubj, + expandable, + children, + toggleIcon, + link?.callback, + iconType, + euiTheme.size.s, + link?.tooltip, + title, + ] ); const headerRightSection = useMemo( diff --git a/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx b/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx index 554cf1d417994..c78aecf44d84e 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx @@ -22,9 +22,18 @@ type FlyoutState = Parameters[0]; export const useSyncFlyoutStateWithUrl = () => { const flyoutApi = useRef(null); - const syncStateToUrl = useSyncToUrl(FLYOUT_URL_PARAM, (data) => { - flyoutApi.current?.openFlyout(data); - }); + const handleRestoreFlyout = useCallback( + (state?: FlyoutState) => { + if (!state) { + return; + } + + flyoutApi.current?.openFlyout(state); + }, + [flyoutApi] + ); + + const syncStateToUrl = useSyncToUrl(FLYOUT_URL_PARAM, handleRestoreFlyout); // This should be bound to flyout changed and closed events. // When flyout is closed, url state is cleared diff --git a/x-pack/plugins/session_view/server/routes/alerts_client_mock.test.ts b/x-pack/plugins/session_view/server/routes/alerts_client_mock.test.ts index 282d4297d3670..10f1c48977c34 100644 --- a/x-pack/plugins/session_view/server/routes/alerts_client_mock.test.ts +++ b/x-pack/plugins/session_view/server/routes/alerts_client_mock.test.ts @@ -57,6 +57,7 @@ const getResponse = async () => { }; const esClientMock = elasticsearchServiceMock.createElasticsearchClient(getResponse()); +const getAlertIndicesAliasMock = jest.fn(); const alertsClientParams: jest.Mocked = { logger: loggingSystemMock.create().get(), authorization: alertingAuthMock, @@ -64,6 +65,7 @@ const alertsClientParams: jest.Mocked = { ruleDataService: ruleDataServiceMock.create(), esClient: esClientMock, getRuleType: jest.fn(), + getAlertIndicesAlias: getAlertIndicesAliasMock, }; export function getAlertsClientMockInstance(esClient?: ElasticsearchClient) { @@ -86,6 +88,20 @@ export function resetAlertingAuthMock() { authorizedRuleTypes.add({ producer: 'apm' }); return Promise.resolve({ authorizedRuleTypes }); }); + // @ts-expect-error + alertingAuthMock.getAuthorizedRuleTypes.mockImplementation(async () => { + const authorizedRuleTypes = [ + { + producer: 'apm', + id: 'apm.error_rate', + alerts: { + context: 'observability.apm', + }, + }, + ]; + return Promise.resolve(authorizedRuleTypes); + }); + getAlertIndicesAliasMock.mockReturnValue(['.alerts-observability.apm-default']); alertingAuthMock.ensureAuthorized.mockImplementation( // @ts-expect-error diff --git a/x-pack/plugins/stack_alerts/common/constants.ts b/x-pack/plugins/stack_alerts/common/constants.ts index e846b249081e0..a2be12ee63867 100644 --- a/x-pack/plugins/stack_alerts/common/constants.ts +++ b/x-pack/plugins/stack_alerts/common/constants.ts @@ -5,6 +5,4 @@ * 2.0. */ -export const STACK_ALERTS_FEATURE_ID = 'stackAlerts'; - export const MAX_SELECTABLE_GROUP_BY_TERMS = 4; diff --git a/x-pack/plugins/stack_alerts/common/index.ts b/x-pack/plugins/stack_alerts/common/index.ts index afafef61eb76b..60537366f26cb 100644 --- a/x-pack/plugins/stack_alerts/common/index.ts +++ b/x-pack/plugins/stack_alerts/common/index.ts @@ -11,7 +11,6 @@ export { ComparatorFnNames, getHumanReadableComparator, } from './comparator'; -export { STACK_ALERTS_FEATURE_ID } from './constants'; export type { EsqlTable } from './esql_query_utils'; export { rowToDocument, transformDatatableToEsqlTable, toEsQueryHits } from './esql_query_utils'; diff --git a/x-pack/plugins/stack_alerts/kibana.jsonc b/x-pack/plugins/stack_alerts/kibana.jsonc index 73b81c6dfd352..5c7bec1a37a0a 100644 --- a/x-pack/plugins/stack_alerts/kibana.jsonc +++ b/x-pack/plugins/stack_alerts/kibana.jsonc @@ -24,6 +24,7 @@ "requiredBundles": [ "esUiShared", "textBasedLanguages" - ] + ], + "extraPublicDirs": ["common"] } } diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx index b6c4cdd72bf62..7117455d30cc1 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/search_source_expression_form.tsx @@ -24,9 +24,9 @@ import { isGroupAggregation, parseAggregationResults, } from '@kbn/triggers-actions-ui-plugin/public/common'; +import { STACK_ALERTS_FEATURE_ID } from '@kbn/rule-data-utils'; import { getComparatorScript } from '../../../../common'; import { Comparator } from '../../../../common/comparator_types'; -import { STACK_ALERTS_FEATURE_ID } from '../../../../common'; import { CommonRuleParams, EsQueryRuleMetaData, EsQueryRuleParams, SearchType } from '../types'; import { DEFAULT_VALUES } from '../constants'; import { DataViewSelectPopover } from '../../components/data_view_select_popover'; diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts index 6ee6079e6683c..7ffd10adce528 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts @@ -10,17 +10,17 @@ import { i18n } from '@kbn/i18n'; import { RuleTypeModel } from '@kbn/triggers-actions-ui-plugin/public'; import { PluginSetupContract as AlertingSetup } from '@kbn/alerting-plugin/public'; import { SanitizedRule } from '@kbn/alerting-plugin/common'; +import { ES_QUERY_ID, STACK_ALERTS_FEATURE_ID } from '@kbn/rule-data-utils'; import { EsQueryRuleParams, SearchType } from './types'; import { validateExpression } from './validation'; +import { isSearchSourceRule } from './util'; const PLUGIN_ID = 'discover'; -const ES_QUERY_ALERT_TYPE = '.es-query'; export function getRuleType(alerting: AlertingSetup): RuleTypeModel { registerNavigation(alerting); - return { - id: ES_QUERY_ALERT_TYPE, + id: ES_QUERY_ID, description: i18n.translate('xpack.stackAlerts.esQuery.ui.alertType.descriptionText', { defaultMessage: 'Alert when matches are found during the latest query run.', }), @@ -46,9 +46,33 @@ export function getRuleType(alerting: AlertingSetup): RuleTypeModel>) => { - return `/app/discover#/viewAlert/${alert.id}`; + ES_QUERY_ID, + (rule: SanitizedRule>) => { + return `/app/discover#/viewAlert/${rule.id}`; + } + ); + alerting.registerNavigation( + STACK_ALERTS_FEATURE_ID, + ES_QUERY_ID, + (rule: SanitizedRule>) => { + if (isSearchSourceRule(rule.params)) return `/app/discover#/viewAlert/${rule.id}`; + return; + } + ); + alerting.registerNavigation( + 'logs', + ES_QUERY_ID, + (rule: SanitizedRule>) => { + if (isSearchSourceRule(rule.params)) return `/app/discover#/viewAlert/${rule.id}`; + return; + } + ); + alerting.registerNavigation( + 'infrastructure', + ES_QUERY_ID, + (rule: SanitizedRule>) => { + if (isSearchSourceRule(rule.params)) return `/app/discover#/viewAlert/${rule.id}`; + return; } ); } diff --git a/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/query_input.tsx b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/query_input.tsx index c07ce2ec8e090..5a578276dbdd0 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/query_input.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/rule_form/query_input.tsx @@ -19,7 +19,7 @@ import type { IStorageWrapper } from '@kbn/kibana-utils-plugin/public'; import type { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { STACK_ALERTS_FEATURE_ID } from '../../../../common/constants'; +import { STACK_ALERTS_FEATURE_ID } from '@kbn/rule-data-utils'; function validateQuery(query: Query) { try { diff --git a/x-pack/plugins/stack_alerts/server/feature.ts b/x-pack/plugins/stack_alerts/server/feature.ts index 7392ee2e5eb9e..1a54134d2cdc1 100644 --- a/x-pack/plugins/stack_alerts/server/feature.ts +++ b/x-pack/plugins/stack_alerts/server/feature.ts @@ -9,10 +9,10 @@ import { i18n } from '@kbn/i18n'; import { KibanaFeatureConfig } from '@kbn/features-plugin/common'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { TRANSFORM_RULE_TYPE } from '@kbn/transform-plugin/common'; +import { STACK_ALERTS_FEATURE_ID } from '@kbn/rule-data-utils'; +import { ES_QUERY_ID as ElasticsearchQuery } from '@kbn/rule-data-utils'; import { ID as IndexThreshold } from './rule_types/index_threshold/rule_type'; import { GEO_CONTAINMENT_ID as GeoContainment } from './rule_types/geo_containment'; -import { ES_QUERY_ID as ElasticsearchQuery } from './rule_types/es_query/constants'; -import { STACK_ALERTS_FEATURE_ID } from '../common'; const TransformHealth = TRANSFORM_RULE_TYPE.TRANSFORM_HEALTH; diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/constants.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/constants.ts index 700cba4680bff..598fe60f58c84 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/constants.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/constants.ts @@ -5,6 +5,5 @@ * 2.0. */ -export const ES_QUERY_ID = '.es-query'; export const ActionGroupId = 'query matched'; export const ConditionMetAlertInstanceId = 'query matched'; diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_es_query.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_es_query.ts index 8c44c6e673ad2..f44ad3f470106 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_es_query.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_es_query.ts @@ -12,10 +12,10 @@ import { parseAggregationResults, } from '@kbn/triggers-actions-ui-plugin/common'; import { isGroupAggregation } from '@kbn/triggers-actions-ui-plugin/common'; +import { ES_QUERY_ID } from '@kbn/rule-data-utils'; import { getComparatorScript } from '../../../../common'; import { OnlyEsQueryRuleParams } from '../types'; import { buildSortedEventsQuery } from '../../../../common/build_sorted_events_query'; -import { ES_QUERY_ID } from '../constants'; import { getSearchParams } from './get_search_params'; export interface FetchEsQueryOpts { diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts index fc70403b174d3..f4657e28e644a 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts @@ -8,6 +8,7 @@ import { i18n } from '@kbn/i18n'; import { CoreSetup } from '@kbn/core/server'; import { extractReferences, injectReferences } from '@kbn/data-plugin/common'; +import { ES_QUERY_ID, STACK_ALERTS_FEATURE_ID } from '@kbn/rule-data-utils'; import { StackAlert } from '@kbn/alerts-as-data-utils'; import { STACK_ALERTS_AAD_CONFIG } from '..'; import { RuleType } from '../../types'; @@ -18,9 +19,8 @@ import { EsQueryRuleParamsSchema, EsQueryRuleState, } from './rule_type_params'; -import { STACK_ALERTS_FEATURE_ID } from '../../../common'; import { ExecutorOptions } from './types'; -import { ActionGroupId, ES_QUERY_ID } from './constants'; +import { ActionGroupId } from './constants'; import { executor } from './executor'; import { isSearchSourceRule } from './util'; diff --git a/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/rule_type.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/rule_type.ts index 938edad8cb394..f6d1668151843 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/rule_type.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/rule_type.ts @@ -9,7 +9,7 @@ import { i18n } from '@kbn/i18n'; import { schema } from '@kbn/config-schema'; import { SavedObjectReference } from '@kbn/core/server'; import { RuleParamsAndRefs } from '@kbn/alerting-plugin/server'; -import { STACK_ALERTS_FEATURE_ID } from '../../../common'; +import { STACK_ALERTS_FEATURE_ID } from '@kbn/rule-data-utils'; import type { GeoContainmentRuleType, GeoContainmentExtractedRuleParams, diff --git a/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts index caec66b632b5d..a2e27231c76f9 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts @@ -12,15 +12,14 @@ import { } from '@kbn/triggers-actions-ui-plugin/server'; import { isGroupAggregation } from '@kbn/triggers-actions-ui-plugin/common'; import { StackAlert } from '@kbn/alerts-as-data-utils'; -import { ALERT_EVALUATION_VALUE, ALERT_REASON } from '@kbn/rule-data-utils'; -import { expandFlattenedAlert } from '@kbn/alerting-plugin/server/alerts_client/lib'; -import { ALERT_EVALUATION_CONDITIONS, ALERT_TITLE, STACK_ALERTS_AAD_CONFIG } from '..'; import { - ComparatorFns, - getComparatorScript, - getHumanReadableComparator, + ALERT_EVALUATION_VALUE, + ALERT_REASON, STACK_ALERTS_FEATURE_ID, -} from '../../../common'; +} from '@kbn/rule-data-utils'; +import { expandFlattenedAlert } from '@kbn/alerting-plugin/server/alerts_client/lib'; +import { ALERT_EVALUATION_CONDITIONS, ALERT_TITLE, STACK_ALERTS_AAD_CONFIG } from '..'; +import { ComparatorFns, getComparatorScript, getHumanReadableComparator } from '../../../common'; import { ActionContext, BaseActionContext, addMessages } from './action_context'; import { Params, ParamsSchema } from './rule_type_params'; import { RuleType, RuleExecutorOptions, StackAlertsStartDeps } from '../../types'; diff --git a/x-pack/plugins/stack_alerts/tsconfig.json b/x-pack/plugins/stack_alerts/tsconfig.json index 08a4f0ca99e9c..8eb5d48f39048 100644 --- a/x-pack/plugins/stack_alerts/tsconfig.json +++ b/x-pack/plugins/stack_alerts/tsconfig.json @@ -32,12 +32,6 @@ "@kbn/i18n-react", "@kbn/charts-plugin", "@kbn/es-ui-shared-plugin", - "@kbn/core-http-browser", - "@kbn/core-doc-links-browser", - "@kbn/core-ui-settings-server", - "@kbn/kibana-utils-plugin", - "@kbn/usage-collection-plugin", - "@kbn/react-field", "@kbn/core-elasticsearch-server-mocks", "@kbn/logging-mocks", "@kbn/share-plugin", @@ -47,6 +41,12 @@ "@kbn/text-based-languages", "@kbn/text-based-editor", "@kbn/expressions-plugin", + "@kbn/core-http-browser", + "@kbn/core-doc-links-browser", + "@kbn/core-ui-settings-server", + "@kbn/kibana-utils-plugin", + "@kbn/usage-collection-plugin", + "@kbn/react-field", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx index a7ab9c4e7d56f..05860378fca34 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx @@ -514,13 +514,9 @@ export const FIELD = (readOnly?: boolean): FieldMap => ({ formState.defaultValues?.[ConfigKey.MONITOR_SOURCE_TYPE] === SourceType.PROJECT; return { id: 'syntheticsMonitorConfigIsAlertEnabled', - label: field?.value - ? i18n.translate('xpack.synthetics.monitorConfig.enabledAlerting.label', { - defaultMessage: 'Disable status alerts on this monitor', - }) - : i18n.translate('xpack.synthetics.monitorConfig.disabledAlerting.label', { - defaultMessage: 'Enable status alerts on this monitor', - }), + label: i18n.translate('xpack.synthetics.monitorConfig.disabledAlerting.label', { + defaultMessage: 'Enable status alerts on this monitor', + }), checked: field?.value || false, onChange: async (event) => { setValue(AlertConfigKey.STATUS_ENABLED, !!event.target.checked); @@ -541,13 +537,9 @@ export const FIELD = (readOnly?: boolean): FieldMap => ({ formState.defaultValues?.[ConfigKey.MONITOR_SOURCE_TYPE] === SourceType.PROJECT; return { id: 'syntheticsMonitorConfigIsTlsAlertEnabled', - label: field?.value - ? i18n.translate('xpack.synthetics.monitorConfig.edit.alertTlsEnabled.label', { - defaultMessage: 'Disable TLS alerts on this monitor.', - }) - : i18n.translate('xpack.synthetics.monitorConfig.create.alertTlsEnabled.label', { - defaultMessage: 'Enable TLS alerts on this monitor.', - }), + label: i18n.translate('xpack.synthetics.monitorConfig.create.alertTlsEnabled.label', { + defaultMessage: 'Enable TLS alerts on this monitor.', + }), checked: field?.value || false, onChange: async (event) => { setValue(AlertConfigKey.TLS_ENABLED, !!event.target.checked); diff --git a/x-pack/plugins/synthetics/server/feature.ts b/x-pack/plugins/synthetics/server/feature.ts index 1a19baa01dcbe..951fdaf33c536 100644 --- a/x-pack/plugins/synthetics/server/feature.ts +++ b/x-pack/plugins/synthetics/server/feature.ts @@ -6,7 +6,6 @@ */ import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; import { i18n } from '@kbn/i18n'; import { SubFeaturePrivilegeGroupConfig, @@ -26,11 +25,7 @@ const UPTIME_RULE_TYPES = [ 'xpack.uptime.alerts.durationAnomaly', ]; -const ruleTypes = [ - ...UPTIME_RULE_TYPES, - ...SYNTHETICS_RULE_TYPES, - OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, -]; +const ruleTypes = [...UPTIME_RULE_TYPES, ...SYNTHETICS_RULE_TYPES]; const elasticManagedLocationsEnabledPrivilege: SubFeaturePrivilegeGroupConfig = { groupType: 'independent' as SubFeaturePrivilegeGroupType, diff --git a/x-pack/plugins/transform/public/app/hooks/use_index_data.ts b/x-pack/plugins/transform/public/app/hooks/use_index_data.ts index 4534552f6b405..471146f583dc8 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_index_data.ts +++ b/x-pack/plugins/transform/public/app/hooks/use_index_data.ts @@ -310,6 +310,8 @@ export const useIndexData = ( if ( dataGrid.status === INDEX_STATUS.LOADED && dataViewFields !== undefined && + Array.isArray(histogramsForFieldsData) && + histogramsForFieldsData.length > 0 && loadIndexDataStartTime.current !== undefined ) { const loadIndexDataDuration = window.performance.now() - loadIndexDataStartTime.current; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 05fb32bab24fe..150f72792a861 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -36623,10 +36623,8 @@ "xpack.synthetics.monitorConfig.clientKeyPassphrase.label": "Phrase secrète de la clé de client", "xpack.synthetics.monitorConfig.create.alertTlsEnabled.label": "Activez les alertes TLS sur ce moniteur.", "xpack.synthetics.monitorConfig.customTLS.label": "Utiliser la configuration TLS personnalisée", - "xpack.synthetics.monitorConfig.edit.alertTlsEnabled.label": "La désactivation arrête les alertes TLS sur ce moniteur.", "xpack.synthetics.monitorConfig.edit.enabled.label": "Une fois désactivé, le moniteur n’exécute aucun test. Vous pouvez l’activer à tout moment.", "xpack.synthetics.monitorConfig.enabled.label": "Activer le moniteur", - "xpack.synthetics.monitorConfig.enabledAlerting.label": "Activer les alertes de statut", "xpack.synthetics.monitorConfig.frequency.helpText": "À quelle fréquence voulez-vous exécuter ce test ? Les fréquences les plus élevées augmenteront votre coût total.", "xpack.synthetics.monitorConfig.frequency.label": "Fréquence", "xpack.synthetics.monitorConfig.hostsICMP.label": "Hôte", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 13413d0702104..41096d8c2e990 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -36622,10 +36622,8 @@ "xpack.synthetics.monitorConfig.clientKeyPassphrase.label": "クライアントキーパスフレーズ", "xpack.synthetics.monitorConfig.create.alertTlsEnabled.label": "このモニターでTLSアラートを有効化します。", "xpack.synthetics.monitorConfig.customTLS.label": "カスタムTLS構成を使用", - "xpack.synthetics.monitorConfig.edit.alertTlsEnabled.label": "無効化すると、このモニターでTLSアラートを停止します。", "xpack.synthetics.monitorConfig.edit.enabled.label": "無効化すると、モニターはテストを実行しません。いつでも有効化できます。", "xpack.synthetics.monitorConfig.enabled.label": "モニターを有効にする", - "xpack.synthetics.monitorConfig.enabledAlerting.label": "ステータスアラートを有効にする", "xpack.synthetics.monitorConfig.frequency.helpText": "このテストをどの程度の頻度で実行しますか?頻度が高いほど、合計コストが上がります。", "xpack.synthetics.monitorConfig.frequency.label": "頻度", "xpack.synthetics.monitorConfig.hostsICMP.label": "ホスト", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 7153e939084aa..b17bf98b8ad3a 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -36616,10 +36616,8 @@ "xpack.synthetics.monitorConfig.clientKeyPassphrase.label": "客户端密钥密码", "xpack.synthetics.monitorConfig.create.alertTlsEnabled.label": "在此监测上启用 TLS 告警。", "xpack.synthetics.monitorConfig.customTLS.label": "使用定制 TLS 配置", - "xpack.synthetics.monitorConfig.edit.alertTlsEnabled.label": "禁用会在此监测上停止 TLS 告警。", "xpack.synthetics.monitorConfig.edit.enabled.label": "如果禁用,则此监测不会运行任何测试。您可以随时启用该项。", "xpack.synthetics.monitorConfig.enabled.label": "启用监测", - "xpack.synthetics.monitorConfig.enabledAlerting.label": "启用状态告警", "xpack.synthetics.monitorConfig.frequency.helpText": "您要多久运行此测试一次?频率越高,总成本越高。", "xpack.synthetics.monitorConfig.frequency.label": "频率", "xpack.synthetics.monitorConfig.hostsICMP.label": "主机", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/constants/index.ts b/x-pack/plugins/triggers_actions_ui/public/application/constants/index.ts index 11e93713cbbc1..bf4cafcf63da9 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/constants/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/constants/index.ts @@ -6,7 +6,7 @@ */ import { i18n } from '@kbn/i18n'; - +import { ES_QUERY_ID, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; export { BASE_ALERTING_API_PATH, INTERNAL_BASE_ALERTING_API_PATH, @@ -119,3 +119,5 @@ export const CONNECTOR_LOCKED_COLUMNS = ['timestamp', 'status', 'connector_name' export const GLOBAL_CONNECTOR_EXECUTION_DEFAULT_INITIAL_VISIBLE_COLUMNS = [ ...CONNECTOR_LOCKED_COLUMNS, ]; + +export const MULTI_CONSUMER_RULE_TYPE_IDS = [OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, ES_QUERY_ID]; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rule_aggregations_query.ts b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rule_aggregations_query.ts index a581fea1832b7..b7f5be0325729 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rule_aggregations_query.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rule_aggregations_query.ts @@ -25,11 +25,12 @@ const initializeAggregationResult = (values: readonly string[]) => { interface UseLoadRuleAggregationsQueryProps { filters: RulesListFilters; enabled: boolean; + filterConsumers?: string[]; refresh?: Date; } export const useLoadRuleAggregationsQuery = (props: UseLoadRuleAggregationsQueryProps) => { - const { filters, enabled, refresh } = props; + const { filters, enabled, refresh, filterConsumers } = props; const { http, @@ -46,6 +47,7 @@ export const useLoadRuleAggregationsQuery = (props: UseLoadRuleAggregationsQuery ruleLastRunOutcomesFilter: filters.ruleLastRunOutcomes, ruleStatusesFilter: filters.ruleStatuses, tagsFilter: filters.tags, + filterConsumers, }); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules_query.ts b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules_query.ts index d4e045ae038af..90bfea7719b07 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules_query.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_load_rules_query.ts @@ -20,10 +20,11 @@ type UseLoadRulesQueryProps = Omit & { sort: LoadRulesProps['sort']; enabled: boolean; refresh?: Date; + filterConsumers?: string[]; }; export const useLoadRulesQuery = (props: UseLoadRulesQueryProps) => { - const { filters, page, sort, onPage, enabled, refresh } = props; + const { filterConsumers, filters, page, sort, onPage, enabled, refresh } = props; const { http, notifications: { toasts }, @@ -51,6 +52,7 @@ export const useLoadRulesQuery = (props: UseLoadRulesQueryProps) => { { refresh: refresh?.toISOString(), }, + filterConsumers, ], queryFn: () => { return loadRulesWithKueryFilter({ @@ -66,6 +68,7 @@ export const useLoadRulesQuery = (props: UseLoadRulesQueryProps) => { tagsFilter: filters.tags, kueryNode: filters.kueryNode, sort, + filterConsumers, }); }, onSuccess: (response) => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/capabilities.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/capabilities.ts index a995d697e8c54..c74b4b3fd6b90 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/capabilities.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/capabilities.ts @@ -29,8 +29,20 @@ export function hasAllPrivilege( ): boolean { return ruleType?.authorizedConsumers[ruleConsumer]?.all ?? false; } + +export function hasAllPrivilegeWithProducerCheck( + ruleConsumer: InitialRule['consumer'], + ruleType?: RuleType +): boolean { + if (ruleConsumer === ruleType?.producer) { + return true; + } + return hasAllPrivilege(ruleConsumer, ruleType); +} + export function hasReadPrivilege(rule: InitialRule, ruleType?: RuleType): boolean { return ruleType?.authorizedConsumers[rule.consumer]?.read ?? false; } + export const hasManageApiKeysCapability = (capabilities: Capabilities) => capabilities?.management?.security?.api_keys; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate.ts index a2f3e1eb80392..8edb10811bd8e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate.ts @@ -44,6 +44,7 @@ export async function loadRuleAggregations({ ruleExecutionStatusesFilter, ruleStatusesFilter, tagsFilter, + filterConsumers, }: LoadRuleAggregationsProps): Promise { const filters = mapFiltersToKql({ typesFilter, @@ -60,6 +61,7 @@ export async function loadRuleAggregations({ search: searchText, filter: filters.length ? filters.join(' and ') : undefined, default_search_operator: 'AND', + filter_consumers: filterConsumers, }), } ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate_helpers.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate_helpers.ts index d093649f73740..29462f07d5eec 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate_helpers.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate_helpers.ts @@ -67,6 +67,7 @@ export interface LoadRuleAggregationsProps { ruleLastRunOutcomesFilter?: string[]; ruleStatusesFilter?: RuleStatus[]; tagsFilter?: string[]; + filterConsumers?: string[]; } export interface LoadRuleTagsProps { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate_kuery_filter.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate_kuery_filter.ts index 23941ae36ccc5..a0e270ddf2f67 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate_kuery_filter.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate_kuery_filter.ts @@ -21,6 +21,7 @@ export async function loadRuleAggregationsWithKueryFilter({ ruleExecutionStatusesFilter, ruleStatusesFilter, tagsFilter, + filterConsumers, }: LoadRuleAggregationsProps): Promise { const filtersKueryNode = mapFiltersToKueryNode({ typesFilter, @@ -36,6 +37,7 @@ export async function loadRuleAggregationsWithKueryFilter({ { body: JSON.stringify({ ...(filtersKueryNode ? { filter: JSON.stringify(filtersKueryNode) } : {}), + filter_consumers: filterConsumers, default_search_operator: 'AND', }), } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rules_helpers.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rules_helpers.ts index ebab20adfb4a1..5effb3cd3c305 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rules_helpers.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rules_helpers.ts @@ -24,6 +24,7 @@ export interface LoadRulesProps { ruleStatusesFilter?: RuleStatus[]; sort?: Sorting; kueryNode?: KueryNode; + filterConsumers?: string[]; } export const rewriteRulesResponseRes = (results: Array>): Rule[] => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rules_kuery_filter.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rules_kuery_filter.ts index ee3a798e50738..9d38716d35028 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rules_kuery_filter.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rules_kuery_filter.ts @@ -24,6 +24,7 @@ export async function loadRulesWithKueryFilter({ tagsFilter, sort = { field: 'name', direction: 'asc' }, kueryNode, + filterConsumers, }: LoadRulesProps): Promise<{ page: number; perPage: number; @@ -56,6 +57,7 @@ export async function loadRulesWithKueryFilter({ ...(filtersKueryNode ? { filter: JSON.stringify(filtersKueryNode) } : {}), sort_field: sort.field, sort_order: sort.direction, + filter_consumers: filterConsumers, }), }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx index 92a1329b0e67a..4409be029092c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.test.tsx @@ -16,12 +16,16 @@ import RuleAdd from './rule_add'; import { createRule } from '../../lib/rule_api/create'; import { alertingFrameworkHealth } from '../../lib/rule_api/health'; import { actionTypeRegistryMock } from '../../action_type_registry.mock'; +import { AlertConsumers, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { Rule, RuleAddProps, RuleFlyoutCloseReason, GenericValidationResult, ValidationResult, + RuleCreationValidConsumer, + RuleType, + RuleTypeModel, } from '../../../types'; import { ruleTypeRegistryMock } from '../../rule_type_registry.mock'; import { ReactWrapper } from 'enzyme'; @@ -84,17 +88,30 @@ describe('rule_add', () => { }); let wrapper: ReactWrapper; - async function setup( - initialValues?: Partial, - onClose: RuleAddProps['onClose'] = jest.fn(), - defaultScheduleInterval?: string, - ruleTypeId?: string, - actionsShow: boolean = false - ) { + async function setup({ + initialValues, + onClose = jest.fn(), + defaultScheduleInterval, + ruleTypeId, + actionsShow = false, + validConsumers, + ruleTypesOverwrite, + ruleTypeModelOverwrite, + }: { + initialValues?: Partial; + onClose?: RuleAddProps['onClose']; + defaultScheduleInterval?: string; + ruleTypeId?: string; + actionsShow?: boolean; + validConsumers?: RuleCreationValidConsumer[]; + ruleTypesOverwrite?: RuleType[]; + ruleTypeModelOverwrite?: RuleTypeModel; + }) { const useKibanaMock = useKibana as jest.Mocked; const mocks = coreMock.createSetup(); const { loadRuleTypes } = jest.requireMock('../../lib/rule_api/rule_types'); - const ruleTypes = [ + + const ruleTypes = ruleTypesOverwrite || [ { id: 'my-rule-type', name: 'Test', @@ -144,7 +161,7 @@ describe('rule_add', () => { hasPermanentEncryptionKey: true, }); - const ruleType = { + const ruleType = ruleTypeModelOverwrite || { id: 'my-rule-type', iconClass: 'test', description: 'test', @@ -186,6 +203,7 @@ describe('rule_add', () => { ruleTypeRegistry={ruleTypeRegistry} metadata={{ test: 'some value', fields: ['test'] }} ruleTypeId={ruleTypeId} + validConsumers={validConsumers} /> ); @@ -201,7 +219,10 @@ describe('rule_add', () => { minimumScheduleInterval: { value: '1m', enforce: false }, }); const onClose = jest.fn(); - await setup({}, onClose); + await setup({ + initialValues: {}, + onClose, + }); await act(async () => { await nextTick(); @@ -223,7 +244,10 @@ describe('rule_add', () => { minimumScheduleInterval: { value: '1m', enforce: false }, }); const onClose = jest.fn(); - await setup({}, onClose); + await setup({ + initialValues: {}, + onClose, + }); await act(async () => { await nextTick(); @@ -245,8 +269,8 @@ describe('rule_add', () => { minimumScheduleInterval: { value: '1m', enforce: false }, }); const onClose = jest.fn(); - await setup( - { + await setup({ + initialValues: { name: 'Simple status rule', tags: ['uptime', 'logs'], schedule: { @@ -254,9 +278,8 @@ describe('rule_add', () => { }, }, onClose, - undefined, - 'my-rule-type' - ); + ruleTypeId: 'my-rule-type', + }); expect(wrapper.find('input#ruleName').props().value).toBe('Simple status rule'); expect(wrapper.find('[data-test-subj="tagsComboBox"]').first().text()).toBe('uptimelogs'); @@ -266,7 +289,7 @@ describe('rule_add', () => { it('renders rule add flyout with DEFAULT_RULE_INTERVAL if no initialValues specified and no minimumScheduleInterval', async () => { (triggersActionsUiConfig as jest.Mock).mockResolvedValue({}); - await setup(undefined, undefined, undefined, 'my-rule-type'); + await setup({ ruleTypeId: 'my-rule-type' }); expect(wrapper.find('[data-test-subj="intervalInput"]').first().props().value).toEqual(1); expect(wrapper.find('[data-test-subj="intervalInputUnit"]').first().props().value).toBe('m'); @@ -276,7 +299,7 @@ describe('rule_add', () => { (triggersActionsUiConfig as jest.Mock).mockResolvedValue({ minimumScheduleInterval: { value: '5m', enforce: false }, }); - await setup(undefined, undefined, undefined, 'my-rule-type'); + await setup({ ruleTypeId: 'my-rule-type' }); expect(wrapper.find('[data-test-subj="intervalInput"]').first().props().value).toEqual(5); expect(wrapper.find('[data-test-subj="intervalInputUnit"]').first().props().value).toBe('m'); @@ -291,8 +314,8 @@ describe('rule_add', () => { (createRule as jest.MockedFunction).mockResolvedValue(rule); - await setup( - { + await setup({ + initialValues: { name: 'Simple status rule', ruleTypeId: 'my-rule-type', tags: ['uptime', 'logs'], @@ -300,8 +323,8 @@ describe('rule_add', () => { interval: '1h', }, }, - onClose - ); + onClose, + }); wrapper.find('[data-test-subj="saveRuleButton"]').last().simulate('click'); @@ -317,11 +340,177 @@ describe('rule_add', () => { }); }); + it('should NOT allow to save the rule if the consumer is not set', async () => { + (triggersActionsUiConfig as jest.Mock).mockResolvedValue({ + minimumScheduleInterval: { value: '1m', enforce: false }, + }); + const onClose = jest.fn(); + await setup({ + initialValues: { + name: 'Simple rule', + consumer: 'alerts', + ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + tags: ['uptime', 'logs'], + schedule: { + interval: '1h', + }, + }, + onClose, + ruleTypesOverwrite: [ + { + id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + name: 'Threshold Rule', + actionGroups: [ + { + id: 'testActionGroup', + name: 'Test Action Group', + }, + ], + enabledInLicense: true, + defaultActionGroupId: 'threshold.fired', + minimumLicenseRequired: 'basic', + recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, + producer: ALERTS_FEATURE_ID, + authorizedConsumers: { + alerts: { read: true, all: true }, + apm: { read: true, all: true }, + discover: { read: true, all: true }, + infrastructure: { read: true, all: true }, + logs: { read: true, all: true }, + ml: { read: true, all: true }, + monitoring: { read: true, all: true }, + siem: { read: true, all: true }, + // Setting SLO all to false, this shouldn't show up + slo: { read: true, all: false }, + stackAlerts: { read: true, all: true }, + uptime: { read: true, all: true }, + }, + actionVariables: { + context: [], + state: [], + params: [], + }, + }, + ], + ruleTypeModelOverwrite: { + id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + iconClass: 'test', + description: 'test', + documentationUrl: null, + validate: (): ValidationResult => { + return { errors: {} }; + }, + ruleParamsExpression: TestExpression, + requiresAppContext: false, + }, + validConsumers: [AlertConsumers.INFRASTRUCTURE, AlertConsumers.LOGS], + }); + + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + wrapper.find('[data-test-subj="saveRuleButton"]').last().simulate('click'); + + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(createRule).toBeCalledTimes(0); + }); + + it('should set consumer automatically if only 1 authorized consumer exists', async () => { + (triggersActionsUiConfig as jest.Mock).mockResolvedValue({ + minimumScheduleInterval: { value: '1m', enforce: false }, + }); + const onClose = jest.fn(); + await setup({ + initialValues: { + name: 'Simple rule', + consumer: 'alerts', + ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + tags: ['uptime', 'logs'], + schedule: { + interval: '1h', + }, + }, + onClose, + ruleTypesOverwrite: [ + { + id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + name: 'Threshold Rule', + actionGroups: [ + { + id: 'testActionGroup', + name: 'Test Action Group', + }, + ], + enabledInLicense: true, + defaultActionGroupId: 'threshold.fired', + minimumLicenseRequired: 'basic', + recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, + producer: ALERTS_FEATURE_ID, + authorizedConsumers: { + logs: { read: true, all: true }, + }, + actionVariables: { + context: [], + state: [], + params: [], + }, + }, + ], + ruleTypeModelOverwrite: { + id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + iconClass: 'test', + description: 'test', + documentationUrl: null, + validate: (): ValidationResult => { + return { errors: {} }; + }, + ruleParamsExpression: TestExpression, + requiresAppContext: false, + }, + validConsumers: [AlertConsumers.INFRASTRUCTURE, AlertConsumers.LOGS], + }); + + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(wrapper.find('[data-test-subj="addRuleFlyoutTitle"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="saveRuleButton"]').exists()).toBeTruthy(); + + wrapper.find('[data-test-subj="saveRuleButton"]').last().simulate('click'); + + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(createRule).toHaveBeenLastCalledWith( + expect.objectContaining({ + rule: expect.objectContaining({ + consumer: 'logs', + }), + }) + ); + }); + it('should enforce any default interval', async () => { (triggersActionsUiConfig as jest.Mock).mockResolvedValue({ minimumScheduleInterval: { value: '1m', enforce: false }, }); - await setup({ ruleTypeId: 'my-rule-type' }, jest.fn(), '3h', 'my-rule-type', true); + await setup({ + initialValues: { ruleTypeId: 'my-rule-type' }, + onClose: jest.fn(), + defaultScheduleInterval: '3h', + ruleTypeId: 'my-rule-type', + actionsShow: true, + }); // Wait for handlers to fire await act(async () => { @@ -344,7 +533,12 @@ describe('rule_add', () => { minimumScheduleInterval: { value: '1m', enforce: false }, }); - await setup({}, jest.fn(), undefined, 'my-rule-type', true); + await setup({ + initialValues: {}, + onClose: jest.fn(), + ruleTypeId: 'my-rule-type', + actionsShow: true, + }); expect(triggersActionsUiHealth).toHaveBeenCalledTimes(1); expect(alertingFrameworkHealth).toHaveBeenCalledTimes(1); @@ -361,7 +555,12 @@ describe('rule_add', () => { hasPermanentEncryptionKey: false, }); - await setup({}, jest.fn(), undefined, 'my-rule-type', true); + await setup({ + initialValues: {}, + onClose: jest.fn(), + ruleTypeId: 'my-rule-type', + actionsShow: true, + }); expect(triggersActionsUiHealth).toHaveBeenCalledTimes(1); expect(alertingFrameworkHealth).toHaveBeenCalledTimes(1); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx index d27abe0831441..777639d962307 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_add.tsx @@ -19,6 +19,7 @@ import { RuleAddProps, RuleTypeIndex, TriggersActionsUiConfig, + RuleCreationValidConsumer, } from '../../../types'; import { RuleForm } from './rule_form'; import { getRuleActionErrors, getRuleErrors, isValidRule } from './rule_errors'; @@ -51,6 +52,8 @@ const RuleAdd = ({ hideInterval, metadata: initialMetadata, filteredRuleTypes, + validConsumers, + useRuleProducer, ...props }: RuleAddProps) => { const onSaveHandler = onSave ?? reloadRules; @@ -83,6 +86,9 @@ const RuleAdd = ({ props.ruleTypeIndex ); const [changedFromDefaultInterval, setChangedFromDefaultInterval] = useState(false); + const [selectedConsumer, setSelectedConsumer] = useState< + RuleCreationValidConsumer | null | undefined + >(); const setRule = (value: InitialRule) => { dispatch({ command: { type: 'setRule' }, payload: { key: 'rule', value } }); @@ -196,10 +202,17 @@ const RuleAdd = ({ }; const ruleType = rule.ruleTypeId ? ruleTypeRegistry.get(rule.ruleTypeId) : null; - const { ruleBaseErrors, ruleErrors, ruleParamsErrors } = useMemo( - () => getRuleErrors(rule as Rule, ruleType, config), - [rule, ruleType, config] + () => + getRuleErrors( + { + ...rule, + ...(selectedConsumer !== undefined ? { consumer: selectedConsumer } : {}), + } as Rule, + ruleType, + config + ), + [rule, selectedConsumer, ruleType, config] ); // Confirm before saving if user is able to add actions but hasn't added any to this rule @@ -207,7 +220,13 @@ const RuleAdd = ({ async function onSaveRule(): Promise { try { - const newRule = await createRule({ http, rule: rule as RuleUpdates }); + const newRule = await createRule({ + http, + rule: { + ...rule, + ...(selectedConsumer ? { consumer: selectedConsumer } : {}), + } as RuleUpdates, + }); toasts.addSuccess( i18n.translate('xpack.triggersActionsUI.sections.ruleAdd.saveSuccessNotificationText', { defaultMessage: 'Created rule "{ruleName}"', @@ -250,6 +269,7 @@ const RuleAdd = ({ { 'schedule.interval': [], ruleTypeId: [], actionConnectors: [], + consumer: [], }); }); @@ -41,6 +42,7 @@ describe('rule_errors', () => { 'schedule.interval': ['Check interval is required.'], ruleTypeId: [], actionConnectors: [], + consumer: [], }); }); @@ -53,6 +55,7 @@ describe('rule_errors', () => { 'schedule.interval': [], ruleTypeId: [], actionConnectors: [], + consumer: [], }); }); @@ -68,6 +71,7 @@ describe('rule_errors', () => { 'schedule.interval': ['Interval must be at least 1 minute.'], ruleTypeId: [], actionConnectors: [], + consumer: [], }); }); @@ -80,6 +84,33 @@ describe('rule_errors', () => { 'schedule.interval': [], ruleTypeId: ['Rule type is required.'], actionConnectors: [], + consumer: [], + }); + }); + + it('should get an error when consumer is null', () => { + const rule = mockRule(); + rule.consumer = null as unknown as string; + const result = validateBaseProperties(rule, config); + expect(result.errors).toStrictEqual({ + name: [], + 'schedule.interval': [], + ruleTypeId: [], + actionConnectors: [], + consumer: ['Scope is required.'], + }); + }); + + it('should not get an error when consumer is undefined', () => { + const rule = mockRule(); + rule.consumer = undefined as unknown as string; + const result = validateBaseProperties(rule, config); + expect(result.errors).toStrictEqual({ + name: [], + 'schedule.interval': [], + ruleTypeId: [], + actionConnectors: [], + consumer: [], }); }); @@ -101,6 +132,7 @@ describe('rule_errors', () => { 'schedule.interval': [], ruleTypeId: [], actionConnectors: ['Action for myActionType connector is required.'], + consumer: [], }); }); }); @@ -127,6 +159,7 @@ describe('rule_errors', () => { 'schedule.interval': [], ruleTypeId: [], actionConnectors: [], + consumer: [], }, ruleErrors: { name: ['Name is required.'], @@ -134,6 +167,7 @@ describe('rule_errors', () => { 'schedule.interval': [], ruleTypeId: [], actionConnectors: [], + consumer: [], }, }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_errors.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_errors.ts index 02e2e7c084009..0b5c511843472 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_errors.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_errors.ts @@ -27,6 +27,7 @@ export function validateBaseProperties( const errors = { name: new Array(), 'schedule.interval': new Array(), + consumer: new Array(), ruleTypeId: new Array(), actionConnectors: new Array(), }; @@ -38,6 +39,13 @@ export function validateBaseProperties( }) ); } + if (ruleObject.consumer === null) { + errors.consumer.push( + i18n.translate('xpack.triggersActionsUI.sections.ruleForm.error.requiredConsumerText', { + defaultMessage: 'Scope is required.', + }) + ); + } if (ruleObject.schedule.interval.length < 2) { errors['schedule.interval'].push( i18n.translate('xpack.triggersActionsUI.sections.ruleForm.error.requiredIntervalText', { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx index f0de7e6e4ed60..59d3c4f1f8c3b 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.test.tsx @@ -5,19 +5,24 @@ * 2.0. */ -import React from 'react'; +import React, { FunctionComponent } from 'react'; +import { EuiFormLabel } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; import { ReactWrapper } from 'enzyme'; import { act } from 'react-dom/test-utils'; import { actionTypeRegistryMock } from '../../action_type_registry.mock'; import { ruleTypeRegistryMock } from '../../rule_type_registry.mock'; import { ActionForm } from '../action_connector_form'; +import { AlertConsumers, OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; +import { RuleFormConsumerSelection } from './rule_form_consumer_selection'; import { ValidationResult, Rule, RuleType, RuleTypeModel, GenericValidationResult, + RuleCreationValidConsumer, } from '../../../types'; import { RuleForm } from './rule_form'; import { coreMock } from '@kbn/core/public/mocks'; @@ -27,6 +32,20 @@ import { useKibana } from '../../../common/lib/kibana'; const actionTypeRegistry = actionTypeRegistryMock.create(); const ruleTypeRegistry = ruleTypeRegistryMock.create(); +const mockSetConsumer = jest.fn(); + +export const TestExpression: FunctionComponent = () => { + return ( + + + + ); +}; + jest.mock('../../hooks/use_load_rule_types', () => ({ useLoadRuleTypes: jest.fn(), })); @@ -233,15 +252,32 @@ describe('rule_form', () => { describe('rule_form create rule', () => { let wrapper: ReactWrapper; - async function setup( - showRulesList = false, - enforceMinimum = false, - schedule = '1m', - featureId = 'alerting' - ) { + async function setup(options?: { + showRulesList?: boolean; + enforceMinimum?: boolean; + schedule?: string; + featureId?: string; + initialRuleOverwrite?: Partial; + validConsumers?: RuleCreationValidConsumer[]; + ruleTypesOverwrite?: RuleType[]; + ruleTypeModelOverwrite?: RuleTypeModel; + useRuleProducer?: boolean; + }) { + const { + showRulesList = false, + enforceMinimum = false, + schedule = '1m', + featureId = 'alerting', + initialRuleOverwrite, + validConsumers, + ruleTypesOverwrite, + ruleTypeModelOverwrite, + useRuleProducer = false, + } = options || {}; + const mocks = coreMock.createSetup(); const { useLoadRuleTypes } = jest.requireMock('../../hooks/use_load_rule_types'); - const ruleTypes: RuleType[] = [ + const ruleTypes: RuleType[] = ruleTypesOverwrite || [ { id: 'my-rule-type', name: 'Test', @@ -305,10 +341,11 @@ describe('rule_form', () => { }, }; ruleTypeRegistry.list.mockReturnValue([ - ruleType, + ruleTypeModelOverwrite || ruleType, ruleTypeNonEditable, disabledByLicenseRuleType, ]); + ruleTypeRegistry.get.mockReturnValue(ruleTypeModelOverwrite || ruleType); ruleTypeRegistry.has.mockReturnValue(true); actionTypeRegistry.list.mockReturnValue([actionType]); actionTypeRegistry.has.mockReturnValue(true); @@ -330,7 +367,11 @@ describe('rule_form', () => { wrapper = mountWithIntl( { ruleTypeRegistry={ruleTypeRegistry} connectorFeatureId={featureId} onChangeMetaData={jest.fn()} + validConsumers={validConsumers} + setConsumer={mockSetConsumer} + useRuleProducer={useRuleProducer} /> ); @@ -359,20 +403,20 @@ describe('rule_form', () => { }); it('renders registered selected rule type', async () => { - await setup(true); + await setup({ showRulesList: true }); const ruleTypeSelectOptions = wrapper.find('[data-test-subj="my-rule-type-SelectOption"]'); expect(ruleTypeSelectOptions.exists()).toBeTruthy(); }); it('renders minimum schedule interval helper text when enforce = true', async () => { - await setup(false, true); + await setup({ enforceMinimum: true }); expect(wrapper.find('[data-test-subj="intervalFormRow"]').first().prop('helpText')).toEqual( `Interval must be at least 1 minute.` ); }); it('renders minimum schedule interval helper suggestion when enforce = false and schedule is less than configuration', async () => { - await setup(false, false, '10s'); + await setup({ schedule: '10s' }); expect(wrapper.find('[data-test-subj="intervalFormRow"]').first().prop('helpText')).toEqual( `Intervals less than 1 minute are not recommended due to performance considerations.` ); @@ -440,7 +484,7 @@ describe('rule_form', () => { }); it('renders uses feature id to load action types', async () => { - await setup(false, false, '1m', 'anotherFeature'); + await setup({ schedule: '1m', featureId: 'anotherFeature' }); const ruleTypeSelectOptions = wrapper.find( '[data-test-subj=".server-log-anotherFeature-ActionTypeSelectOption"]' ); @@ -448,7 +492,7 @@ describe('rule_form', () => { }); it('renders rule type description', async () => { - await setup(true); + await setup({ showRulesList: true }); wrapper.find('button[data-test-subj="my-rule-type-SelectOption"]').first().simulate('click'); const ruleDescription = wrapper.find('[data-test-subj="ruleDescription"]'); expect(ruleDescription.exists()).toBeTruthy(); @@ -456,7 +500,7 @@ describe('rule_form', () => { }); it('renders rule type documentation link', async () => { - await setup(true); + await setup({ showRulesList: true }); wrapper.find('button[data-test-subj="my-rule-type-SelectOption"]').first().simulate('click'); const ruleDocumentationLink = wrapper.find('[data-test-subj="ruleDocumentationLink"]'); expect(ruleDocumentationLink.exists()).toBeTruthy(); @@ -464,13 +508,164 @@ describe('rule_form', () => { }); it('renders rule types disabled by license', async () => { - await setup(true); + await setup({ showRulesList: true }); const actionOption = wrapper.find(`[data-test-subj="disabled-by-license-SelectOption"]`); expect(actionOption.exists()).toBeTruthy(); expect( wrapper.find('[data-test-subj="disabled-by-license-disabledTooltip"]').exists() ).toBeTruthy(); }); + + it('should select the only one available consumer', async () => { + await setup({ + initialRuleOverwrite: { + name: 'Simple rule', + consumer: 'alerts', + ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + schedule: { + interval: '1h', + }, + }, + ruleTypesOverwrite: [ + { + id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + name: 'Threshold Rule 1', + actionGroups: [ + { + id: 'testActionGroup', + name: 'Test Action Group', + }, + ], + enabledInLicense: true, + defaultActionGroupId: 'threshold.fired', + minimumLicenseRequired: 'basic', + recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, + producer: ALERTS_FEATURE_ID, + authorizedConsumers: { + alerts: { read: true, all: true }, + apm: { read: true, all: true }, + discover: { read: true, all: true }, + infrastructure: { read: true, all: true }, + // Setting logs all to false, this shouldn't show up + logs: { read: true, all: false }, + ml: { read: true, all: true }, + monitoring: { read: true, all: true }, + siem: { read: true, all: true }, + slo: { read: true, all: false }, + stackAlerts: { read: true, all: true }, + uptime: { read: true, all: true }, + }, + actionVariables: { + context: [], + state: [], + params: [], + }, + }, + ], + ruleTypeModelOverwrite: { + id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + iconClass: 'test', + description: 'test', + documentationUrl: null, + validate: (): ValidationResult => { + return { errors: {} }; + }, + ruleParamsExpression: TestExpression, + requiresAppContext: false, + }, + validConsumers: [AlertConsumers.INFRASTRUCTURE, AlertConsumers.LOGS], + }); + + await act(async () => { + await nextTick(); + wrapper.update(); + }); + expect(wrapper.find('[data-test-subj="ruleFormConsumerSelect"]').exists()).toBeFalsy(); + + await act(async () => { + await nextTick(); + wrapper.update(); + }); + expect(mockSetConsumer).toHaveBeenLastCalledWith('infrastructure'); + }); + + it('should be able to select multiple consumer', async () => { + await setup({ + initialRuleOverwrite: { + name: 'Simple rule', + consumer: 'alerts', + ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + schedule: { + interval: '1h', + }, + }, + ruleTypesOverwrite: [ + { + id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + name: 'Threshold Rule', + actionGroups: [ + { + id: 'testActionGroup', + name: 'Test Action Group', + }, + ], + enabledInLicense: true, + defaultActionGroupId: 'threshold.fired', + minimumLicenseRequired: 'basic', + recoveryActionGroup: { id: 'recovered', name: 'Recovered' }, + producer: ALERTS_FEATURE_ID, + authorizedConsumers: { + infrastructure: { read: true, all: true }, + logs: { read: true, all: true }, + }, + actionVariables: { + context: [], + state: [], + params: [], + }, + }, + ], + ruleTypeModelOverwrite: { + id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, + iconClass: 'test', + description: 'test', + documentationUrl: null, + validate: (): ValidationResult => { + return { errors: {} }; + }, + ruleParamsExpression: TestExpression, + requiresAppContext: false, + }, + }); + + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(wrapper.find('[data-test-subj="ruleFormConsumerSelect"]').exists()).toBeTruthy(); + expect(wrapper.find(RuleFormConsumerSelection).props().consumers).toEqual([ + 'infrastructure', + 'logs', + ]); + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(mockSetConsumer).toHaveBeenLastCalledWith(null); + }); + + it('should not display the consumer select for invalid rule types', async () => { + await setup(); + + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + expect(wrapper.find('[data-test-subj="ruleFormConsumerSelect"]').exists()).toBeFalsy(); + }); }); describe('rule_form create rule non ruleing consumer and producer', () => { @@ -605,14 +800,6 @@ describe('rule_form', () => { ); expect(ruleTypeSelectOptions.exists()).toBeTruthy(); }); - - it('does not render rule type options which producer does not correspond to the rule consumer', async () => { - await setup(); - const ruleTypeSelectOptions = wrapper.find( - '[data-test-subj="other-consumer-producer-rule-type-SelectOption"]' - ); - expect(ruleTypeSelectOptions.exists()).toBeFalsy(); - }); }); describe('rule_form edit rule', () => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx index c72dced42a2d9..88e3639c2dbcf 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { Fragment, useState, useEffect, useCallback, Suspense } from 'react'; +import React, { Fragment, useState, useEffect, useCallback, Suspense, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { @@ -61,6 +61,7 @@ import { RuleTypeRegistryContract, ActionTypeRegistryContract, TriggersActionsUiConfig, + RuleCreationValidConsumer, } from '../../../types'; import { getTimeOptions } from '../../../common/lib/get_time_options'; import { ActionForm } from '../action_connector_form'; @@ -73,7 +74,9 @@ import { IsEnabledResult, IsDisabledResult } from '../../lib/check_rule_type_ena import { checkRuleTypeEnabled } from '../../lib/check_rule_type_enabled'; import { ruleTypeCompare, ruleTypeGroupCompare } from '../../lib/rule_type_compare'; import { VIEW_LICENSE_OPTIONS_LINK } from '../../../common/constants'; +import { MULTI_CONSUMER_RULE_TYPE_IDS } from '../../constants'; import { SectionLoading } from '../../components/section_loading'; +import { RuleFormConsumerSelection, VALID_CONSUMERS } from './rule_form_consumer_selection'; import { useLoadRuleTypes } from '../../hooks/use_load_rule_types'; import { getInitialInterval } from './get_initial_interval'; @@ -81,10 +84,44 @@ const ENTER_KEY = 13; const INTEGER_REGEX = /^[1-9][0-9]*$/; +const NOOP = () => {}; + function getProducerFeatureName(producer: string, kibanaFeatures: KibanaFeature[]) { return kibanaFeatures.find((featureItem) => featureItem.id === producer)?.name; } +const authorizedToDisplayRuleType = ({ + rule, + ruleType, + validConsumers, +}: { + rule: InitialRule; + ruleType: RuleType; + validConsumers?: RuleCreationValidConsumer[]; +}) => { + if (!ruleType) { + return false; + } + // If we have a generic threshold/ES query rule... + if (MULTI_CONSUMER_RULE_TYPE_IDS.includes(ruleType.id)) { + // And an array of valid consumers are passed in, we will show it + // if the rule type has at least one of the consumers as authorized + if (Array.isArray(validConsumers)) { + return validConsumers.some((consumer) => hasAllPrivilege(consumer, ruleType)); + } + // If no array was passed in, then we will show it if at least one of its + // authorized consumers allows it to be shown. + return Object.entries(ruleType.authorizedConsumers).some(([_, privilege]) => { + return privilege.all; + }); + } + // For non-generic threshold/ES query rules, we will still do the check + // against `alerts` since we are still setting rule consumers to `alerts` + return hasAllPrivilege(rule.consumer, ruleType); +}; + +export type RuleTypeItems = Array<{ ruleTypeModel: RuleTypeModel; ruleType: RuleType }>; + interface RuleFormProps> { rule: InitialRule; config: TriggersActionsUiConfig; @@ -94,23 +131,29 @@ interface RuleFormProps> { actionTypeRegistry: ActionTypeRegistryContract; operation: string; canChangeTrigger?: boolean; // to hide Change trigger button + canShowConsumerSelection?: boolean; setHasActionsDisabled?: (value: boolean) => void; setHasActionsWithBrokenConnector?: (value: boolean) => void; + setConsumer?: (consumer: RuleCreationValidConsumer | null) => void; metadata?: MetaData; filteredRuleTypes?: string[]; hideInterval?: boolean; connectorFeatureId?: string; + validConsumers?: RuleCreationValidConsumer[]; onChangeMetaData: (metadata: MetaData) => void; + useRuleProducer?: boolean; } export const RuleForm = ({ rule, config, canChangeTrigger = true, + canShowConsumerSelection = false, dispatch, errors, setHasActionsDisabled, setHasActionsWithBrokenConnector, + setConsumer = NOOP, operation, ruleTypeRegistry, actionTypeRegistry, @@ -118,7 +161,9 @@ export const RuleForm = ({ filteredRuleTypes: ruleTypeToFilter, hideInterval, connectorFeatureId = AlertingConnectorFeatureId, + validConsumers, onChangeMetaData, + useRuleProducer, }: RuleFormProps) => { const { notifications: { toasts }, @@ -150,12 +195,8 @@ export const RuleForm = ({ ); const [defaultActionGroupId, setDefaultActionGroupId] = useState(undefined); - const [availableRuleTypes, setAvailableRuleTypes] = useState< - Array<{ ruleTypeModel: RuleTypeModel; ruleType: RuleType }> - >([]); - const [filteredRuleTypes, setFilteredRuleTypes] = useState< - Array<{ ruleTypeModel: RuleTypeModel; ruleType: RuleType }> - >([]); + const [availableRuleTypes, setAvailableRuleTypes] = useState([]); + const [filteredRuleTypes, setFilteredRuleTypes] = useState([]); const [searchText, setSearchText] = useState(); const [inputText, setInputText] = useState(); const [solutions, setSolutions] = useState | undefined>(undefined); @@ -177,23 +218,23 @@ export const RuleForm = ({ const getAvailableRuleTypes = (ruleTypesResult: RuleType[]) => ruleTypeRegistry .list() - .reduce( - ( - arr: Array<{ ruleType: RuleType; ruleTypeModel: RuleTypeModel }>, - ruleTypeRegistryItem: RuleTypeModel - ) => { - const ruleType = ruleTypesResult.find((item) => ruleTypeRegistryItem.id === item.id); - if (ruleType) { - arr.push({ - ruleType, - ruleTypeModel: ruleTypeRegistryItem, - }); - } - return arr; - }, - [] + .reduce((arr: RuleTypeItems, ruleTypeRegistryItem: RuleTypeModel) => { + const ruleType = ruleTypesResult.find((item) => ruleTypeRegistryItem.id === item.id); + if (ruleType) { + arr.push({ + ruleType, + ruleTypeModel: ruleTypeRegistryItem, + }); + } + return arr; + }, []) + .filter(({ ruleType }) => + authorizedToDisplayRuleType({ + rule, + ruleType, + validConsumers, + }) ) - .filter((item) => item.ruleType && hasAllPrivilege(rule.consumer, item.ruleType)) .filter((item) => rule.consumer === ALERTS_FEATURE_ID ? !item.ruleTypeModel.requiresAppContext @@ -221,7 +262,16 @@ export const RuleForm = ({ setSolutions( new Map([...solutionsResult.entries()].sort(([, a], [, b]) => a.localeCompare(b))) ); - }, [ruleTypes, ruleTypeIndex, rule.ruleTypeId, kibanaFeatures, rule.consumer, ruleTypeRegistry]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ + ruleTypes, + ruleTypeIndex, + rule.ruleTypeId, + kibanaFeatures, + rule.consumer, + ruleTypeRegistry, + validConsumers, + ]); useEffect(() => { if (loadRuleTypesError) { @@ -319,6 +369,44 @@ export const RuleForm = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [ruleTypeRegistry, availableRuleTypes, searchText, JSON.stringify(solutionsFilter)]); + const authorizedConsumers = useMemo(() => { + // If the app context provides a consumer, we assume that consumer is + // is what we set for all rules that is created in that context + if (rule.consumer !== ALERTS_FEATURE_ID) { + return []; + } + + const selectedRuleType = availableRuleTypes.find( + ({ ruleType: availableRuleType }) => availableRuleType.id === rule.ruleTypeId + ); + if (!selectedRuleType?.ruleType?.authorizedConsumers) { + return []; + } + return Object.entries(selectedRuleType.ruleType.authorizedConsumers).reduce< + RuleCreationValidConsumer[] + >((result, [authorizedConsumer, privilege]) => { + if ( + privilege.all && + (validConsumers || VALID_CONSUMERS).includes( + authorizedConsumer as RuleCreationValidConsumer + ) + ) { + result.push(authorizedConsumer as RuleCreationValidConsumer); + } + return result; + }, []); + }, [availableRuleTypes, rule, validConsumers]); + + const shouldShowConsumerSelect = useMemo(() => { + if (!canShowConsumerSelection) { + return false; + } + if (!authorizedConsumers.length) { + return false; + } + return !!rule.ruleTypeId && MULTI_CONSUMER_RULE_TYPE_IDS.includes(rule.ruleTypeId); + }, [authorizedConsumers, rule, canShowConsumerSelection]); + const selectedRuleType = rule?.ruleTypeId ? ruleTypeIndex?.get(rule?.ruleTypeId) : undefined; const recoveryActionGroup = selectedRuleType?.recoveryActionGroup?.id; @@ -436,6 +524,10 @@ export const RuleForm = ({ if (ruleTypeIndex && ruleTypeIndex.has(item.id)) { setDefaultActionGroupId(ruleTypeIndex.get(item.id)!.defaultActionGroupId); } + + if (useRuleProducer && !MULTI_CONSUMER_RULE_TYPE_IDS.includes(item.id)) { + setConsumer(solution as RuleCreationValidConsumer); + } }} /> ); @@ -639,6 +731,18 @@ export const RuleForm = ({ )} + {shouldShowConsumerSelect && ( + <> + + + + + + )} {canShowActions && defaultActionGroupId && diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_consumer_selection.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_consumer_selection.test.tsx new file mode 100644 index 0000000000000..ee7af0446c9ec --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_consumer_selection.test.tsx @@ -0,0 +1,83 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { fireEvent, render, screen } from '@testing-library/react'; +import { RuleFormConsumerSelection } from './rule_form_consumer_selection'; +import { RuleCreationValidConsumer } from '../../../types'; + +const mockConsumers: RuleCreationValidConsumer[] = ['logs', 'infrastructure', 'stackAlerts']; + +const mockOnChange = jest.fn(); + +describe('RuleFormConsumerSelectionModal', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('renders correctly', async () => { + render( + + ); + + expect(screen.getByTestId('ruleFormConsumerSelect')).toBeInTheDocument(); + fireEvent.click(screen.getByTestId('comboBoxToggleListButton')); + expect(screen.getByText('Logs')).toBeInTheDocument(); + expect(screen.getByText('Metrics')).toBeInTheDocument(); + expect(screen.getByText('Stack Rules')).toBeInTheDocument(); + }); + + it('should initialize dropdown to null', () => { + render( + + ); + + // Selects first option if no initial value is provided + expect(mockOnChange).toHaveBeenLastCalledWith(null); + mockOnChange.mockClear(); + }); + + it('should be able to select infrastructure and call onChange', () => { + render( + + ); + + fireEvent.click(screen.getByTestId('comboBoxToggleListButton')); + fireEvent.click(screen.getByTestId('infrastructure')); + expect(mockOnChange).toHaveBeenLastCalledWith('infrastructure'); + }); + + it('should be able to select logs and call onChange', () => { + render( + + ); + + fireEvent.click(screen.getByTestId('comboBoxToggleListButton')); + fireEvent.click(screen.getByTestId('logs')); + expect(mockOnChange).toHaveBeenLastCalledWith('logs'); + }); + + it('should be able to show errors when there is one', () => { + render( + + ); + expect(screen.queryAllByText('Scope is required')).toHaveLength(1); + }); + + it('should display nothing if there is only 1 consumer to select', () => { + render( + + ); + + expect(mockOnChange).toHaveBeenLastCalledWith('stackAlerts'); + expect(screen.queryByTestId('ruleFormConsumerSelect')).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_consumer_selection.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_consumer_selection.tsx new file mode 100644 index 0000000000000..f5f92c72fa521 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form_consumer_selection.tsx @@ -0,0 +1,157 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo, useState, useCallback, useEffect } from 'react'; +import { EuiComboBox, EuiFormRow, EuiComboBoxOptionOption } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { AlertConsumers } from '@kbn/rule-data-utils'; +import { IErrorObject, RuleCreationValidConsumer } from '../../../types'; + +const SELECT_LABEL: string = i18n.translate( + 'xpack.triggersActionsUI.sections.ruleFormConsumerSelectionModal.selectLabel', + { + defaultMessage: 'Select role visibility', + } +); + +const featureNameMap: Record = { + [AlertConsumers.LOGS]: i18n.translate( + 'xpack.triggersActionsUI.sections.ruleFormConsumerSelectionModal.logs', + { + defaultMessage: 'Logs', + } + ), + [AlertConsumers.INFRASTRUCTURE]: i18n.translate( + 'xpack.triggersActionsUI.sections.ruleFormConsumerSelectionModal.infrastructure', + { + defaultMessage: 'Metrics', + } + ), + [AlertConsumers.APM]: i18n.translate( + 'xpack.triggersActionsUI.sections.ruleFormConsumerSelectionModal.apm', + { + defaultMessage: 'APM and User Experience', + } + ), + [AlertConsumers.UPTIME]: i18n.translate( + 'xpack.triggersActionsUI.sections.ruleFormConsumerSelectionModal.uptime', + { + defaultMessage: 'Synthetics and Uptime', + } + ), + [AlertConsumers.SLO]: i18n.translate( + 'xpack.triggersActionsUI.sections.ruleFormConsumerSelectionModal.slo', + { + defaultMessage: 'SLOs', + } + ), + stackAlerts: i18n.translate( + 'xpack.triggersActionsUI.sections.ruleFormConsumerSelectionModal.stackAlerts', + { + defaultMessage: 'Stack Rules', + } + ), +}; + +export const VALID_CONSUMERS: RuleCreationValidConsumer[] = [ + AlertConsumers.LOGS, + AlertConsumers.INFRASTRUCTURE, + 'stackAlerts', +]; + +export interface RuleFormConsumerSelectionProps { + consumers: RuleCreationValidConsumer[]; + onChange: (consumer: RuleCreationValidConsumer | null) => void; + errors: IErrorObject; +} + +const SINGLE_SELECTION = { asPlainText: true }; + +export const RuleFormConsumerSelection = (props: RuleFormConsumerSelectionProps) => { + const { consumers, errors, onChange } = props; + const [selectedConsumer, setSelectedConsumer] = useState(); + const isInvalid = errors?.consumer?.length > 0; + const handleOnChange = useCallback( + (selected: Array>) => { + if (selected.length > 0) { + const newSelectedConsumer = selected[0]; + setSelectedConsumer(newSelectedConsumer.value); + onChange(newSelectedConsumer.value!); + } else { + setSelectedConsumer(undefined); + onChange(null); + } + }, + [onChange] + ); + const selectedOptions = useMemo( + () => + selectedConsumer + ? [{ value: selectedConsumer, label: featureNameMap[selectedConsumer] }] + : [], + [selectedConsumer] + ); + + const formattedSelectOptions: Array> = + useMemo(() => { + return consumers + .reduce>>((result, consumer) => { + if (featureNameMap[consumer]) { + result.push({ + value: consumer, + 'data-test-subj': consumer, + label: featureNameMap[consumer], + }); + } + return result; + }, []) + .sort((a, b) => { + return a.value!.localeCompare(b.value!); + }); + }, [consumers]); + + useEffect(() => { + // At initialization we set to NULL to know that nobody selected anything + onChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + if (formattedSelectOptions.length === 1) { + onChange(formattedSelectOptions[0].value as RuleCreationValidConsumer); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [formattedSelectOptions]); + + if (formattedSelectOptions.length <= 1) { + return null; + } + return ( + + + + ); +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx index 197077daceaf3..83285163aeee3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx @@ -107,6 +107,7 @@ const RuleAdd = lazy(() => import('../../rule_form/rule_add')); const RuleEdit = lazy(() => import('../../rule_form/rule_edit')); export interface RulesListProps { + filterConsumers?: string[]; filteredRuleTypes?: string[]; lastResponseFilter?: string[]; lastRunOutcomeFilter?: string[]; @@ -146,6 +147,7 @@ const initialPercentileOptions = Object.values(Percentiles).map((percentile) => const EMPTY_ARRAY: string[] = []; export const RulesList = ({ + filterConsumers, filteredRuleTypes = EMPTY_ARRAY, lastResponseFilter, lastRunOutcomeFilter, @@ -263,6 +265,7 @@ export const RulesList = ({ // Fetch rules const { rulesState, loadRules, hasData, lastUpdate } = useLoadRulesQuery({ + filterConsumers, filters: computedFilter, hasDefaultRuleTypesFiltersOn, page, @@ -275,6 +278,7 @@ export const RulesList = ({ // Fetch status aggregation const { loadRuleAggregations, rulesStatusesTotal, rulesLastRunOutcomesTotal } = useLoadRuleAggregationsQuery({ + filterConsumers, filters: computedFilter, enabled: canLoadRules, refresh, diff --git a/x-pack/plugins/triggers_actions_ui/public/index.ts b/x-pack/plugins/triggers_actions_ui/public/index.ts index a13df899ec3cf..6d3c3bbee0d5f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/index.ts @@ -43,6 +43,7 @@ export type { RulesListVisibleColumns, AlertSummaryTimeRange, NotifyWhenSelectOptions, + RuleCreationValidConsumer, } from './types'; export type { diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 7c6454c8cc3e4..7716aef340406 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -26,6 +26,7 @@ import type { EuiSuperSelectOption, EuiDataGridOnColumnResizeHandler, } from '@elastic/eui'; +import type { AlertConsumers, STACK_ALERTS_FEATURE_ID } from '@kbn/rule-data-utils'; import { EuiDataGridColumn, EuiDataGridControlColumn, EuiDataGridSorting } from '@elastic/eui'; import { HttpSetup } from '@kbn/core/public'; import { KueryNode } from '@kbn/es-query'; @@ -457,6 +458,8 @@ export interface RuleAddProps> { metadata?: MetaData; ruleTypeIndex?: RuleTypeIndex; filteredRuleTypes?: string[]; + validConsumers?: RuleCreationValidConsumer[]; + useRuleProducer?: boolean; } export interface RuleDefinitionProps { rule: Rule; @@ -819,3 +822,8 @@ export interface NotifyWhenSelectOptions { isForEachAlertOption?: boolean; value: EuiSuperSelectOption; } + +export type RuleCreationValidConsumer = + | typeof AlertConsumers.LOGS + | typeof AlertConsumers.INFRASTRUCTURE + | typeof STACK_ALERTS_FEATURE_ID; diff --git a/x-pack/test/alerting_api_integration/common/lib/alert_utils.ts b/x-pack/test/alerting_api_integration/common/lib/alert_utils.ts index 5b4aeb496b125..3307211694cc0 100644 --- a/x-pack/test/alerting_api_integration/common/lib/alert_utils.ts +++ b/x-pack/test/alerting_api_integration/common/lib/alert_utils.ts @@ -469,20 +469,8 @@ export class AlertUtils { } } -export function getConsumerUnauthorizedErrorMessage( - operation: string, - alertType: string, - consumer: string -) { - return `Unauthorized to ${operation} a "${alertType}" rule for "${consumer}"`; -} - -export function getProducerUnauthorizedErrorMessage( - operation: string, - alertType: string, - producer: string -) { - return `Unauthorized to ${operation} a "${alertType}" rule by "${producer}"`; +export function getUnauthorizedErrorMessage(operation: string, alertType: string, scope: string) { + return `Unauthorized by "${scope}" to ${operation} "${alertType}" rule`; } function getDefaultAlwaysFiringAlertData( diff --git a/x-pack/test/alerting_api_integration/common/lib/index.ts b/x-pack/test/alerting_api_integration/common/lib/index.ts index 2c0651f3f962a..cc7ba4fcb083f 100644 --- a/x-pack/test/alerting_api_integration/common/lib/index.ts +++ b/x-pack/test/alerting_api_integration/common/lib/index.ts @@ -8,11 +8,7 @@ export { ObjectRemover } from './object_remover'; export { getUrlPrefix } from './space_test_utils'; export { getTestRuleData } from './get_test_rule_data'; -export { - AlertUtils, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, -} from './alert_utils'; +export { AlertUtils, getUnauthorizedErrorMessage } from './alert_utils'; export type { TaskManagerDoc } from './task_manager_utils'; export { TaskManagerUtils } from './task_manager_utils'; export * from './test_assertions'; diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts index 8df0f20e88de7..fd5a4054f0895 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts @@ -12,7 +12,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; import { waitForAlertInIndex, waitForRuleStatus } from '../helpers/alerting_wait_for_helpers'; @@ -52,7 +52,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await deleteDataView({ supertest, @@ -73,7 +73,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await createRule({ supertest, tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -142,7 +142,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts index d57398def6381..4d2475d6b0457 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts @@ -11,7 +11,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; @@ -48,7 +48,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await deleteDataView({ supertest, @@ -67,7 +67,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await createRule({ supertest, tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -136,7 +136,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts index b4570771b9f2f..4359385e79534 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts @@ -14,7 +14,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../common/ftr_provider_context'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; @@ -68,7 +68,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await synthtraceEsClient.clean(); await deleteDataView({ @@ -88,7 +88,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await createRule({ supertest, tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -162,7 +162,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index 7602c9454a55e..7f7e66d050593 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts @@ -18,7 +18,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; import { waitForAlertInIndex, waitForRuleStatus } from '../helpers/alerting_wait_for_helpers'; @@ -58,7 +58,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await deleteDataView({ supertest, @@ -79,7 +79,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await createRule({ supertest, tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -150,7 +150,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts index 99f313960fa6b..6a17340094e80 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts @@ -12,7 +12,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; import { waitForAlertInIndex, waitForRuleStatus } from '../helpers/alerting_wait_for_helpers'; @@ -52,7 +52,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await deleteDataView({ supertest, @@ -73,7 +73,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await createRule({ supertest, tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -140,7 +140,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts index 5925907b471b6..da18b429c45c0 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts @@ -19,7 +19,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; import { createDataView, deleteDataView } from '../helpers/data_view'; import { @@ -65,7 +65,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await deleteDataView({ supertest, @@ -86,7 +86,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await createRule({ supertest, tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -162,7 +162,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule_data_view.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule_data_view.ts index 3119a0ae46e63..ada064c133ffc 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule_data_view.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule_data_view.ts @@ -10,7 +10,7 @@ import { Aggregators, Comparator, } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../common/ftr_provider_context'; import { getUrlPrefix, ObjectRemover } from '../common/lib'; @@ -67,7 +67,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await createRule({ supertest, tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/create.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/create.ts index 5f2b892a416a3..b7cf41d07e823 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/create.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/create.ts @@ -10,10 +10,9 @@ import { UserAtSpaceScenarios } from '../../../scenarios'; import { checkAAD, getTestRuleData, - getConsumerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, getUrlPrefix, ObjectRemover, - getProducerUnauthorizedErrorMessage, TaskManagerDoc, } from '../../../../common/lib'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; @@ -75,11 +74,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'create', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('create', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -181,7 +176,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -218,7 +213,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.unrestricted-noop', 'alertsFixture' @@ -228,17 +223,6 @@ export default function createAlertTests({ getService }: FtrProviderContext) { break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'create', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(200); @@ -267,7 +251,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage('create', 'test.noop', 'alerts'), + message: getUnauthorizedErrorMessage('create', 'test.noop', 'alerts'), statusCode: 403, }); break; @@ -275,11 +259,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'create', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('create', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -318,7 +298,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.noop', 'some consumer patrick invented' @@ -345,11 +325,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'create', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('create', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -384,11 +360,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'create', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('create', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -481,11 +453,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'create', - 'test.validation', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('create', 'test.validation', 'alertsFixture'), statusCode: 403, }); break; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/delete.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/delete.ts index 2b6086cf38d92..d6cb57261a558 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/delete.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/delete.ts @@ -10,8 +10,7 @@ import { UserAtSpaceScenarios } from '../../../scenarios'; import { getUrlPrefix, getTestRuleData, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, ObjectRemover, } from '../../../../common/lib'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; @@ -57,11 +56,7 @@ export default function createDeleteTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'delete', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('delete', 'test.noop', 'alertsFixture'), statusCode: 403, }); objectRemover.add(space.id, createdAlert.id, 'rule', 'alerting'); @@ -112,7 +107,7 @@ export default function createDeleteTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'delete', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -163,7 +158,7 @@ export default function createDeleteTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'delete', 'test.unrestricted-noop', 'alertsFixture' @@ -176,20 +171,6 @@ export default function createDeleteTests({ getService }: FtrProviderContext) { break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'delete', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - objectRemover.add(space.id, createdAlert.id, 'rule', 'alerting'); - // Ensure task still exists - await getScheduledTask(createdAlert.scheduled_task_id); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -229,7 +210,7 @@ export default function createDeleteTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage('delete', 'test.noop', 'alerts'), + message: getUnauthorizedErrorMessage('delete', 'test.noop', 'alerts'), statusCode: 403, }); objectRemover.add(space.id, createdAlert.id, 'rule', 'alerting'); @@ -238,11 +219,7 @@ export default function createDeleteTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'delete', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('delete', 'test.noop', 'alertsFixture'), statusCode: 403, }); objectRemover.add(space.id, createdAlert.id, 'rule', 'alerting'); @@ -333,11 +310,7 @@ export default function createDeleteTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'delete', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('delete', 'test.noop', 'alertsFixture'), statusCode: 403, }); objectRemover.add(space.id, createdAlert.id, 'rule', 'alerting'); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/disable.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/disable.ts index df9fc34e17014..8539b1a7b87c3 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/disable.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/disable.ts @@ -14,8 +14,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, TaskManagerDoc, } from '../../../../common/lib'; @@ -83,11 +82,7 @@ export default function createDisableAlertTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'disable', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('disable', 'test.noop', 'alertsFixture'), statusCode: 403, }); // Ensure task still exists and is still enabled @@ -158,7 +153,7 @@ export default function createDisableAlertTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'disable', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -210,7 +205,7 @@ export default function createDisableAlertTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'disable', 'test.unrestricted-noop', 'alertsFixture' @@ -220,17 +215,6 @@ export default function createDisableAlertTests({ getService }: FtrProviderConte break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'disable', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -273,7 +257,7 @@ export default function createDisableAlertTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage('disable', 'test.noop', 'alerts'), + message: getUnauthorizedErrorMessage('disable', 'test.noop', 'alerts'), statusCode: 403, }); break; @@ -281,11 +265,7 @@ export default function createDisableAlertTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'disable', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('disable', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -344,11 +324,7 @@ export default function createDisableAlertTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'disable', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('disable', 'test.noop', 'alertsFixture'), statusCode: 403, }); // Ensure task still exists and is still enabled diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/enable.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/enable.ts index 73842073a542b..8c6e3ecd5ea5a 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/enable.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/enable.ts @@ -14,8 +14,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, TaskManagerDoc, } from '../../../../common/lib'; @@ -82,11 +81,7 @@ export default function createEnableAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'enable', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('enable', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -94,11 +89,7 @@ export default function createEnableAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'enable', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('enable', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -168,7 +159,7 @@ export default function createEnableAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'enable', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -215,7 +206,7 @@ export default function createEnableAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'enable', 'test.unrestricted-noop', 'alertsFixture' @@ -225,17 +216,6 @@ export default function createEnableAlertTests({ getService }: FtrProviderContex break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'enable', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -268,7 +248,7 @@ export default function createEnableAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage('enable', 'test.noop', 'alerts'), + message: getUnauthorizedErrorMessage('enable', 'test.noop', 'alerts'), statusCode: 403, }); break; @@ -276,11 +256,7 @@ export default function createEnableAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'enable', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('enable', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -333,11 +309,7 @@ export default function createEnableAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'enable', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('enable', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get.ts index d3117ed4ce209..edacff0fbfd13 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get.ts @@ -12,8 +12,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; @@ -50,7 +49,7 @@ const getTestUtils = ( expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage('get', 'test.noop', 'alertsFixture'), + message: getUnauthorizedErrorMessage('get', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -134,7 +133,7 @@ const getTestUtils = ( expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'get', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -179,7 +178,7 @@ const getTestUtils = ( expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'get', 'test.unrestricted-noop', 'alertsFixture' @@ -189,17 +188,6 @@ const getTestUtils = ( break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'get', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'global_read at space1': case 'space_1_all_with_restricted_fixture at space1': @@ -237,11 +225,7 @@ const getTestUtils = ( expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'get', - 'test.restricted-noop', - 'alerts' - ), + message: getUnauthorizedErrorMessage('get', 'test.restricted-noop', 'alerts'), statusCode: 403, }); break; @@ -250,7 +234,7 @@ const getTestUtils = ( expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'get', 'test.restricted-noop', 'alertsRestrictedFixture' diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get_alert_state.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get_alert_state.ts index e3da329c1cbaf..65fe412e177d3 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get_alert_state.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get_alert_state.ts @@ -10,8 +10,7 @@ import { getUrlPrefix, ObjectRemover, getTestRuleData, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; import { UserAtSpaceScenarios } from '../../../scenarios'; @@ -47,7 +46,7 @@ export default function createGetAlertStateTests({ getService }: FtrProviderCont expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage('get', 'test.noop', 'alertsFixture'), + message: getUnauthorizedErrorMessage('get', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -87,7 +86,7 @@ export default function createGetAlertStateTests({ getService }: FtrProviderCont expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'get', 'test.unrestricted-noop', 'alertsFixture' @@ -97,17 +96,6 @@ export default function createGetAlertStateTests({ getService }: FtrProviderCont break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'get', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'global_read at space1': case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get_alert_summary.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get_alert_summary.ts index 7ad1a54de2485..9ba49b93e0b39 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get_alert_summary.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/get_alert_summary.ts @@ -11,8 +11,7 @@ import { getUrlPrefix, ObjectRemover, getTestRuleData, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; import { UserAtSpaceScenarios } from '../../../scenarios'; @@ -50,7 +49,7 @@ export default function createGetAlertSummaryTests({ getService }: FtrProviderCo expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage('get', 'test.noop', 'alertsFixture'), + message: getUnauthorizedErrorMessage('get', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -119,7 +118,7 @@ export default function createGetAlertSummaryTests({ getService }: FtrProviderCo expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'get', 'test.unrestricted-noop', 'alertsFixture' @@ -129,17 +128,6 @@ export default function createGetAlertSummaryTests({ getService }: FtrProviderCo break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'get', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'global_read at space1': case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts index de1bb08f62772..90ddf77f888c3 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts @@ -20,7 +20,7 @@ import { getTestRuleData, ObjectRemover, AlertUtils, - getConsumerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, TaskManagerUtils, getEventLog, } from '../../../../common/lib'; @@ -130,7 +130,7 @@ export default function alertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -254,7 +254,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -500,7 +500,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -601,7 +601,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.authorization', 'alertsFixture' @@ -719,7 +719,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -815,7 +815,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -873,7 +873,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -953,7 +953,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -1018,7 +1018,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -1074,7 +1074,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -1133,7 +1133,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -1192,7 +1192,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing', 'alertsFixture' @@ -1256,7 +1256,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing-alert-as-data', 'alertsFixture' @@ -1318,7 +1318,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing-alert-as-data', 'alertsFixture' @@ -1392,7 +1392,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing-alert-as-data', 'alertsFixture' @@ -1447,7 +1447,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing-alert-as-data', 'alertsFixture' @@ -1676,7 +1676,7 @@ instanceStateValue: true expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.always-firing-alert-as-data', 'alertsFixture' diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/get_action_error_log.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/get_action_error_log.ts index c2e4084fd195c..dc45a48016466 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/get_action_error_log.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/get_action_error_log.ts @@ -8,13 +8,20 @@ import expect from '@kbn/expect'; import { ESTestIndexTool } from '@kbn/alerting-api-integration-helpers'; -import { Spaces } from '../../../scenarios'; -import { getUrlPrefix, ObjectRemover, getTestRuleData, getEventLog } from '../../../../common/lib'; +import { Spaces, UserAtSpaceScenarios } from '../../../scenarios'; +import { + getUrlPrefix, + ObjectRemover, + getTestRuleData, + getEventLog, + getUnauthorizedErrorMessage, +} from '../../../../common/lib'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; // eslint-disable-next-line import/no-default-export export default function createGetActionErrorLogTests({ getService }: FtrProviderContext) { const supertest = getService('supertest'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); const retry = getService('retry'); const es = getService('es'); const esTestIndexTool = new ESTestIndexTool(es, retry); @@ -33,6 +40,98 @@ export default function createGetActionErrorLogTests({ getService }: FtrProvider await objectRemover.removeAll(); }); + for (const scenario of UserAtSpaceScenarios) { + const { user, space } = scenario; + describe(scenario.id, () => { + it('gets action error logs for rules with action errors with appropriate authorization', async () => { + const { body: createdConnector } = await supertest + .post(`${getUrlPrefix(space.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'connector that throws', + connector_type_id: 'test.throw', + config: {}, + secrets: {}, + }) + .expect(200); + objectRemover.add(space.id, createdConnector.id, 'action', 'actions'); + + const { body: createdRule } = await supertest + .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + rule_type_id: 'test.cumulative-firing', + actions: [ + { + id: createdConnector.id, + group: 'default', + params: {}, + }, + ], + }) + ) + .expect(200); + objectRemover.add(space.id, createdRule.id, 'rule', 'alerting'); + + await waitForEvents( + createdRule.id, + 'alerting', + new Map([['execute', { gte: 1 }]]), + space.id + ); + await waitForEvents( + createdRule.id, + 'actions', + new Map([['execute', { gte: 1 }]]), + space.id + ); + + const response = await supertestWithoutAuth + .get( + `${getUrlPrefix(space.id)}/internal/alerting/rule/${ + createdRule.id + }/_action_error_log?date_start=${dateStart}` + ) + .auth(user.username, user.password); + + switch (scenario.id) { + case 'no_kibana_privileges at space1': + case 'space_1_all at space2': + expect(response.statusCode).to.eql(403); + expect(response.body).to.eql({ + error: 'Forbidden', + message: getUnauthorizedErrorMessage( + 'get', + 'test.cumulative-firing', + 'alertsFixture' + ), + statusCode: 403, + }); + break; + case 'global_read at space1': + case 'superuser at space1': + case 'space_1_all at space1': + case 'space_1_all_alerts_none_actions at space1': + case 'space_1_all_with_restricted_fixture at space1': + expect(response.statusCode).to.eql(200); + expect(response.body.totalErrors).to.eql(1); + expect(response.body.errors.length).to.eql(1); + + for (const errors of response.body.errors) { + expect(errors.type).to.equal('actions'); + expect(errors.message).to.equal( + `action execution failure: test.throw:${createdConnector.id}: connector that throws - an error occurred while running the action: this action is intended to fail; retry: true` + ); + } + break; + default: + throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); + } + }); + }); + } + it('gets action error logs from an alternate space', async () => { const { body: createdConnector } = await supertest .post(`${getUrlPrefix(Spaces[1].id)}/api/actions/connector`) @@ -99,12 +198,13 @@ export default function createGetActionErrorLogTests({ getService }: FtrProvider { gte: number; } - > + >, + spaceId = Spaces[1].id ) { await retry.try(async () => { return await getEventLog({ getService, - spaceId: Spaces[1].id, + spaceId, type: 'alert', id, provider, diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_all.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_all.ts index ca3570a511d17..bba117642e3c3 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_all.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_all.ts @@ -14,8 +14,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; // eslint-disable-next-line import/no-default-export @@ -72,11 +71,7 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'muteAll', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('muteAll', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -137,7 +132,7 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'muteAll', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -191,7 +186,7 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'muteAll', 'test.unrestricted-noop', 'alertsFixture' @@ -201,17 +196,6 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'muteAll', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -257,11 +241,7 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'muteAll', - 'test.restricted-noop', - 'alerts' - ), + message: getUnauthorizedErrorMessage('muteAll', 'test.restricted-noop', 'alerts'), statusCode: 403, }); break; @@ -271,7 +251,7 @@ export default function createMuteAlertTests({ getService }: FtrProviderContext) expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'muteAll', 'test.restricted-noop', 'alertsRestrictedFixture' diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_instance.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_instance.ts index 63a285e0f4cb8..3a308f47b4812 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_instance.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/mute_instance.ts @@ -14,8 +14,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; // eslint-disable-next-line import/no-default-export @@ -72,11 +71,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'muteAlert', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('muteAlert', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -137,7 +132,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'muteAlert', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -191,7 +186,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'muteAlert', 'test.unrestricted-noop', 'alertsFixture' @@ -201,17 +196,6 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'muteAlert', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -257,11 +241,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'muteAlert', - 'test.restricted-noop', - 'alerts' - ), + message: getUnauthorizedErrorMessage('muteAlert', 'test.restricted-noop', 'alerts'), statusCode: 403, }); break; @@ -271,7 +251,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'muteAlert', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -324,11 +304,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'muteAlert', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('muteAlert', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/rbac_legacy.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/rbac_legacy.ts index ce30fbc283034..8cca92320cfa7 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/rbac_legacy.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/rbac_legacy.ts @@ -150,7 +150,7 @@ export default function alertTests({ getService }: FtrProviderContext) { expect(failedUpdateKeyDueToAlertsPrivilegesResponse.body).to.eql({ error: 'Forbidden', message: - 'Unauthorized to updateApiKey a "test.always-firing" rule for "alertsFixture"', + 'Unauthorized by "alertsFixture" to updateApiKey "test.always-firing" rule', statusCode: 403, }); break; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/snooze.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/snooze.ts index 2376e05635e9c..8073ef48fbefe 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/snooze.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/snooze.ts @@ -14,8 +14,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; const NOW = new Date().toISOString(); @@ -84,11 +83,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'snooze', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('snooze', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -155,7 +150,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'snooze', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -215,7 +210,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'snooze', 'test.unrestricted-noop', 'alertsFixture' @@ -225,17 +220,6 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'snooze', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -287,11 +271,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'snooze', - 'test.restricted-noop', - 'alerts' - ), + message: getUnauthorizedErrorMessage('snooze', 'test.restricted-noop', 'alerts'), statusCode: 403, }); break; @@ -301,7 +281,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'snooze', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -380,11 +360,7 @@ export default function createSnoozeRuleTests({ getService }: FtrProviderContext expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'snooze', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('snooze', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_all.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_all.ts index b4576650c58c8..9623462b8ae45 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_all.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_all.ts @@ -14,8 +14,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; // eslint-disable-next-line import/no-default-export @@ -77,11 +76,7 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'unmuteAll', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('unmuteAll', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -147,7 +142,7 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unmuteAll', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -206,7 +201,7 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unmuteAll', 'test.unrestricted-noop', 'alertsFixture' @@ -216,17 +211,6 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'unmuteAll', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -277,11 +261,7 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'unmuteAll', - 'test.restricted-noop', - 'alerts' - ), + message: getUnauthorizedErrorMessage('unmuteAll', 'test.restricted-noop', 'alerts'), statusCode: 403, }); break; @@ -291,7 +271,7 @@ export default function createUnmuteAlertTests({ getService }: FtrProviderContex expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unmuteAll', 'test.restricted-noop', 'alertsRestrictedFixture' diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_instance.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_instance.ts index 1aa84f64a7e79..3d9f49eb3cffb 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_instance.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unmute_instance.ts @@ -14,8 +14,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; // eslint-disable-next-line import/no-default-export @@ -77,11 +76,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'unmuteAlert', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('unmuteAlert', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -147,7 +142,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unmuteAlert', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -206,7 +201,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unmuteAlert', 'test.unrestricted-noop', 'alertsFixture' @@ -216,17 +211,6 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'unmuteAlert', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -277,7 +261,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unmuteAlert', 'test.restricted-noop', 'alerts' @@ -291,7 +275,7 @@ export default function createMuteAlertInstanceTests({ getService }: FtrProvider expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unmuteAlert', 'test.restricted-noop', 'alertsRestrictedFixture' diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unsnooze.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unsnooze.ts index 39b5b720ccda3..2f697b0ee3aff 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unsnooze.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/unsnooze.ts @@ -14,8 +14,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; // eslint-disable-next-line import/no-default-export @@ -71,11 +70,7 @@ export default function createUnsnoozeRuleTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'unsnooze', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('unsnooze', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -137,7 +132,7 @@ export default function createUnsnoozeRuleTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unsnooze', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -192,7 +187,7 @@ export default function createUnsnoozeRuleTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unsnooze', 'test.unrestricted-noop', 'alertsFixture' @@ -202,17 +197,6 @@ export default function createUnsnoozeRuleTests({ getService }: FtrProviderConte break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'unsnooze', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -259,11 +243,7 @@ export default function createUnsnoozeRuleTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'unsnooze', - 'test.restricted-noop', - 'alerts' - ), + message: getUnauthorizedErrorMessage('unsnooze', 'test.restricted-noop', 'alerts'), statusCode: 403, }); break; @@ -273,7 +253,7 @@ export default function createUnsnoozeRuleTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'unsnooze', 'test.restricted-noop', 'alertsRestrictedFixture' diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update.ts index b6972730cc780..31250862265ea 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update.ts @@ -14,8 +14,7 @@ import { getTestRuleData, ObjectRemover, ensureDatetimeIsWithinRange, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; @@ -89,11 +88,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'update', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('update', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -199,7 +194,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'update', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -289,7 +284,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'update', 'test.unrestricted-noop', 'alertsFixture' @@ -299,17 +294,6 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'update', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(200); @@ -391,11 +375,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'update', - 'test.restricted-noop', - 'alerts' - ), + message: getUnauthorizedErrorMessage('update', 'test.restricted-noop', 'alerts'), statusCode: 403, }); break; @@ -405,7 +385,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'update', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -504,11 +484,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'update', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('update', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -591,11 +567,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'update', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('update', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -763,11 +735,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'update', - 'test.validation', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('update', 'test.validation', 'alertsFixture'), statusCode: 403, }); break; @@ -864,11 +832,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'update', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('update', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -941,11 +905,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'update', - 'test.longRunning', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('update', 'test.longRunning', 'alertsFixture'), statusCode: 403, }); break; @@ -1009,11 +969,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'update', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('update', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update_api_key.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update_api_key.ts index 6a594316796d4..7e2f4e74aa023 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update_api_key.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/update_api_key.ts @@ -14,8 +14,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; // eslint-disable-next-line import/no-default-export @@ -71,11 +70,7 @@ export default function createUpdateApiKeyTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'updateApiKey', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('updateApiKey', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; @@ -136,7 +131,7 @@ export default function createUpdateApiKeyTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'updateApiKey', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -190,7 +185,7 @@ export default function createUpdateApiKeyTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'updateApiKey', 'test.unrestricted-noop', 'alertsFixture' @@ -200,17 +195,6 @@ export default function createUpdateApiKeyTests({ getService }: FtrProviderConte break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.statusCode).to.eql(403); - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'updateApiKey', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.statusCode).to.eql(204); @@ -256,7 +240,7 @@ export default function createUpdateApiKeyTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'updateApiKey', 'test.restricted-noop', 'alerts' @@ -270,7 +254,7 @@ export default function createUpdateApiKeyTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'updateApiKey', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -334,11 +318,7 @@ export default function createUpdateApiKeyTests({ getService }: FtrProviderConte expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'updateApiKey', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('updateApiKey', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_delete.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_delete.ts index 4febd9b866f15..ef50420bb6561 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_delete.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_delete.ts @@ -8,7 +8,12 @@ import expect from '@kbn/expect'; import { UserAtSpaceScenarios, SuperuserAtSpace1 } from '../../../scenarios'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; -import { getUrlPrefix, getTestRuleData, ObjectRemover } from '../../../../common/lib'; +import { + getUrlPrefix, + getTestRuleData, + ObjectRemover, + getUnauthorizedErrorMessage, +} from '../../../../common/lib'; const getDefaultRules = (response: any) => ({ id: response.body.rules[0].id, @@ -130,7 +135,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDelete a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDelete', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -195,8 +200,11 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: - 'Unauthorized to bulkDelete a "test.restricted-noop" rule for "alertsRestrictedFixture"', + message: getUnauthorizedErrorMessage( + 'bulkDelete', + 'test.restricted-noop', + 'alertsRestrictedFixture' + ), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -342,7 +350,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDelete a "test.noop" rule by "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDelete', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -409,7 +417,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDelete a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDelete', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -481,7 +489,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDelete a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDelete', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -550,7 +558,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDelete a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDelete', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_disable.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_disable.ts index 13a89de8381ca..8ea0b913620aa 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_disable.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_disable.ts @@ -8,7 +8,12 @@ import expect from '@kbn/expect'; import { UserAtSpaceScenarios, SuperuserAtSpace1 } from '../../../scenarios'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; -import { getUrlPrefix, getTestRuleData, ObjectRemover } from '../../../../common/lib'; +import { + getUrlPrefix, + getTestRuleData, + ObjectRemover, + getUnauthorizedErrorMessage, +} from '../../../../common/lib'; const getDefaultRules = (response: any) => ({ id: response.body.rules[0].id, @@ -95,7 +100,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDisable a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDisable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -112,7 +117,7 @@ export default ({ getService }: FtrProviderContext) => { } }); - it('should handle bulk disable of one rule appropriately based on id when consumer is the same as producer', async () => { + it('should handle bulk disable of one rule appropriately based on id when consumer is the same as producer', async () => { const { body: createdRule } = await supertest .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) .set('kbn-xsrf', 'foo') @@ -144,8 +149,11 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: - 'Unauthorized to bulkDisable a "test.restricted-noop" rule for "alertsRestrictedFixture"', + message: getUnauthorizedErrorMessage( + 'bulkDisable', + 'test.restricted-noop', + 'alertsRestrictedFixture' + ), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -269,7 +277,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDisable a "test.noop" rule by "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDisable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -328,7 +336,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDisable a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDisable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -378,7 +386,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDisable a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDisable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -414,7 +422,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkDisable a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkDisable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_edit.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_edit.ts index 2f3f36b9dc34b..c948791e5ea49 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_edit.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_edit.ts @@ -13,8 +13,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, - getProducerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, } from '../../../../common/lib'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; @@ -85,7 +84,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkEdit a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkEdit', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -178,7 +177,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkEdit a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkEdit', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -249,7 +248,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'bulkEdit', 'test.restricted-noop', 'alertsRestrictedFixture' @@ -310,7 +309,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'bulkEdit', 'test.unrestricted-noop', 'alertsFixture' @@ -321,17 +320,6 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { break; case 'space_1_all at space1': case 'space_1_all_alerts_none_actions at space1': - expect(response.body).to.eql({ - error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( - 'bulkEdit', - 'test.unrestricted-noop', - 'alertsRestrictedFixture' - ), - statusCode: 403, - }); - expect(response.statusCode).to.eql(403); - break; case 'superuser at space1': case 'space_1_all_with_restricted_fixture at space1': expect(response.body.rules[0].tags).to.eql(['foo', 'tag-A', 'tag-B']); @@ -390,7 +378,7 @@ export default function createUpdateTests({ getService }: FtrProviderContext) { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: getProducerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'bulkEdit', 'test.restricted-noop', 'alertsRestrictedFixture' diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_enable.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_enable.ts index 3f1239558c5eb..0366eca2ad24d 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_enable.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/bulk_enable.ts @@ -8,7 +8,12 @@ import expect from '@kbn/expect'; import { UserAtSpaceScenarios, SuperuserAtSpace1 } from '../../../scenarios'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; -import { getUrlPrefix, getTestRuleData, ObjectRemover } from '../../../../common/lib'; +import { + getUrlPrefix, + getTestRuleData, + ObjectRemover, + getUnauthorizedErrorMessage, +} from '../../../../common/lib'; const defaultSuccessfulResponse = { total: 1, rules: [], errors: [], taskIdsFailedToBeEnabled: [] }; @@ -61,7 +66,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkEnable a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkEnable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -147,8 +152,11 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: - 'Unauthorized to bulkEnable a "test.restricted-noop" rule for "alertsRestrictedFixture"', + message: getUnauthorizedErrorMessage( + 'bulkEnable', + 'test.restricted-noop', + 'alertsRestrictedFixture' + ), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -213,7 +221,6 @@ export default ({ getService }: FtrProviderContext) => { expect(response.statusCode).to.eql(400); break; case 'superuser at space1': - expect(response.body).to.eql(defaultSuccessfulResponse); expect(response.statusCode).to.eql(200); break; default: @@ -253,7 +260,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkEnable a "test.noop" rule by "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkEnable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -303,7 +310,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkEnable a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkEnable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -353,7 +360,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkEnable a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkEnable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); @@ -393,7 +400,7 @@ export default ({ getService }: FtrProviderContext) => { case 'global_read at space1': expect(response.body).to.eql({ error: 'Forbidden', - message: 'Unauthorized to bulkEnable a "test.noop" rule for "alertsFixture"', + message: getUnauthorizedErrorMessage('bulkEnable', 'test.noop', 'alertsFixture'), statusCode: 403, }); expect(response.statusCode).to.eql(403); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/clone.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/clone.ts index 46aef808c0877..2cbec3853f02e 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/clone.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/clone.ts @@ -10,7 +10,7 @@ import { Spaces, UserAtSpaceScenarios } from '../../../scenarios'; import { checkAAD, getTestRuleData, - getConsumerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, getUrlPrefix, ObjectRemover, TaskManagerDoc, @@ -121,11 +121,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'create', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('create', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/run_soon.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/run_soon.ts index 831edffbae51a..461d603734d10 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/run_soon.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/run_soon.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { UserAtSpaceScenarios } from '../../../scenarios'; import { getTestRuleData, - getConsumerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, getUrlPrefix, ObjectRemover, } from '../../../../common/lib'; @@ -50,11 +50,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.statusCode).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( - 'runSoon', - 'test.noop', - 'alertsFixture' - ), + message: getUnauthorizedErrorMessage('runSoon', 'test.noop', 'alertsFixture'), statusCode: 403, }); break; diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/create.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/create.ts index f3e7d8891cde3..eb9f90cb41f2a 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/create.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/create.ts @@ -15,7 +15,7 @@ import { getUrlPrefix, getTestRuleData, ObjectRemover, - getConsumerUnauthorizedErrorMessage, + getUnauthorizedErrorMessage, TaskManagerDoc, } from '../../../../common/lib'; import { FtrProviderContext } from '../../../../common/ftr_provider_context'; @@ -444,7 +444,7 @@ export default function createAlertTests({ getService }: FtrProviderContext) { expect(response.status).to.eql(403); expect(response.body).to.eql({ error: 'Forbidden', - message: getConsumerUnauthorizedErrorMessage( + message: getUnauthorizedErrorMessage( 'create', 'test.noop', 'some consumer patrick invented' diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/rule_types.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/rule_types.ts index ae2e2d61267c4..8f9b7566b7640 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/rule_types.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/rule_types.ts @@ -137,6 +137,7 @@ export default function listRuleTypes({ getService }: FtrProviderContext) { hasFieldsForAAD: false, hasAlertsMappings: false, ruleTaskTimeout: '5m', + validLegacyConsumers: ['alerts'], }); expect(Object.keys(authorizedConsumers)).to.contain('alertsFixture'); }); diff --git a/x-pack/test/api_integration/apis/maps/maps_telemetry.ts b/x-pack/test/api_integration/apis/maps/maps_telemetry.ts index 4883f01b5ac6e..d67cd7051860c 100644 --- a/x-pack/test/api_integration/apis/maps/maps_telemetry.ts +++ b/x-pack/test/api_integration/apis/maps/maps_telemetry.ts @@ -36,8 +36,8 @@ export default function ({ getService }: FtrProviderContext) { return fieldStat.name === 'geo_point'; } ); - expect(geoPointFieldStats.count).to.be(31); - expect(geoPointFieldStats.index_count).to.be(9); + expect(geoPointFieldStats.count).to.be(39); + expect(geoPointFieldStats.index_count).to.be(10); const geoShapeFieldStats = apiResponse.cluster_stats.indices.mappings.field_types.find( (fieldStat: estypes.ClusterStatsFieldTypes) => { diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_hidden_datastreams.ts b/x-pack/test/fleet_api_integration/apis/epm/install_hidden_datastreams.ts index c734af44b36f4..93b30775170dc 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_hidden_datastreams.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_hidden_datastreams.ts @@ -23,7 +23,7 @@ export default function (providerContext: FtrProviderContext) { skipIfNoDockerRegistry(providerContext); setupFleetAndAgents(providerContext); - after(async () => { + afterEach(async () => { await deletePackage('apm', '8.8.0'); }); @@ -88,5 +88,60 @@ export default function (providerContext: FtrProviderContext) { // datastream rolled over expect(Object.keys(ds).length).greaterThan(1); }); + + it('should not rollover datastreams when successfully updated mappings', async function () { + await supertest + .post(`/api/fleet/epm/packages/apm/8.8.0`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }) + .expect(200); + + await es.index({ + index: 'metrics-apm.app.default-default', + document: { + '@timestamp': '2023-05-30T07:50:00.000Z', + agent: { + name: 'go', + }, + data_stream: { + dataset: 'metrics-apm.app.default', + namespace: 'default', + type: 'metrics', + }, + ecs: { + version: '8.8.0-dev', + }, + event: { + agent_id_status: 'missing', + ingested: '2023-05-30T07:57:12Z', + }, + observer: { + hostname: '047e282994fb', + type: 'apm-server', + version: '8.8.0', + }, + }, + }); + + let ds = await es.indices.get({ + index: 'metrics-apm.app.default*', + expand_wildcards: ['open', 'hidden'], + }); + const indicesBefore = Object.keys(ds).length; + + await supertest + .post(`/api/fleet/epm/packages/apm/8.8.0`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }) + .expect(200); + + ds = await es.indices.get({ + index: 'metrics-apm.app.default*', + expand_wildcards: ['open', 'hidden'], + }); + const indicesAfter = Object.keys(ds).length; + // datastream did not roll over + expect(indicesAfter).equal(indicesBefore); + }); }); } diff --git a/x-pack/test/functional/apps/infra/constants.ts b/x-pack/test/functional/apps/infra/constants.ts index 26698db8ebf34..fcead1cf9dc26 100644 --- a/x-pack/test/functional/apps/infra/constants.ts +++ b/x-pack/test/functional/apps/infra/constants.ts @@ -29,6 +29,9 @@ export const DATES = { kubernetesSectionStartDate: '2023-09-19T07:20:00.000Z', kubernetesSectionEndDate: '2023-09-19T07:21:00.000Z', }, + pods: { + withData: '01/20/2022 5:10:00 PM', + }, stream: { startWithData: '2018-10-17T19:42:22.000Z', endWithData: '2018-10-17T19:57:21.000Z', @@ -47,6 +50,7 @@ export const ML_JOB_IDS = [ export const HOSTS_LINK_LOCAL_STORAGE_KEY = 'inventoryUI:hostsLinkClicked'; +export const INVENTORY_PATH = 'metrics/inventory'; export const NODE_DETAILS_PATH = 'detail/host'; export const HOSTS_VIEW_PATH = 'metrics/hosts'; diff --git a/x-pack/test/functional/apps/infra/home_page.ts b/x-pack/test/functional/apps/infra/home_page.ts index 8c63587f23889..d5d2ad2cb8b84 100644 --- a/x-pack/test/functional/apps/infra/home_page.ts +++ b/x-pack/test/functional/apps/infra/home_page.ts @@ -8,10 +8,11 @@ import expect from '@kbn/expect'; import { KUBERNETES_TOUR_STORAGE_KEY } from '@kbn/infra-plugin/public/pages/metrics/inventory_view/components/kubernetes_tour'; import { FtrProviderContext } from '../../ftr_provider_context'; -import { DATES } from './constants'; +import { DATES, INVENTORY_PATH } from './constants'; const DATE_WITH_DATA = DATES.metricsAndLogs.hosts.withData; const DATE_WITHOUT_DATA = DATES.metricsAndLogs.hosts.withoutData; +const DATE_WITH_POD_WITH_DATA = DATES.metricsAndLogs.pods.withData; export default ({ getPageObjects, getService }: FtrProviderContext) => { const esArchiver = getService('esArchiver'); @@ -21,8 +22,15 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); - // Failing: See https://github.com/elastic/kibana/issues/164164 - describe.skip('Home page', function () { + const returnTo = async (path: string, timeout = 2000) => + retry.waitForWithTimeout('returned to inventory', timeout, async () => { + await browser.goBack(); + await pageObjects.header.waitUntilLoadingHasFinished(); + const currentUrl = await browser.getCurrentUrl(); + return !!currentUrl.match(path); + }); + + describe('Home page', function () { this.tags('includeFirefox'); before(async () => { await kibanaServer.savedObjects.cleanStandardList(); @@ -51,20 +59,19 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { ); await pageObjects.infraHome.waitForLoading(); await pageObjects.header.waitUntilLoadingHasFinished(); - - const documentTitle = await browser.getTitle(); - expect(documentTitle).to.contain('Uh oh - Observability - Elastic'); }); }); describe('with metrics present', () => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs'); + await esArchiver.load('x-pack/test/functional/es_archives/infra/8.0.0/pods_only'); await pageObjects.common.navigateToApp('infraOps'); await pageObjects.infraHome.waitForLoading(); }); after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs'); + await esArchiver.unload('x-pack/test/functional/es_archives/infra/8.0.0/pods_only'); await browser.removeLocalStorageItem(KUBERNETES_TOUR_STORAGE_KEY); }); @@ -203,6 +210,43 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { it('toggles the inventory switcher', async () => { await pageObjects.infraHome.toggleInventorySwitcher(); }); + + describe('Redirect to Node Details page', () => { + before(async () => { + await pageObjects.common.navigateToApp('infraOps'); + await pageObjects.infraHome.waitForLoading(); + }); + + it('Should redirect to Host Details page', async () => { + await pageObjects.infraHome.goToTime(DATE_WITH_DATA); + await pageObjects.infraHome.goToHost(); + await pageObjects.infraHome.clickOnFirstNode(); + await pageObjects.infraHome.clickOnNodeDetailsFlyoutOpenAsPage(); + + await retry.tryForTime(3 * 1000, async () => { + const documentTitle = await browser.getTitle(); + expect(documentTitle).to.contain( + 'demo-stack-redis-01 - Infrastructure - Observability - Elastic' + ); + }); + + await returnTo(INVENTORY_PATH); + }); + + it('Should redirect to Node Details page', async () => { + await pageObjects.infraHome.goToTime(DATE_WITH_POD_WITH_DATA); + await pageObjects.infraHome.goToPods(); + await pageObjects.infraHome.clickOnFirstNode(); + await pageObjects.infraHome.clickOnGoToNodeDetails(); + + await retry.tryForTime(3 * 1000, async () => { + const documentTitle = await browser.getTitle(); + expect(documentTitle).to.contain('pod-0 - Infrastructure - Observability - Elastic'); + }); + + await returnTo(INVENTORY_PATH); + }); + }); }); describe('alerts flyouts', () => { diff --git a/x-pack/test/functional/apps/transform/permissions/full_transform_access.ts b/x-pack/test/functional/apps/transform/permissions/full_transform_access.ts index 4969832b3600e..2e7779767eaca 100644 --- a/x-pack/test/functional/apps/transform/permissions/full_transform_access.ts +++ b/x-pack/test/functional/apps/transform/permissions/full_transform_access.ts @@ -17,6 +17,10 @@ export default function ({ getService }: FtrProviderContext) { describe('with no data loaded', function () { before(async () => { await transform.securityUI.loginAsTransformPowerUser(); + + // For this test to work, make sure there are no pre-existing transform present. + // For example, solutions might set up transforms automatically. + await transform.api.cleanTransformIndices(); }); after(async () => { diff --git a/x-pack/test/functional/apps/transform/permissions/read_transform_access.ts b/x-pack/test/functional/apps/transform/permissions/read_transform_access.ts index 918cd5c144a84..4e715d4f07467 100644 --- a/x-pack/test/functional/apps/transform/permissions/read_transform_access.ts +++ b/x-pack/test/functional/apps/transform/permissions/read_transform_access.ts @@ -17,6 +17,10 @@ export default function ({ getService }: FtrProviderContext) { describe('with no data loaded', function () { before(async () => { await transform.securityUI.loginAsTransformViewer(); + + // For this test to work, make sure there are no pre-existing transform present. + // For example, solutions might set up transforms automatically. + await transform.api.cleanTransformIndices(); }); after(async () => { diff --git a/x-pack/test/functional/apps/upgrade_assistant/deprecation_pages.ts b/x-pack/test/functional/apps/upgrade_assistant/deprecation_pages.ts index 19b4fad72d272..0167ed424850e 100644 --- a/x-pack/test/functional/apps/upgrade_assistant/deprecation_pages.ts +++ b/x-pack/test/functional/apps/upgrade_assistant/deprecation_pages.ts @@ -27,7 +27,7 @@ export default function upgradeAssistantFunctionalTests({ try { /** * Trigger "Total shards" ES Upgrade readiness check - * the number of shards in the test cluster is 25-27 + * the number of shards in the test cluster is 25-29 * so 5 max shards per node should trigger this check * on both local and CI environments. */ @@ -53,7 +53,7 @@ export default function upgradeAssistantFunctionalTests({ persistent: { cluster: { // initial cluster setting from x-pack/test/functional/config.upgrade_assistant.js - max_shards_per_node: 27, + max_shards_per_node: 29, }, }, }, diff --git a/x-pack/test/functional/config.upgrade_assistant.ts b/x-pack/test/functional/config.upgrade_assistant.ts index a9e0a447a2961..fee6504ae57b4 100644 --- a/x-pack/test/functional/config.upgrade_assistant.ts +++ b/x-pack/test/functional/config.upgrade_assistant.ts @@ -31,7 +31,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { 'cluster.routing.allocation.disk.threshold_enabled=true', // make sure disk thresholds are enabled for UA cluster testing 'cluster.routing.allocation.disk.watermark.low=30%', 'cluster.info.update.interval=10s', - 'cluster.max_shards_per_node=27', + 'cluster.max_shards_per_node=29', ], }, }; diff --git a/x-pack/test/functional/es_archives/rule_registry/o11y_alerts/data.json b/x-pack/test/functional/es_archives/rule_registry/o11y_alerts/data.json new file mode 100644 index 0000000000000..c3a19cfbcf81a --- /dev/null +++ b/x-pack/test/functional/es_archives/rule_registry/o11y_alerts/data.json @@ -0,0 +1,104 @@ +{ + "type": "doc", + "value": { + "index": ".alerts-observability.apm.alerts-default-000001", + "id": "NoxgpHkBqbdrfX07MqXV", + "source": { + "event.kind" : "signal", + "@timestamp": "2020-12-16T15:16:18.570Z", + "kibana.alert.rule.rule_type_id": "apm.error_rate", + "message": "hello world 1", + "kibana.alert.rule.consumer": "apm", + "kibana.alert.workflow_status": "open", + "kibana.alert.time_range": { + "gte": "2020-12-16T15:16:18.570Z" + }, + "kibana.alert.status": "active", + "kibana.space_ids": ["space1", "space2"] + } + } +} + +{ + "type": "doc", + "value": { + "index": ".alerts-observability.apm.alerts-default-000001", + "id": "space1alert", + "source": { + "event.kind" : "signal", + "@timestamp": "2020-12-16T15:16:18.570Z", + "kibana.alert.rule.rule_type_id": "apm.error_rate", + "message": "hello world 1", + "kibana.alert.rule.consumer": "apm", + "kibana.alert.workflow_status": "recovered", + "kibana.alert.time_range": { + "gte": "2020-12-16T15:16:18.570Z", + "lte": "2020-12-16T15:16:19.570Z" + }, + "kibana.alert.status": "recovered", + "kibana.space_ids": ["space1"] + } + } +} + +{ + "type": "doc", + "value": { + "index": ".alerts-observability.apm.alerts-default-000001", + "id": "space2alert", + "source": { + "event.kind" : "signal", + "@timestamp": "2020-12-16T15:16:19.570Z", + "kibana.alert.rule.rule_type_id": "apm.error_rate", + "message": "hello world 1", + "kibana.alert.rule.consumer": "apm", + "kibana.alert.workflow_status": "open", + "kibana.alert.status": "active", + "kibana.space_ids": ["space2"] + } + } +} + +{ + "type": "doc", + "value": { + "index": ".alerts-observability.logs.alerts-default-000001", + "id": "123456789XYZ", + "source": { + "event.kind": "signal", + "@timestamp": "2020-12-16T15:16:18.570Z", + "kibana.alert.rule.rule_type_id": "logs.alert.document.count", + "message": "hello world 1", + "kibana.alert.rule.consumer": "logs", + "kibana.alert.workflow_status": "open", + "kibana.alert.time_range": { + "gte": "2020-12-16T15:16:18.570Z" + }, + "kibana.alert.status": "active", + "kibana.space_ids": ["space1", "space2"] + } + } +} + +{ + "type": "doc", + "value": { + "index": ".alerts-observability.logs.alerts-default-000001", + "id": "space1alertLogs", + "source": { + "event.kind": "signal", + "@timestamp": "2020-12-16T15:16:18.570Z", + "kibana.alert.rule.rule_type_id": "logs.alert.document.count", + "message": "hello world 1", + "kibana.alert.rule.consumer": "logs", + "kibana.alert.workflow_status": "recovered", + "kibana.alert.time_range": { + "gte": "2020-12-16T15:16:18.570Z", + "lte": "2020-12-16T15:27:19.570Z" + }, + "kibana.alert.end": "2020-12-16T15:27:19.570Z", + "kibana.alert.status": "recovered", + "kibana.space_ids": ["space1"] + } + } +} diff --git a/x-pack/test/functional/es_archives/rule_registry/o11y_alerts/mappings.json b/x-pack/test/functional/es_archives/rule_registry/o11y_alerts/mappings.json new file mode 100644 index 0000000000000..0faf5daf3df76 --- /dev/null +++ b/x-pack/test/functional/es_archives/rule_registry/o11y_alerts/mappings.json @@ -0,0 +1,66 @@ +{ + "type": "index", + "value": { + "index": ".alerts-observability.apm.alerts-default-000001", + "mappings": { + "properties": { + "message": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "kibana.alert.rule.consumer": { + "type": "keyword", + "ignore_above": 256 + }, + "kibana.alert.time_range": { + "type": "date_range", + "format": "epoch_millis||strict_date_optional_time" + } + } + } + } +} + + +{ + "type": "index", + "value": { + "index": ".alerts-observability.logs.alerts-default-000001", + "aliases": { + ".alerts-observability.logs.alerts-default": {} + }, + "mappings": { + "properties": { + "message": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + }, + "kibana.alert.rule.consumer": { + "type": "keyword", + "ignore_above": 256 + }, + "kibana.alert.status": { + "type": "keyword", + "ignore_above": 256 + }, + "kibana.alert.time_range": { + "type": "date_range", + "format": "epoch_millis||strict_date_optional_time" + }, + "kibana.alert.end": { + "type": "date" + } + } + } + } +} diff --git a/x-pack/test/functional/page_objects/infra_home_page.ts b/x-pack/test/functional/page_objects/infra_home_page.ts index d7a2b86b2d5a3..2f3d0209d857f 100644 --- a/x-pack/test/functional/page_objects/infra_home_page.ts +++ b/x-pack/test/functional/page_objects/infra_home_page.ts @@ -87,6 +87,28 @@ export function InfraHomePageProvider({ getService, getPageObjects }: FtrProvide return Promise.all(promises); }, + async getFirstNode() { + const nodes = await testSubjects.findAll('nodeContainer'); + return nodes[0]; + }, + + async clickOnFirstNode() { + const firstNode = await this.getFirstNode(); + firstNode.click(); + }, + + async clickOnGoToNodeDetails() { + await retry.try(async () => { + await testSubjects.click('viewAssetDetailsContextMenuItem'); + }); + }, + + async clickOnNodeDetailsFlyoutOpenAsPage() { + await retry.try(async () => { + await testSubjects.click('infraNodeContextPopoverOpenAsPageButton'); + }); + }, + async sortNodesBy(sort: string) { await testSubjects.click('waffleSortByDropdown'); if (sort === 'value') { @@ -175,9 +197,7 @@ export function InfraHomePageProvider({ getService, getPageObjects }: FtrProvide await testSubjects.click('openInventorySwitcher'); await testSubjects.find('goToHost'); await testSubjects.click('openInventorySwitcher'); - return retry.tryForTime(2 * 1000, async () => { - return testSubjects.missingOrFail('goToHost'); - }); + await testSubjects.missingOrFail('goToHost', { timeout: 10 * 1000 }); }, async goToHost() { diff --git a/x-pack/test/observability_functional/apps/observability/pages/rules_page.ts b/x-pack/test/observability_functional/apps/observability/pages/rules_page.ts index 7f8711fba0ab1..e912a52d36a18 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/rules_page.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/rules_page.ts @@ -8,13 +8,16 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; -export default ({ getService }: FtrProviderContext) => { +export default ({ getService, getPageObjects }: FtrProviderContext) => { const esArchiver = getService('esArchiver'); const testSubjects = getService('testSubjects'); const supertest = getService('supertest'); const find = getService('find'); const retry = getService('retry'); const RULE_ENDPOINT = '/api/alerting/rule'; + const INTERNAL_RULE_ENDPOINT = '/internal/alerting/rules'; + + const PageObjects = getPageObjects(['header']); async function createRule(rule: any): Promise { const ruleResponse = await supertest.post(RULE_ENDPOINT).set('kbn-xsrf', 'foo').send(rule); @@ -22,11 +25,21 @@ export default ({ getService }: FtrProviderContext) => { return ruleResponse.body.id; } + async function getRuleByName(name: string) { + const { + body: { data: rules }, + } = await supertest + .get(`${INTERNAL_RULE_ENDPOINT}/_find?search=${name}&search_fields=name`) + .expect(200); + return rules.find((rule: any) => rule.name === name); + } + async function deleteRuleById(ruleId: string) { - const ruleResponse = await supertest - .delete(`${RULE_ENDPOINT}/${ruleId}`) - .set('kbn-xsrf', 'foo'); - expect(ruleResponse.status).to.eql(204); + await supertest + .patch(`${INTERNAL_RULE_ENDPOINT}/_bulk_delete`) + .set('kbn-xsrf', 'foo') + .send({ ids: [ruleId] }) + .expect(200); return true; } @@ -42,11 +55,47 @@ export default ({ getService }: FtrProviderContext) => { return rows; }; + const selectAndFillInEsQueryRule = async (ruleName: string) => { + await testSubjects.setValue('ruleNameInput', ruleName); + await testSubjects.click(`.es-query-SelectOption`); + await testSubjects.click('queryFormType_esQuery'); + await testSubjects.click('selectIndexExpression'); + const indexComboBox = await find.byCssSelector('#indexSelectSearchBox'); + await indexComboBox.click(); + await indexComboBox.type('*'); + const filterSelectItems = await find.allByCssSelector(`.euiFilterSelectItem`); + await filterSelectItems[1].click(); + await testSubjects.click('thresholdAlertTimeFieldSelect'); + await retry.try(async () => { + const fieldOptions = await find.allByCssSelector('#thresholdTimeField option'); + expect(fieldOptions[1]).not.to.be(undefined); + await fieldOptions[1].click(); + }); + await testSubjects.click('closePopover'); + }; + describe('Observability Rules page', function () { this.tags('includeFirefox'); const observability = getService('observability'); + const navigateAndOpenCreateRuleFlyout = async () => { + await observability.alerts.common.navigateToRulesPage(); + await retry.waitFor( + 'Create Rule button is visible', + async () => await testSubjects.exists('createRuleButton') + ); + await retry.waitFor( + 'Create Rule button is enabled', + async () => await testSubjects.isEnabled('createRuleButton') + ); + await observability.alerts.rulesPage.clickCreateRuleButton(); + await retry.waitFor( + 'Create Rule flyout is visible', + async () => await testSubjects.exists('addRuleFlyoutTitle') + ); + }; + before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/observability/alerts'); await esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs'); @@ -67,20 +116,85 @@ export default ({ getService }: FtrProviderContext) => { describe('Create rule button', () => { it('Show Create Rule flyout when Create Rule button is clicked', async () => { - await observability.alerts.common.navigateToRulesPage(); - await retry.waitFor( - 'Create Rule button is visible', - async () => await testSubjects.exists('createRuleButton') + await navigateAndOpenCreateRuleFlyout(); + }); + }); + + describe('Create rules flyout', async () => { + const ruleName = 'esQueryRule'; + + afterEach(async () => { + const rule = await getRuleByName(ruleName); + if (rule) { + await deleteRuleById(rule.id); + } + await observability.users.restoreDefaultTestUserRole(); + }); + + it('Allows ES query rules to be created by users with only infrastructure feature enabled', async () => { + await observability.users.setTestUserRole( + observability.users.defineBasicObservabilityRole({ + infrastructure: ['all'], + }) ); - await retry.waitFor( - 'Create Rule button is enabled', - async () => await testSubjects.isEnabled('createRuleButton') + await navigateAndOpenCreateRuleFlyout(); + await selectAndFillInEsQueryRule(ruleName); + + await testSubjects.click('saveRuleButton'); + + await PageObjects.header.waitUntilLoadingHasFinished(); + + const tableRows = await find.allByCssSelector('.euiTableRow'); + const rows = await getRulesList(tableRows); + expect(rows.length).to.be(1); + expect(rows[0].name).to.contain(ruleName); + }); + + it('allows ES query rules to be created by users with only logs feature enabled', async () => { + await observability.users.setTestUserRole( + observability.users.defineBasicObservabilityRole({ + logs: ['all'], + }) ); - await observability.alerts.rulesPage.clickCreateRuleButton(); - await retry.waitFor( - 'Create Rule flyout is visible', - async () => await testSubjects.exists('addRuleFlyoutTitle') + await navigateAndOpenCreateRuleFlyout(); + await selectAndFillInEsQueryRule(ruleName); + + await testSubjects.click('saveRuleButton'); + + await PageObjects.header.waitUntilLoadingHasFinished(); + + const tableRows = await find.allByCssSelector('.euiTableRow'); + const rows = await getRulesList(tableRows); + expect(rows.length).to.be(1); + expect(rows[0].name).to.contain(ruleName); + }); + + it('Should allow the user to select consumers when creating ES query rules', async () => { + await observability.users.setTestUserRole( + observability.users.defineBasicObservabilityRole({ + logs: ['all'], + infrastructure: ['all'], + }) + ); + + await navigateAndOpenCreateRuleFlyout(); + await selectAndFillInEsQueryRule(ruleName); + + await retry.waitFor('consumer select modal is visible', async () => { + return await testSubjects.exists('ruleFormConsumerSelect'); + }); + + const consumerSelect = await testSubjects.find('ruleFormConsumerSelect'); + await consumerSelect.click(); + const consumerOptionsList = await testSubjects.find( + 'comboBoxOptionsList ruleFormConsumerSelect-optionsList' + ); + const consumerOptions = await consumerOptionsList.findAllByClassName( + 'euiComboBoxOption__content' ); + expect(consumerOptions.length).eql(2); + expect(await consumerOptions[0].getVisibleText()).eql('Metrics'); + expect(await consumerOptions[1].getVisibleText()).eql('Logs'); }); }); diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts index 1d328f05545d6..a5f039eaed5f2 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts @@ -97,6 +97,7 @@ export default function ({ getService }: FtrProviderContext) { 'alerting:monitoring_alert_thread_pool_write_rejections', 'alerting:monitoring_ccr_read_exceptions', 'alerting:monitoring_shard_size', + 'alerting:observability.rules.custom_threshold', 'alerting:siem.eqlRule', 'alerting:siem.indicatorRule', 'alerting:siem.mlRule', diff --git a/x-pack/test/profiling_api_integration/common/bettertest.ts b/x-pack/test/profiling_api_integration/common/bettertest.ts new file mode 100644 index 0000000000000..ca679a24539ac --- /dev/null +++ b/x-pack/test/profiling_api_integration/common/bettertest.ts @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { format } from 'url'; +import supertest from 'supertest'; +import request from 'superagent'; + +type HttpMethod = 'get' | 'post' | 'put' | 'delete'; + +export type BetterTest = (options: { + pathname: string; + query?: Record; + method?: HttpMethod; + body?: any; +}) => Promise<{ status: number; body: T }>; + +/* + * This is a wrapper around supertest that throws an error if the response status is not 200. + * This is useful for tests that expect a 200 response + * It also makes it easier to debug tests that fail because of a 500 response. + */ +export function getBettertest(st: supertest.SuperTest): BetterTest { + return async ({ pathname, method = 'get', query, body }) => { + const url = format({ pathname, query }); + + let res: request.Response; + if (body) { + res = await st[method](url).send(body).set('kbn-xsrf', 'true'); + } else { + res = await st[method](url).set('kbn-xsrf', 'true'); + } + + // supertest doesn't throw on http errors + if (res?.status !== 200 && res?.status !== 202) { + throw new BetterTestError(res); + } + + return res; + }; +} + +type ErrorResponse = Omit & { + body: { + statusCode: number; + error: string; + message: string; + attributes: object; + }; +}; + +export class BetterTestError extends Error { + res: ErrorResponse; + + constructor(res: request.Response) { + // @ts-expect-error + const req = res.req as any; + super( + `Unhandled BetterTestError: +Status: "${res.status}" +Path: "${req.method} ${req.path}" +Body: ${JSON.stringify(res.body)}` + ); + + this.res = res; + } +} diff --git a/x-pack/test/profiling_api_integration/common/config.ts b/x-pack/test/profiling_api_integration/common/config.ts index edb17c9b6c69d..52755a7cba037 100644 --- a/x-pack/test/profiling_api_integration/common/config.ts +++ b/x-pack/test/profiling_api_integration/common/config.ts @@ -5,26 +5,24 @@ * 2.0. */ -import { format, UrlObject } from 'url'; import { FtrConfigProviderContext } from '@kbn/test'; import supertest from 'supertest'; -import { getRoutePaths } from '@kbn/profiling-plugin/common'; +import { format, UrlObject } from 'url'; import { ProfilingFtrConfigName } from '../configs'; +import { createProfilingApiClient } from './api_supertest'; +import { createProfilingUsers } from './create_profiling_users'; +import { + PROFILING_TEST_PASSWORD, + ProfilingUsername, +} from './create_profiling_users/authentication'; import { FtrProviderContext, InheritedFtrProviderContext, InheritedServices, } from './ftr_provider_context'; import { RegistryProvider } from './registry'; -import { createProfilingApiClient } from './api_supertest'; -import { - ProfilingUsername, - PROFILING_TEST_PASSWORD, -} from './create_profiling_users/authentication'; -import { createProfilingUsers } from './create_profiling_users'; export type CreateTestConfig = ReturnType; -const profilingRoutePaths = getRoutePaths(); export async function getProfilingApiClient({ kibanaServer, @@ -112,19 +110,6 @@ export function createTestConfig( await supertest(kibanaServerUrl).post('/api/fleet/setup').set('kbn-xsrf', 'foo'); - const result = await adminUser({ - endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, - }); - if (!result.body.has_setup) { - // eslint-disable-next-line no-console - console.log('Setting up Universal Profiling'); - await adminUser({ - endpoint: `POST ${profilingRoutePaths.HasSetupESResources}`, - }); - // eslint-disable-next-line no-console - console.log('Universal Profiling set up'); - } - return { noAccessUser: await getProfilingApiClient({ kibanaServer, diff --git a/x-pack/test/profiling_api_integration/common/registry.ts b/x-pack/test/profiling_api_integration/common/registry.ts index 807c0da7e2f90..b6cf058e249cc 100644 --- a/x-pack/test/profiling_api_integration/common/registry.ts +++ b/x-pack/test/profiling_api_integration/common/registry.ts @@ -9,12 +9,10 @@ import { joinByKey } from '@kbn/apm-plugin/common/utils/join_by_key'; import { maybe } from '@kbn/apm-plugin/common/utils/maybe'; import callsites from 'callsites'; import { castArray, groupBy } from 'lodash'; -import Path from 'path'; -import fs from 'fs'; import { ProfilingFtrConfigName } from '../configs'; +import { getBettertest } from './bettertest'; import { FtrProviderContext } from './ftr_provider_context'; - -const esArchiversPath = Path.posix.join(__dirname, 'fixtures', 'es_archiver', 'profiling'); +import { cleanUpProfilingData } from '../utils/profiling_data'; interface RunCondition { config: ProfilingFtrConfigName; @@ -22,6 +20,9 @@ interface RunCondition { export function RegistryProvider({ getService }: FtrProviderContext) { const profilingFtrConfig = getService('profilingFtrConfig'); + const supertest = getService('supertest'); + const bettertest = getBettertest(supertest); + const es = getService('es'); const callbacks: Array< @@ -97,16 +98,6 @@ export function RegistryProvider({ getService }: FtrProviderContext) { const logger = getService('log'); - const logWithTimer = () => { - const start = process.hrtime(); - - return (message: string) => { - const diff = process.hrtime(start); - const time = `${Math.round(diff[0] * 1000 + diff[1] / 1e6)}ms`; - logger.info(`(${time}) ${message}`); - }; - }; - const groups = joinByKey(callbacks, ['config'], (a, b) => ({ ...a, ...b, @@ -126,36 +117,11 @@ export function RegistryProvider({ getService }: FtrProviderContext) { groupsForConfig.forEach((group) => { const { runs } = group; - const runBefore = async () => { - const log = logWithTimer(); - const content = fs.readFileSync(`${esArchiversPath}/data.json`, 'utf8'); - log(`Loading profiling data`); - await es.bulk({ operations: content.split('\n'), refresh: 'wait_for' }); - log('Loaded profiling data'); - }; - const runAfter = async () => { - const log = logWithTimer(); - log(`Unloading Profiling data`); - const indices = await es.cat.indices({ format: 'json' }); - const profilingIndices = indices - .filter((index) => index.index !== undefined) - .map((index) => index.index) - .filter((index) => { - return index!.startsWith('profiling') || index!.startsWith('.profiling'); - }) as string[]; - await Promise.all([ - ...profilingIndices.map((index) => es.indices.delete({ index })), - es.indices.deleteDataStream({ - name: 'profiling-events*', - }), - ]); - log('Unloaded Profiling data'); + await cleanUpProfilingData({ es, bettertest, logger }); }; describe('Loading profiling data', () => { - before(runBefore); - runs.forEach((run) => { run.cb(); }); diff --git a/x-pack/test/profiling_api_integration/tests/__snapshots__/functions.spec.snap b/x-pack/test/profiling_api_integration/tests/__snapshots__/functions.spec.snap index f5c9cb456cf0d..4d444750bd6eb 100644 --- a/x-pack/test/profiling_api_integration/tests/__snapshots__/functions.spec.snap +++ b/x-pack/test/profiling_api_integration/tests/__snapshots__/functions.spec.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Profiling API tests functions.spec.ts cloud Loading profiling data Functions api returns correct result 1`] = ` +exports[`Profiling API tests functions.spec.ts cloud Loading profiling data Functions api With data returns correct result 1`] = ` Object { "SamplingRate": 1, "TopN": Array [ diff --git a/x-pack/test/profiling_api_integration/tests/feature_controls.spec.ts b/x-pack/test/profiling_api_integration/tests/feature_controls.spec.ts index 8c75127200218..fcbf38864c64d 100644 --- a/x-pack/test/profiling_api_integration/tests/feature_controls.spec.ts +++ b/x-pack/test/profiling_api_integration/tests/feature_controls.spec.ts @@ -10,6 +10,8 @@ import { getRoutePaths } from '@kbn/profiling-plugin/common'; import { ProfilingApiError } from '../common/api_supertest'; import { getProfilingApiClient } from '../common/config'; import { FtrProviderContext } from '../common/ftr_provider_context'; +import { setupProfiling } from '../utils/profiling_data'; +import { getBettertest } from '../common/bettertest'; const profilingRoutePaths = getRoutePaths(); @@ -17,7 +19,8 @@ export default function featureControlsTests({ getService }: FtrProviderContext) const registry = getService('registry'); const profilingApiClient = getService('profilingApiClient'); const log = getService('log'); - + const supertest = getService('supertest'); + const bettertest = getBettertest(supertest); const start = encodeURIComponent(new Date(Date.now() - 10000).valueOf()); const end = encodeURIComponent(new Date().valueOf()); @@ -111,7 +114,9 @@ export default function featureControlsTests({ getService }: FtrProviderContext) } registry.when('Profiling feature controls', { config: 'cloud' }, () => { - before(async () => {}); + before(async () => { + await setupProfiling(bettertest, log); + }); it(`returns forbidden for users with no access to profiling APIs`, async () => { await executeRequests({ runAsUser: profilingApiClient.noAccessUser, diff --git a/x-pack/test/profiling_api_integration/tests/functions.spec.ts b/x-pack/test/profiling_api_integration/tests/functions.spec.ts index d2b9d4d9237e0..5f4f1b47288cf 100644 --- a/x-pack/test/profiling_api_integration/tests/functions.spec.ts +++ b/x-pack/test/profiling_api_integration/tests/functions.spec.ts @@ -9,39 +9,55 @@ import { getRoutePaths } from '@kbn/profiling-plugin/common'; import { TopNFunctions } from '@kbn/profiling-utils'; import expect from '@kbn/expect'; import { FtrProviderContext } from '../common/ftr_provider_context'; +import { loadProfilingData, setupProfiling } from '../utils/profiling_data'; +import { getBettertest } from '../common/bettertest'; const profilingRoutePaths = getRoutePaths(); export default function featureControlsTests({ getService }: FtrProviderContext) { const registry = getService('registry'); const profilingApiClient = getService('profilingApiClient'); + const log = getService('log'); + const supertest = getService('supertest'); + const bettertest = getBettertest(supertest); + const es = getService('es'); const start = new Date('2023-03-17T01:00:00.000Z').getTime(); const end = new Date('2023-03-17T01:05:00.000Z').getTime(); registry.when('Functions api', { config: 'cloud' }, () => { - let functions: TopNFunctions; before(async () => { - const response = await profilingApiClient.adminUser({ - endpoint: `GET ${profilingRoutePaths.TopNFunctions}`, - params: { - query: { - timeFrom: start, - timeTo: end, - kuery: '', - startIndex: 0, - endIndex: 5, + await setupProfiling(bettertest, log); + await loadProfilingData(es, log); + }); + + describe('With data', () => { + let functions: TopNFunctions; + before(async () => { + await setupProfiling(bettertest, log); + await loadProfilingData(es, log); + const response = await profilingApiClient.adminUser({ + endpoint: `GET ${profilingRoutePaths.TopNFunctions}`, + params: { + query: { + timeFrom: start, + timeTo: end, + kuery: '', + startIndex: 0, + endIndex: 5, + }, }, - }, + }); + functions = response.body as TopNFunctions; + }); + + it(`returns correct result`, async () => { + expect(functions.TopN.length).to.equal(5); + expect(functions.TotalCount).to.equal(3599); + expect(functions.selfCPU).to.equal(397); + expect(functions.totalCPU).to.equal(399); + expectSnapshot(functions).toMatch(); }); - functions = response.body as TopNFunctions; - }); - it(`returns correct result`, async () => { - expect(functions.TopN.length).to.equal(5); - expect(functions.TotalCount).to.equal(3599); - expect(functions.selfCPU).to.equal(397); - expect(functions.totalCPU).to.equal(399); - expectSnapshot(functions).toMatch(); }); }); } diff --git a/x-pack/test/profiling_api_integration/tests/has_setup.spec.ts b/x-pack/test/profiling_api_integration/tests/has_setup.spec.ts new file mode 100644 index 0000000000000..08da57c97ff2c --- /dev/null +++ b/x-pack/test/profiling_api_integration/tests/has_setup.spec.ts @@ -0,0 +1,357 @@ +/* + * 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 expect from '@kbn/expect'; +import { getRoutePaths } from '@kbn/profiling-plugin/common'; +import { ProfilingStatus } from '@kbn/profiling-utils'; +import { getBettertest } from '../common/bettertest'; +import { FtrProviderContext } from '../common/ftr_provider_context'; +import { deletePackagePolicy, getProfilingPackagePolicyIds } from '../utils/fleet'; +import { loadProfilingData, setupProfiling } from '../utils/profiling_data'; + +const profilingRoutePaths = getRoutePaths(); + +export default function featureControlsTests({ getService }: FtrProviderContext) { + const registry = getService('registry'); + const profilingApiClient = getService('profilingApiClient'); + const supertest = getService('supertest'); + const bettertest = getBettertest(supertest); + const logger = getService('log'); + const es = getService('es'); + + registry.when('Profiling status check', { config: 'cloud' }, () => { + describe('Profiling is not set up and no data is loaded', () => { + describe('Admin user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.adminUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has not been set up`, async () => { + expect(statusCheck.has_setup).to.be(false); + }); + + it(`does not have data`, async () => { + expect(statusCheck.has_data).to.be(false); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + }); + + describe('Viewer user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.readUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has been set up`, async () => { + expect(statusCheck.has_setup).to.be(true); + }); + + it(`has data`, async () => { + expect(statusCheck.has_data).to.be(true); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + + it(`is unauthorized to fully check profiling status `, async () => { + expect(statusCheck.unauthorized).to.be(true); + }); + }); + }); + + describe('Collector integration is not installed', () => { + let collectorId: string | undefined; + before(async () => { + await setupProfiling(bettertest, logger); + const response = await getProfilingPackagePolicyIds(bettertest); + collectorId = response.collectorId; + if (collectorId) { + await deletePackagePolicy(bettertest, collectorId); + } + }); + + it('expectes a collector integration to exist', () => { + expect(collectorId).not.to.be(undefined); + }); + + describe('Admin user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.adminUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has not been set up`, async () => { + expect(statusCheck.has_setup).to.be(false); + }); + + it(`does not have data`, async () => { + expect(statusCheck.has_data).to.be(false); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + }); + + describe('Viewer user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.readUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has been set up`, async () => { + expect(statusCheck.has_setup).to.be(true); + }); + + it(`has data`, async () => { + expect(statusCheck.has_data).to.be(true); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + + it(`is unauthorized to fully check profiling status `, async () => { + expect(statusCheck.unauthorized).to.be(true); + }); + }); + }); + + describe('Symbolizer integration is not installed', () => { + let symbolizerId: string | undefined; + before(async () => { + await setupProfiling(bettertest, logger); + const response = await getProfilingPackagePolicyIds(bettertest); + symbolizerId = response.symbolizerId; + if (symbolizerId) { + await deletePackagePolicy(bettertest, symbolizerId); + } + }); + + it('expectes a symbolizer integration to exist', () => { + expect(symbolizerId).not.to.be(undefined); + }); + + describe('Admin user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.adminUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has not been set up`, async () => { + expect(statusCheck.has_setup).to.be(false); + }); + + it(`does not have data`, async () => { + expect(statusCheck.has_data).to.be(false); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + }); + + describe('Viewer user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.readUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has been set up`, async () => { + expect(statusCheck.has_setup).to.be(true); + }); + + it(`has data`, async () => { + expect(statusCheck.has_data).to.be(true); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + + it(`is unauthorized to fully check profiling status `, async () => { + expect(statusCheck.unauthorized).to.be(true); + }); + }); + }); + + describe('APM integration is not installed', () => { + before(async () => { + await setupProfiling(bettertest, logger); + await deletePackagePolicy(bettertest, 'elastic-cloud-apm'); + }); + + describe('Admin user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.adminUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has been set up`, async () => { + expect(statusCheck.has_setup).to.be(true); + }); + + it(`does not have data`, async () => { + expect(statusCheck.has_data).to.be(false); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + }); + + describe('Viewer user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.readUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has been set up`, async () => { + expect(statusCheck.has_setup).to.be(true); + }); + + it(`has data`, async () => { + expect(statusCheck.has_data).to.be(true); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + + it(`is unauthorized to fully check profiling status `, async () => { + expect(statusCheck.unauthorized).to.be(true); + }); + }); + }); + + describe('Profiling is set up', () => { + before(async () => { + await setupProfiling(bettertest, logger); + }); + + describe('without data', () => { + describe('Admin user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.adminUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has been set up`, async () => { + expect(statusCheck.has_setup).to.be(true); + }); + + it(`does not have data`, async () => { + expect(statusCheck.has_data).to.be(false); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + }); + + describe('Viewer user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.readUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has been set up`, async () => { + expect(statusCheck.has_setup).to.be(true); + }); + + it(`has data`, async () => { + expect(statusCheck.has_data).to.be(true); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + + it(`is unauthorized to fully check profiling status `, async () => { + expect(statusCheck.unauthorized).to.be(true); + }); + }); + }); + + describe('with data', () => { + before(async () => { + await loadProfilingData(es, logger); + }); + describe('Admin user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.adminUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has been set up`, async () => { + expect(statusCheck.has_setup).to.be(true); + }); + + it(`does not have data`, async () => { + expect(statusCheck.has_data).to.be(true); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + }); + + describe('Viewer user', () => { + let statusCheck: ProfilingStatus; + before(async () => { + const response = await profilingApiClient.readUser({ + endpoint: `GET ${profilingRoutePaths.HasSetupESResources}`, + }); + statusCheck = response.body; + }); + it(`has been set up`, async () => { + expect(statusCheck.has_setup).to.be(true); + }); + + it(`has data`, async () => { + expect(statusCheck.has_data).to.be(true); + }); + + it(`does not have pre 8.9.1 data`, async () => { + expect(statusCheck.pre_8_9_1_data).to.be(false); + }); + + it(`is unauthorized to fully check profiling status `, async () => { + expect(statusCheck.unauthorized).to.be(true); + }); + }); + }); + }); + }); +} diff --git a/x-pack/test/profiling_api_integration/utils/fleet.ts b/x-pack/test/profiling_api_integration/utils/fleet.ts new file mode 100644 index 0000000000000..2bd0442930435 --- /dev/null +++ b/x-pack/test/profiling_api_integration/utils/fleet.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PackagePolicy } from '@kbn/fleet-plugin/common'; +import { + COLLECTOR_PACKAGE_POLICY_NAME, + SYMBOLIZER_PACKAGE_POLICY_NAME, +} from '@kbn/profiling-data-access-plugin/common'; +import { BetterTest } from '../common/bettertest'; + +export async function deletePackagePolicy(bettertest: BetterTest, packagePolicyId: string) { + return bettertest({ + pathname: `/api/fleet/package_policies/delete`, + method: 'post', + body: { packagePolicyIds: [packagePolicyId] }, + }); +} + +export async function getProfilingPackagePolicyIds(bettertest: BetterTest) { + const response = await bettertest<{ items: PackagePolicy[] }>({ + pathname: '/api/fleet/package_policies', + method: 'get', + }); + + const collector = response.body.items.find((item) => item.name === COLLECTOR_PACKAGE_POLICY_NAME); + const symbolizer = response.body.items.find( + (item) => item.name === SYMBOLIZER_PACKAGE_POLICY_NAME + ); + + return { + collectorId: collector?.id, + symbolizerId: symbolizer?.id, + }; +} diff --git a/x-pack/test/profiling_api_integration/utils/profiling_data.ts b/x-pack/test/profiling_api_integration/utils/profiling_data.ts new file mode 100644 index 0000000000000..c0e8a2b05dac9 --- /dev/null +++ b/x-pack/test/profiling_api_integration/utils/profiling_data.ts @@ -0,0 +1,97 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { Client } from '@elastic/elasticsearch'; +import { getRoutePaths } from '@kbn/profiling-plugin/common'; +import { ProfilingStatus } from '@kbn/profiling-utils'; +import { ToolingLog } from '@kbn/tooling-log'; +import fs from 'fs'; +import Path from 'path'; +import { BetterTest } from '../common/bettertest'; +import { deletePackagePolicy, getProfilingPackagePolicyIds } from './fleet'; + +const profilingRoutePaths = getRoutePaths(); + +const esArchiversPath = Path.posix.join( + __dirname, + '..', + 'common', + 'fixtures', + 'es_archiver', + 'profiling' +); + +function logWithTimer(logger: ToolingLog) { + const start = process.hrtime(); + + return (message: string) => { + const diff = process.hrtime(start); + const time = `${Math.round(diff[0] * 1000 + diff[1] / 1e6)}ms`; + logger.info(`(${time}) ${message}`); + }; +} + +export async function cleanUpProfilingData({ + es, + bettertest, + logger, +}: { + es: Client; + bettertest: BetterTest; + logger: ToolingLog; +}) { + const log = logWithTimer(logger); + log(`Unloading Profiling data`); + + const [indices, { collectorId, symbolizerId }] = await Promise.all([ + es.cat.indices({ format: 'json' }), + getProfilingPackagePolicyIds(bettertest), + ]); + + const profilingIndices = indices + .filter((index) => index.index !== undefined) + .map((index) => index.index) + .filter((index) => { + return index!.startsWith('profiling') || index!.startsWith('.profiling'); + }) as string[]; + + await Promise.all([ + ...profilingIndices.map((index) => es.indices.delete({ index })), + es.indices.deleteDataStream({ + name: 'profiling-events*', + }), + collectorId ? deletePackagePolicy(bettertest, collectorId) : Promise.resolve(), + symbolizerId ? deletePackagePolicy(bettertest, symbolizerId) : Promise.resolve(), + ]); + log('Unloaded Profiling data'); +} + +export async function setupProfiling(bettertest: BetterTest, logger: ToolingLog) { + const log = logWithTimer(logger); + const response = await bettertest({ + method: 'get', + pathname: profilingRoutePaths.HasSetupESResources, + }); + + if (response.body.has_setup) { + log(`Skipping Universal Profiling set up, already set up`); + } else { + log(`Setting up Universal Profiling`); + await bettertest({ + method: 'post', + pathname: profilingRoutePaths.HasSetupESResources, + }); + log(`Universal Profiling set up`); + } +} + +export async function loadProfilingData(es: Client, logger: ToolingLog) { + const log = logWithTimer(logger); + log(`Loading profiling data`); + const content = fs.readFileSync(`${esArchiversPath}/data.json`, 'utf8'); + await es.bulk({ operations: content.split('\n'), refresh: 'wait_for' }); + log('Loaded profiling data'); +} diff --git a/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_alert_summary.ts b/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_alert_summary.ts index b22fc830cb73d..5da72c7f6a76a 100644 --- a/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_alert_summary.ts +++ b/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_alert_summary.ts @@ -24,11 +24,11 @@ export default ({ getService }: FtrProviderContext) => { describe('Alerts - GET - _alert_summary', () => { before(async () => { - await esArchiver.load('x-pack/test/functional/es_archives/rule_registry/alerts'); + await esArchiver.load('x-pack/test/functional/es_archives/rule_registry/o11y_alerts'); }); after(async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/rule_registry/alerts'); + await esArchiver.unload('x-pack/test/functional/es_archives/rule_registry/o11y_alerts'); }); it('Alert summary for all LOGS alerts with features', async () => { diff --git a/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_alerts_index.ts b/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_alerts_index.ts index 2ac420a8beb6b..1146fa925908c 100644 --- a/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_alerts_index.ts +++ b/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_alerts_index.ts @@ -20,7 +20,7 @@ export default ({ getService }: FtrProviderContext) => { const TEST_URL = '/internal/rac/alerts'; const ALERTS_INDEX_URL = `${TEST_URL}/index`; const SPACE1 = 'space1'; - const APM_ALERT_INDEX = '.alerts-observability.apm.alerts'; + const APM_ALERT_INDEX = '.alerts-observability.apm.alerts-default'; const SECURITY_SOLUTION_ALERT_INDEX = '.alerts-security.alerts'; const getAPMIndexName = async (user: User, space: string, expectedStatusCode: number = 200) => { @@ -53,12 +53,12 @@ export default ({ getService }: FtrProviderContext) => { describe('Users:', () => { it(`${obsOnlySpacesAll.username} should be able to access the APM alert in ${SPACE1}`, async () => { const indexNames = await getAPMIndexName(obsOnlySpacesAll, SPACE1); - expect(indexNames.includes(`${APM_ALERT_INDEX}-*`)).to.eql(true); // assert this here so we can use constants in the dynamically-defined test cases below + expect(indexNames.includes(APM_ALERT_INDEX)).to.eql(true); // assert this here so we can use constants in the dynamically-defined test cases below }); it(`${superUser.username} should be able to access the APM alert in ${SPACE1}`, async () => { const indexNames = await getAPMIndexName(superUser, SPACE1); - expect(indexNames.includes(`${APM_ALERT_INDEX}-*`)).to.eql(true); // assert this here so we can use constants in the dynamically-defined test cases below + expect(indexNames.includes(APM_ALERT_INDEX)).to.eql(true); // assert this here so we can use constants in the dynamically-defined test cases below }); it(`${secOnlyRead.username} should NOT be able to access the APM alert in ${SPACE1}`, async () => { diff --git a/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_browser_fields_by_feature_id.ts b/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_browser_fields_by_feature_id.ts index feb84ab625fdb..94cbdbce77491 100644 --- a/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_browser_fields_by_feature_id.ts +++ b/x-pack/test/rule_registry/security_and_spaces/tests/basic/get_browser_fields_by_feature_id.ts @@ -46,7 +46,7 @@ export default ({ getService }: FtrProviderContext) => { 'uptime', ]); expect(Object.keys(resp.browserFields)).toEqual( - expect.arrayContaining(['base', 'event', 'kibana', 'message']) + expect.arrayContaining(['base', 'event', 'kibana']) ); }); @@ -66,7 +66,6 @@ export default ({ getService }: FtrProviderContext) => { 'error', 'event', 'kibana', - 'message', 'monitor', 'observer', 'tls', diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/related_integrations/related_integrations.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/related_integrations/related_integrations.cy.ts index b115d93dfd7e8..85640b8c06ad2 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/related_integrations/related_integrations.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/related_integrations/related_integrations.cy.ts @@ -7,11 +7,9 @@ import { omit } from 'lodash'; import { PerformRuleInstallationResponseBody } from '@kbn/security-solution-plugin/common/api/detection_engine'; -import { filterBy, openTable } from '../../../../tasks/rule_details_flyout'; import { generateEvent } from '../../../../objects/event'; import { createDocument, deleteDataStream } from '../../../../tasks/api_calls/elasticsearch'; import { createRuleAssetSavedObject } from '../../../../helpers/rules'; -import { FIELD } from '../../../../screens/alerts_details'; import { INTEGRATION_LINK, INTEGRATION_STATUS } from '../../../../screens/rule_details'; import { INTEGRATIONS_POPOVER, @@ -34,7 +32,6 @@ import { visitSecurityDetectionRulesPage, visitWithoutDateRange, } from '../../../../tasks/login'; -import { expandFirstAlert } from '../../../../tasks/alerts'; import { waitForAlertsToPopulate } from '../../../../tasks/create_new_rule'; import { installIntegrations, @@ -46,6 +43,7 @@ import { } from '../../../../tasks/alerts_detection_rules'; import { ruleDetailsUrl } from '../../../../urls/navigation'; import { enablesRule, waitForPageToBeLoaded } from '../../../../tasks/rule_details'; +import { fetchRuleAlerts } from '../../../../tasks/api_calls/alerts'; // TODO: https://github.com/elastic/kibana/issues/161540 describe('Related integrations', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { @@ -190,12 +188,10 @@ describe('Related integrations', { tags: ['@ess', '@serverless', '@brokenInServe }); }); - // TODO: https://github.com/elastic/kibana/issues/161540 - // Flaky in serverless tests - // @brokenInServerless tag is not working so a skip was needed - describe.skip('rule details', { tags: ['@brokenInServerless'] }, () => { + describe('rule details', () => { beforeEach(() => { visitFirstInstalledPrebuiltRuleDetailsPage(); + waitForPageToBeLoaded(PREBUILT_RULE_NAME); }); it('should display the integrations in the definition section', () => { @@ -212,42 +208,26 @@ describe('Related integrations', { tags: ['@ess', '@serverless', '@brokenInServe }); }); - it('the alerts generated should have a "kibana.alert.rule.parameters.related_integrations" field containing the integrations', () => { - const RELATED_INTEGRATION_FIELD = 'kibana.alert.rule.parameters.related_integrations'; + const RELATED_INTEGRATION_FIELD = 'kibana.alert.rule.parameters.related_integrations'; + it(`the alerts generated should have a "${RELATED_INTEGRATION_FIELD}" field containing the integrations`, () => { deleteDataStream(DATA_STREAM_NAME); createDocument(DATA_STREAM_NAME, generateEvent()); - waitForPageToBeLoaded(PREBUILT_RULE_NAME); enablesRule(); waitForAlertsToPopulate(); - expandFirstAlert(); - openTable(); - filterBy(RELATED_INTEGRATION_FIELD); - - cy.get(FIELD(RELATED_INTEGRATION_FIELD)) - .invoke('text') - .then((stringValue) => { - // Integrations are displayed in the flyout as a string with a format like so: - // '{"package":"aws","version":"1.17.0","integration":"unknown"}{"package":"mock","version":"1.1.0"}{"package":"system","version":"1.17.0"}' - // We need to parse it to an array of valid objects before we can compare it to the expected value - // Otherwise, the test might fail because of the order of the properties in the objects in the string - const jsonStringArray = stringValue.split('}{'); - - const validJsonStringArray = createValidJsonStringArray(jsonStringArray); - - const parsedIntegrations = validJsonStringArray.map((jsonString) => - JSON.parse(jsonString) - ); - - RULE_RELATED_INTEGRATIONS.forEach((integration) => { - expect(parsedIntegrations).to.deep.include({ - package: integration.package, - version: integration.version, - ...(integration.integration ? { integration: integration.integration } : {}), - }); - }); + + fetchRuleAlerts({ + ruleId: 'rule_1', + fields: [RELATED_INTEGRATION_FIELD], + size: 1, + }).then((alertsResponse) => { + expect(alertsResponse.body.hits.hits[0].fields).to.deep.equal({ + [RELATED_INTEGRATION_FIELD]: RULE_RELATED_INTEGRATIONS.map((x) => + omit(x, ['installed', 'enabled']) + ), }); + }); }); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts index 4de348c5bbb4a..4fb7a624bf927 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/cases/creation.cy.ts @@ -53,7 +53,8 @@ import { loginWithUser, visit, visitWithoutDateRange } from '../../../tasks/logi import { CASES_URL, OVERVIEW_URL } from '../../../urls/navigation'; -describe('Cases', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +// Tracked by https://github.com/elastic/security-team/issues/7696 +describe.skip('Cases', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { before(() => { cleanKibana(); createTimeline(getCase1().timeline).then((response) => diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/hosts/host_risk_tab.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/hosts/host_risk_tab.cy.ts index 9f22ece6865e6..6770d051322e5 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/hosts/host_risk_tab.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/hosts/host_risk_tab.cy.ts @@ -21,7 +21,8 @@ import { login, visit } from '../../../tasks/login'; import { HOSTS_URL } from '../../../urls/navigation'; import { clearSearchBar, kqlSearch } from '../../../tasks/security_header'; -describe('risk tab', { tags: ['@ess', '@brokenInServerless'] }, () => { +// Tracked by https://github.com/elastic/security-team/issues/7696 +describe.skip('risk tab', { tags: ['@ess', '@brokenInServerless'] }, () => { before(() => { cleanKibana(); cy.task('esArchiverLoad', { archiveName: 'risk_hosts' }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/network/overflow_items.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/network/overflow_items.cy.ts index 0023054fb44a2..7f7b8921b44b1 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/network/overflow_items.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/network/overflow_items.cy.ts @@ -23,7 +23,8 @@ const testDomainOne = 'myTest'; const testDomainTwo = 'myTest2'; // FLAKY: https://github.com/elastic/kibana/issues/165692 -describe('Overflow items', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { +// Tracked by https://github.com/elastic/security-team/issues/7696 +describe.skip('Overflow items', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { context('Network stats and tables', () => { before(() => { cy.task('esArchiverLoad', { archiveName: 'network' }); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/alerts.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/alerts.ts new file mode 100644 index 0000000000000..43d9952b9b376 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/alerts.ts @@ -0,0 +1,77 @@ +/* + * 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 { + RuleObjectId, + RuleSignatureId, +} from '@kbn/security-solution-plugin/common/api/detection_engine'; +import { rootRequest } from '../common'; + +export const DEFAULT_ALERTS_INDEX_PATTERN = '.alerts-security.alerts-*'; + +interface FetchRuleAlertsParams { + ruleId: RuleObjectId | RuleSignatureId; + fields: string[]; + size?: number; +} + +interface AlertFields { + fields: Record; +} + +interface AlertsResponse { + hits: { + total: { + value: number; + }; + hits: AlertFields[]; + }; +} + +/** + * Returns rule's generated alerts + * + * @param ruleId a rule id representing either RuleObjectId (Saved Object id) or RuleSignatureId (rule_id) + * @param fields fields to fetch (fetch only fields you need to do assertions on) + * @param size a number of alerts to fetch + * + * @returns rule's generated alerts + */ +export function fetchRuleAlerts({ + ruleId, + fields, + size, +}: FetchRuleAlertsParams): Cypress.Chainable> { + return rootRequest({ + method: 'GET', + url: `${Cypress.env('ELASTICSEARCH_URL')}/${DEFAULT_ALERTS_INDEX_PATTERN}/_search`, + body: { + query: { + bool: { + should: [ + { + term: { + 'kibana.alert.rule.rule_id': ruleId, + }, + }, + { + term: { + 'kibana.alert.rule.uuid': ruleId, + }, + }, + ], + }, + }, + fields, + sort: { + '@timestamp': 'desc', + }, + size, + _source: false, + }, + }); +} diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/common.ts b/x-pack/test/security_solution_cypress/cypress/tasks/common.ts index a3bcf265455f5..7e45afcc42c49 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/common.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/common.ts @@ -10,6 +10,7 @@ import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; import { KIBANA_LOADING_ICON } from '../screens/security_header'; import { EUI_BASIC_TABLE_LOADING } from '../screens/common/controls'; import { deleteAllDocuments } from './api_calls/elasticsearch'; +import { DEFAULT_ALERTS_INDEX_PATTERN } from './api_calls/alerts'; const primaryButton = 0; @@ -135,7 +136,7 @@ export const deleteAlertsAndRules = () => { }, }); - deleteAllDocuments('.lists-*,.items-*,.alerts-security.alerts-*'); + deleteAllDocuments(`.lists-*,.items-*,${DEFAULT_ALERTS_INDEX_PATTERN}`); }; export const deleteTimelines = () => { diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/integrations.ts b/x-pack/test/security_solution_cypress/cypress/tasks/integrations.ts index c7da263d42f42..eeef97682b9c7 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/integrations.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/integrations.ts @@ -56,7 +56,11 @@ export function installIntegrations({ packages, force: true, }, - headers: { 'kbn-xsrf': 'cypress-creds', 'x-elastic-internal-origin': 'security-solution' }, + headers: { + 'kbn-xsrf': 'cypress-creds', + 'x-elastic-internal-origin': 'security-solution', + 'elastic-api-version': '2023-10-31', + }, }); // Install agent and package policies @@ -64,7 +68,11 @@ export function installIntegrations({ method: 'POST', url: `${AGENT_POLICY_API_ROUTES.CREATE_PATTERN}?sys_monitoring=true`, body: agentPolicy, - headers: { 'kbn-xsrf': 'cypress-creds', 'x-elastic-internal-origin': 'security-solution' }, + headers: { + 'kbn-xsrf': 'cypress-creds', + 'x-elastic-internal-origin': 'security-solution', + 'elastic-api-version': '2023-10-31', + }, }).then((response) => { const packagePolicyWithAgentPolicyId: PackagePolicy = { ...packagePolicy, @@ -75,7 +83,11 @@ export function installIntegrations({ method: 'POST', url: PACKAGE_POLICY_API_ROUTES.CREATE_PATTERN, body: packagePolicyWithAgentPolicyId, - headers: { 'kbn-xsrf': 'cypress-creds', 'x-elastic-internal-origin': 'security-solution' }, + headers: { + 'kbn-xsrf': 'cypress-creds', + 'x-elastic-internal-origin': 'security-solution', + 'elastic-api-version': '2023-10-31', + }, }); }); } diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index bfa2bfdb2a275..93d4866ef0933 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -142,5 +142,6 @@ "@kbn/stack-alerts-plugin", "@kbn/apm-data-access-plugin", "@kbn/profiling-utils", + "@kbn/profiling-data-access-plugin", ] } diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts index f75faa2b2f686..0389d0eace4e7 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts @@ -12,7 +12,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -57,7 +57,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await dataViewApi.delete({ id: DATA_VIEW_ID, @@ -75,7 +75,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await alertingApi.createRule({ tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -142,7 +142,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts index fbcb7a1404293..0bd7fdf7bbb6f 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts @@ -11,7 +11,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -52,7 +52,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await dataViewApi.delete({ id: DATA_VIEW_ID, @@ -68,7 +68,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await alertingApi.createRule({ tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -135,7 +135,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index 32c8111f33083..5ee54e1c9ad17 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts @@ -18,7 +18,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -62,7 +62,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await dataViewApi.delete({ id: DATA_VIEW_ID, @@ -80,7 +80,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await alertingApi.createRule({ tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -149,7 +149,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts index 1fa95b8cab8a9..56412a8380d2c 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts @@ -12,7 +12,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -56,7 +56,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await dataViewApi.delete({ id: DATA_VIEW_ID, @@ -74,7 +74,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await alertingApi.createRule({ tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -139,7 +139,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts index 8bd8312a5184a..f1b3c949421d4 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts @@ -20,7 +20,7 @@ import { } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/custom_threshold/custom_threshold_executor'; import expect from '@kbn/expect'; -import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/observability-plugin/common/constants'; +import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -66,7 +66,7 @@ export default function ({ getService }: FtrProviderContext) { }); await esClient.deleteByQuery({ index: '.kibana-event-log-*', - query: { term: { 'kibana.alert.rule.consumer': 'alerts' } }, + query: { term: { 'kibana.alert.rule.consumer': 'logs' } }, }); await dataViewApi.delete({ id: DATA_VIEW_ID, @@ -84,7 +84,7 @@ export default function ({ getService }: FtrProviderContext) { const createdRule = await alertingApi.createRule({ tags: ['observability'], - consumer: 'alerts', + consumer: 'logs', name: 'Threshold rule', ruleTypeId: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, params: { @@ -158,7 +158,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.rule.category', 'Custom threshold (BETA)' ); - expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'alerts'); + expect(resp.hits.hits[0]._source).property('kibana.alert.rule.consumer', 'logs'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.name', 'Threshold rule'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.producer', 'observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); diff --git a/x-pack/test_serverless/functional/test_suites/common/security/navigation/avatar_menu.ts b/x-pack/test_serverless/functional/test_suites/common/security/navigation/avatar_menu.ts index 0a58a580b81dd..ca693e2b966c8 100644 --- a/x-pack/test_serverless/functional/test_suites/common/security/navigation/avatar_menu.ts +++ b/x-pack/test_serverless/functional/test_suites/common/security/navigation/avatar_menu.ts @@ -11,8 +11,15 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { const svlCommonPage = getPageObject('svlCommonPage'); const svlCommonNavigation = getService('svlCommonNavigation'); - // FLAKY: https://github.com/elastic/kibana/issues/165694 - describe.skip('Avatar menu', function () { + describe('Avatar menu', function () { + before(async () => { + await svlCommonPage.login(); + }); + + after(async () => { + await svlCommonPage.forceLogout(); + }); + it('is displayed', async () => { await svlCommonNavigation.navigateToKibanaHome(); await svlCommonPage.assertUserAvatarExists(); diff --git a/x-pack/test_serverless/tsconfig.json b/x-pack/test_serverless/tsconfig.json index 7a075a2903860..bf23a18899402 100644 --- a/x-pack/test_serverless/tsconfig.json +++ b/x-pack/test_serverless/tsconfig.json @@ -50,6 +50,7 @@ "@kbn/data-plugin", "@kbn/dev-utils", "@kbn/bfetch-plugin", + "@kbn/rule-data-utils", "@kbn/rison", "@kbn/std", "@kbn/serverless-common-settings",