diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 750cceaff42ce..84ac38586b3f4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -722,6 +722,7 @@ test/server_integration/plugins/status_plugin_b @elastic/kibana-core packages/kbn-std @elastic/kibana-core packages/kbn-stdio-dev-helpers @elastic/kibana-operations packages/kbn-storybook @elastic/kibana-operations +packages/kbn-subscription-tracking @elastic/security-threat-hunting-investigations x-pack/plugins/synthetics @elastic/uptime x-pack/test/alerting_api_integration/common/plugins/task_manager_fixture @elastic/response-ops x-pack/test/plugin_api_perf/plugins/task_manager_performance @elastic/response-ops diff --git a/.github/workflows/create-deploy-tag.yml b/.github/workflows/create-deploy-tag.yml index d8bed27102657..b8f98704ceb7b 100644 --- a/.github/workflows/create-deploy-tag.yml +++ b/.github/workflows/create-deploy-tag.yml @@ -87,50 +87,7 @@ jobs: "type": "section", "text": { "type": "mrkdwn", - "text": "Expected Staging promotion date:" - }, - "accessory": { - "type": "datepicker", - "placeholder": { - "type": "plain_text", - "text": "Select a date", - "emoji": true - }, - "action_id": "datepicker-action" - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "*Useful links:*\n\n • \n • \n • \n • \n • " - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "*Day 1 to-do list*" - }, - "accessory": { - "type": "checkboxes", - "options": [ - { - "text": { - "type": "mrkdwn", - "text": "Verify successful promotion to QA" - }, - "value": "value-0" - }, - { - "text": { - "type": "mrkdwn", - "text": "Notify Security Solution team to beging manual testing" - }, - "value": "value-1" - } - ], - "action_id": "checkboxes-action" + "text": "${{ join(fromJSON(env.JSON_USEFUL_LINKS_ARRAY), '\n • ') }}" } } ] @@ -138,6 +95,16 @@ jobs: env: SLACK_WEBHOOK_URL: ${{ secrets.DEPLOY_TAGGER_SLACK_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + JSON_USEFUL_LINKS_ARRAY: | + [ + "*Useful links:*\\n", + "", + "", + "", + "", + "", + "" + ] - name: Post Slack failure message if: failure() uses: slackapi/slack-github-action@v1.24.0 @@ -169,7 +136,7 @@ jobs: "type": "section", "text": { "type": "mrkdwn", - "text": "*Useful links:*\n\n • \n • " + "text": "${{ join(fromJSON(env.JSON_USEFUL_LINKS_ARRAY), '\n • ') }}" } } ] @@ -177,3 +144,9 @@ jobs: env: SLACK_WEBHOOK_URL: ${{ secrets.DEPLOY_TAGGER_SLACK_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + JSON_USEFUL_LINKS_ARRAY: | + [ + "*Useful links:*\\n", + "", + "" + ] diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index ec10aa0381ec3..e94893589fba8 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-18 +date: 2023-09-19 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 d08d30c9fc885..1817fa8394d74 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-18 +date: 2023-09-19 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 22129ac36386a..5643b52d83b5e 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-18 +date: 2023-09-19 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 9be8b8f4a38c8..00ded98b3bd48 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3314,7 +3314,7 @@ }, { "plugin": "observability", - "path": "x-pack/plugins/observability/server/lib/rules/threshold/threshold_executor.ts" + "path": "x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts" }, { "plugin": "infra", @@ -5151,60 +5151,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "alerting", - "id": "def-common.formatDefaultAggregationResult", - "type": "Function", - "tags": [], - "label": "formatDefaultAggregationResult", - "description": [], - "signature": [ - "(aggregations: ", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.DefaultRuleAggregationResult", - "text": "DefaultRuleAggregationResult" - }, - ") => ", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RuleAggregationFormattedResult", - "text": "RuleAggregationFormattedResult" - } - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-common.formatDefaultAggregationResult.$1", - "type": "Object", - "tags": [], - "label": "aggregations", - "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.DefaultRuleAggregationResult", - "text": "DefaultRuleAggregationResult" - } - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "alerting", "id": "def-common.formatDuration", @@ -5407,41 +5353,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "alerting", - "id": "def-common.getDefaultRuleAggregation", - "type": "Function", - "tags": [], - "label": "getDefaultRuleAggregation", - "description": [], - "signature": [ - "(params?: GetDefaultRuleAggregationParams | undefined) => Record" - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-common.getDefaultRuleAggregation.$1", - "type": "Object", - "tags": [], - "label": "params", - "description": [], - "signature": [ - "GetDefaultRuleAggregationParams | undefined" - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "alerting", "id": "def-common.getDurationNumberInItsUnit", @@ -5882,126 +5793,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "alerting", - "id": "def-common.AggregateOptions", - "type": "Interface", - "tags": [], - "label": "AggregateOptions", - "description": [], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-common.AggregateOptions.search", - "type": "string", - "tags": [], - "label": "search", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.AggregateOptions.defaultSearchOperator", - "type": "CompoundType", - "tags": [], - "label": "defaultSearchOperator", - "description": [], - "signature": [ - "\"AND\" | \"OR\" | undefined" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.AggregateOptions.searchFields", - "type": "Array", - "tags": [], - "label": "searchFields", - "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.AggregateOptions.hasReference", - "type": "Object", - "tags": [], - "label": "hasReference", - "description": [], - "signature": [ - "{ type: string; id: string; } | undefined" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.AggregateOptions.filter", - "type": "CompoundType", - "tags": [], - "label": "filter", - "description": [], - "signature": [ - "string | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.KueryNode", - "text": "KueryNode" - }, - " | undefined" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.AggregateOptions.page", - "type": "number", - "tags": [], - "label": "page", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.AggregateOptions.perPage", - "type": "number", - "tags": [], - "label": "perPage", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "alerting", "id": "def-common.AlertingFrameworkHealth", @@ -6709,104 +6500,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "alerting", - "id": "def-common.DefaultRuleAggregationResult", - "type": "Interface", - "tags": [], - "label": "DefaultRuleAggregationResult", - "description": [], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-common.DefaultRuleAggregationResult.status", - "type": "Object", - "tags": [], - "label": "status", - "description": [], - "signature": [ - "{ buckets: { key: string; doc_count: number; }[]; }" - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.DefaultRuleAggregationResult.outcome", - "type": "Object", - "tags": [], - "label": "outcome", - "description": [], - "signature": [ - "{ buckets: { key: string; doc_count: number; }[]; }" - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.DefaultRuleAggregationResult.muted", - "type": "Object", - "tags": [], - "label": "muted", - "description": [], - "signature": [ - "{ buckets: { key: number; key_as_string: string; doc_count: number; }[]; }" - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.DefaultRuleAggregationResult.enabled", - "type": "Object", - "tags": [], - "label": "enabled", - "description": [], - "signature": [ - "{ buckets: { key: number; key_as_string: string; doc_count: number; }[]; }" - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.DefaultRuleAggregationResult.snoozed", - "type": "Object", - "tags": [], - "label": "snoozed", - "description": [], - "signature": [ - "{ count: { doc_count: number; }; }" - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.DefaultRuleAggregationResult.tags", - "type": "Object", - "tags": [], - "label": "tags", - "description": [], - "signature": [ - "{ buckets: { key: string; doc_count: number; }[]; }" - ], - "path": "x-pack/plugins/alerting/common/default_rule_aggregation.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "alerting", "id": "def-common.ExecutionDuration", @@ -8273,104 +7966,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "alerting", - "id": "def-common.RuleAggregationFormattedResult", - "type": "Interface", - "tags": [], - "label": "RuleAggregationFormattedResult", - "description": [], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-common.RuleAggregationFormattedResult.ruleExecutionStatus", - "type": "Object", - "tags": [], - "label": "ruleExecutionStatus", - "description": [], - "signature": [ - "{ [status: string]: number; }" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.RuleAggregationFormattedResult.ruleLastRunOutcome", - "type": "Object", - "tags": [], - "label": "ruleLastRunOutcome", - "description": [], - "signature": [ - "{ [status: string]: number; }" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.RuleAggregationFormattedResult.ruleEnabledStatus", - "type": "Object", - "tags": [], - "label": "ruleEnabledStatus", - "description": [], - "signature": [ - "{ enabled: number; disabled: number; }" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.RuleAggregationFormattedResult.ruleMutedStatus", - "type": "Object", - "tags": [], - "label": "ruleMutedStatus", - "description": [], - "signature": [ - "{ muted: number; unmuted: number; }" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.RuleAggregationFormattedResult.ruleSnoozedStatus", - "type": "Object", - "tags": [], - "label": "ruleSnoozedStatus", - "description": [], - "signature": [ - "{ snoozed: number; }" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.RuleAggregationFormattedResult.ruleTags", - "type": "Array", - "tags": [], - "label": "ruleTags", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/plugins/alerting/common/rule.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "alerting", "id": "def-common.RuleExecutionStatus", @@ -10771,13 +10366,7 @@ "description": [], "signature": [ "Pick<", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.AggregateOptions", - "text": "AggregateOptions" - }, + "AggregateOptions", ", \"search\" | \"filter\"> & { after?: ", "AggregationsCompositeAggregateKey", " | undefined; maxTags?: number | undefined; }" diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 665da1f4db254..60e6145e2a706 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-18 +date: 2023-09-19 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 | |-------------------|-----------|------------------------|-----------------| -| 793 | 1 | 762 | 49 | +| 767 | 1 | 736 | 50 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index b2e749852e2c4..72b15df7be451 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-18 +date: 2023-09-19 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 feab1dca03106..9478889abd9f4 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-18 +date: 2023-09-19 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 09173916ebc7b..d605b2699bc4d 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-18 +date: 2023-09-19 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 4e6124d0da1e3..15388c1772664 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-18 +date: 2023-09-19 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 9bdba93323168..be599770239f9 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-18 +date: 2023-09-19 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 078a3b3cf59ba..6f7721a20d38c 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-18 +date: 2023-09-19 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 488f95f130377..7f0997f7d996b 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-18 +date: 2023-09-19 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 d188312c403ba..a520494a71261 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-18 +date: 2023-09-19 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 7090e8b3a20f6..007270c8d009a 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-18 +date: 2023-09-19 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 72f5f85adf384..4702ed68abb34 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-18 +date: 2023-09-19 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 9cd5eada5f214..abcfeaf0ef2b6 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-18 +date: 2023-09-19 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 7ab8225b5da92..d9778eb246342 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-18 +date: 2023-09-19 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 9b4e09565cc55..52131128e34c6 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-18 +date: 2023-09-19 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 87757ffac273e..d84e46c6a49c4 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-18 +date: 2023-09-19 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 8cdc61a0538aa..88d8c1adef741 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-18 +date: 2023-09-19 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 3038c1157ca8b..788651d16af05 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-18 +date: 2023-09-19 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 ceb657dd5c70c..be8e73b50034d 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-18 +date: 2023-09-19 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 8b253434ce6a7..8c55e83f2290d 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-18 +date: 2023-09-19 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 0e4a43b4a8c92..831beb550a21e 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-18 +date: 2023-09-19 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 ff420d61f1ac3..24870057d7dfa 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-18 +date: 2023-09-19 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 de635c35fcc04..3193ffd4eabce 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-18 +date: 2023-09-19 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 9e9f9e9eff6bb..c7f314f0f8988 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -13287,27 +13287,27 @@ }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx" }, { "plugin": "securitySolution", @@ -13317,6 +13317,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/containers/source/index.tsx" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx" @@ -21028,27 +21032,27 @@ }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx" }, { "plugin": "securitySolution", @@ -21058,6 +21062,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/containers/source/index.tsx" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 973262fd2738f..332d863a7d922 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index dad7f8db144b5..1cee5a9575dfb 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index f3cf4a4662778..20e66366a56cb 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -3183,19 +3183,15 @@ "signature": [ "{ search?: string | undefined; page?: number | undefined; filter?: any; aggs?: Record | undefined; namespaces?: string[] | undefined; perPage?: number | undefined; fields?: string[] | undefined; sortField?: string | undefined; preference?: string | undefined; pit?: ", + "> | undefined; namespaces?: string[] | undefined; perPage?: number | undefined; fields?: string[] | undefined; defaultSearchOperator?: \"AND\" | \"OR\" | undefined; searchFields?: string[] | undefined; hasReference?: ", { "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", - "section": "def-common.SavedObjectsPitParams", - "text": "SavedObjectsPitParams" + "section": "def-common.SavedObjectsFindOptionsReference", + "text": "SavedObjectsFindOptionsReference" }, - " | undefined; defaultSearchOperator?: \"AND\" | \"OR\" | undefined; searchFields?: string[] | undefined; sortOrder?: ", - "SortOrder", - " | undefined; searchAfter?: ", - "SortResults", - " | undefined; rootSearchFields?: string[] | undefined; hasReference?: ", + " | ", { "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", @@ -3203,15 +3199,19 @@ "section": "def-common.SavedObjectsFindOptionsReference", "text": "SavedObjectsFindOptionsReference" }, - " | ", + "[] | undefined; sortField?: string | undefined; preference?: string | undefined; pit?: ", { "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", - "section": "def-common.SavedObjectsFindOptionsReference", - "text": "SavedObjectsFindOptionsReference" + "section": "def-common.SavedObjectsPitParams", + "text": "SavedObjectsPitParams" }, - "[] | undefined; hasReferenceOperator?: \"AND\" | \"OR\" | undefined; hasNoReference?: ", + " | undefined; sortOrder?: ", + "SortOrder", + " | undefined; searchAfter?: ", + "SortResults", + " | undefined; rootSearchFields?: string[] | undefined; hasReferenceOperator?: \"AND\" | \"OR\" | undefined; hasNoReference?: ", { "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index fe8bf64afecb2..18051fadd9b94 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 2ec06d050bf34..af9687a9a0d0a 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-18 +date: 2023-09-19 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 d5b6bb78f1259..9314b784f777a 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-18 +date: 2023-09-19 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 eb1a6e20fc2d8..c28b7eac03077 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index 129b6b38fa957..fff6459df7a6c 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -77,27 +77,27 @@ }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx" }, { "plugin": "securitySolution", @@ -107,6 +107,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/containers/source/index.tsx" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx" @@ -8066,27 +8070,27 @@ }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx" }, { "plugin": "securitySolution", @@ -8096,6 +8100,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/containers/source/index.tsx" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx" @@ -15116,27 +15124,27 @@ }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts" + "path": "x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx" }, { "plugin": "observability", - "path": "x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx" + "path": "x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx" }, { "plugin": "securitySolution", @@ -15146,6 +15154,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/containers/source/index.tsx" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx" diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index fee969c5ae690..ea5329381fff0 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-18 +date: 2023-09-19 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 a5c4d6c451110..d5c7d0159c426 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-18 +date: 2023-09-19 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 74cb127d601f2..89cdecc631251 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 6ab4419267ce6..4cc118b47cfc9 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1232,10 +1232,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts#:~:text=alertFactory), [threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/threshold/threshold_executor.ts#:~:text=alertFactory), [executor.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.test.ts#:~:text=alertFactory) | - | -| | [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [threshold_rule_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx#:~:text=title), [alert_details_app_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title)+ 2 more | - | -| | [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [threshold_rule_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx#:~:text=title), [alert_details_app_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title)+ 2 more | - | -| | [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [threshold_rule_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx#:~:text=title), [alert_details_app_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx#:~:text=title) | - | +| | [executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.ts#:~:text=alertFactory), [custom_threshold_executor.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts#:~:text=alertFactory), [executor.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/executor.test.ts#:~:text=alertFactory) | - | +| | [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [custom_threshold_rule_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx#:~:text=title), [alert_details_app_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title)+ 2 more | - | +| | [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [custom_threshold_rule_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx#:~:text=title), [alert_details_app_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title)+ 2 more | - | +| | [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [use_metrics_explorer_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts#:~:text=title), [custom_threshold_rule_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx#:~:text=title), [alert_details_app_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx#:~:text=title) | - | | | [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/pages/overview/components/header_menu/header_menu_portal.tsx#:~:text=toMountPoint), [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/pages/overview/components/header_menu/header_menu_portal.tsx#:~:text=toMountPoint) | - | | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/application/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/application/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/application/index.tsx#:~:text=RedirectAppLinks) | - | | | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | @@ -1467,12 +1467,12 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion)+ 12 more | - | | | [dependencies_start_mock.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/mock/endpoint/dependencies_start_mock.ts#:~:text=indexPatterns) | - | | | [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=migrationVersion)+ 78 more | - | -| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title), [risk_score_preview_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_preview_section.tsx#:~:text=title)+ 28 more | - | +| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title)+ 30 more | - | | | [wrap_search_source_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.ts#:~:text=create) | - | | | [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch), [wrap_search_source_client.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/wrap_search_source_client.test.ts#:~:text=fetch) | - | | | [api.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts#:~:text=options) | - | -| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title), [risk_score_preview_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_preview_section.tsx#:~:text=title)+ 28 more | - | -| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title), [risk_score_preview_section.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_preview_section.tsx#:~:text=title)+ 9 more | - | +| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title)+ 30 more | - | +| | [get_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_query_filter.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/source/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx#:~:text=title), [use_rule_from_timeline.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx#:~:text=title), [get_es_query_filter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/containers/detection_engine/exceptions/get_es_query_filter.ts#:~:text=title), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/utils.ts#:~:text=title), [middleware.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/filter_group/index.tsx#:~:text=title), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detections/components/detection_page_filters/index.tsx#:~:text=title)+ 10 more | - | | | [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [use_update_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/sourcerer/use_update_data_view.tsx#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts#:~:text=toMountPoint), [ingest_pipelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/ingest_pipelines.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts#:~:text=toMountPoint), [stored_scripts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/stored_scripts.ts#:~:text=toMountPoint), [saved_objects.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/explore/containers/risk_score/onboarding/api/saved_objects.ts#:~:text=toMountPoint)+ 5 more | - | | | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/app/app.tsx#:~:text=KibanaThemeProvider) | - | | | [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [policy_config.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/common/license/policy_config.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [fleet_integration.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/fleet_integration.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [create_default_policy.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode), [license_watch.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/policy/license_watch.test.ts#:~:text=mode)+ 7 more | 8.8.0 | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 16dceface5bbd..dcbccd55f1493 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 976492edbf317..77210b741ef55 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index b79ef12dc8080..7b7b630f79f9c 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index bcf59ecd7d6a5..7399769fc914e 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-18 +date: 2023-09-19 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 35a1968cb6df0..014c28b564d7e 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-18 +date: 2023-09-19 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 b112d4399f1a4..de2eccf467816 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-18 +date: 2023-09-19 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 84c572d1da40a..26727e9175caf 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-18 +date: 2023-09-19 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 af5ac6accfcce..758e85f535595 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-18 +date: 2023-09-19 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 f4694fcb25c9c..3f0ed203478e5 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-18 +date: 2023-09-19 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 b68e141559ffd..53291dbc89588 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-18 +date: 2023-09-19 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 8e9345631fef1..dedae4e510774 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.devdocs.json b/api_docs/event_annotation.devdocs.json index e11e847c4ed5f..5c7ca2fba07bb 100644 --- a/api_docs/event_annotation.devdocs.json +++ b/api_docs/event_annotation.devdocs.json @@ -1120,6 +1120,105 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "eventAnnotation", + "id": "def-common.EventAnnotationGroupCreateOut", + "type": "Type", + "tags": [], + "label": "EventAnnotationGroupCreateOut", + "description": [], + "signature": [ + "{ item: ", + "EventAnnotationGroupSavedObject", + "; }" + ], + "path": "src/plugins/event_annotation/common/content_management/v1/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "eventAnnotation", + "id": "def-common.EventAnnotationGroupDeleteIn", + "type": "Type", + "tags": [], + "label": "EventAnnotationGroupDeleteIn", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.DeleteIn", + "text": "DeleteIn" + }, + "<\"event-annotation-group\", object>" + ], + "path": "src/plugins/event_annotation/common/content_management/v1/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "eventAnnotation", + "id": "def-common.EventAnnotationGroupDeleteOut", + "type": "Type", + "tags": [], + "label": "EventAnnotationGroupDeleteOut", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.DeleteResult", + "text": "DeleteResult" + } + ], + "path": "src/plugins/event_annotation/common/content_management/v1/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "eventAnnotation", + "id": "def-common.EventAnnotationGroupGetIn", + "type": "Type", + "tags": [], + "label": "EventAnnotationGroupGetIn", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.GetIn", + "text": "GetIn" + }, + "<\"event-annotation-group\", object>" + ], + "path": "src/plugins/event_annotation/common/content_management/v1/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "eventAnnotation", + "id": "def-common.EventAnnotationGroupGetOut", + "type": "Type", + "tags": [], + "label": "EventAnnotationGroupGetOut", + "description": [], + "signature": [ + "{ item: ", + "EventAnnotationGroupSavedObject", + "; meta: { outcome: \"conflict\" | \"exactMatch\" | \"aliasMatch\"; aliasTargetId?: string | undefined; aliasPurpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; }; }" + ], + "path": "src/plugins/event_annotation/common/content_management/v1/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "eventAnnotation", "id": "def-common.EventAnnotationGroupSearchIn", @@ -1144,6 +1243,23 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "eventAnnotation", + "id": "def-common.EventAnnotationGroupSearchOut", + "type": "Type", + "tags": [], + "label": "EventAnnotationGroupSearchOut", + "description": [], + "signature": [ + "{ hits: ", + "EventAnnotationGroupSavedObject", + "[]; pagination: { total: number; cursor?: string | undefined; }; }" + ], + "path": "src/plugins/event_annotation/common/content_management/v1/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "eventAnnotation", "id": "def-common.EventAnnotationGroupUpdateIn", diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index dedb47d332ea0..2407204f61a77 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.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 | |-------------------|-----------|------------------------|-----------------| -| 195 | 0 | 195 | 5 | +| 201 | 0 | 201 | 6 | ## Client diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index fb698e796989d..a88d80e63c72e 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-18 +date: 2023-09-19 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 59d62906310d1..9ba48933c4859 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-18 +date: 2023-09-19 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 e8d9ebde4c48f..a399ba71db8a7 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-18 +date: 2023-09-19 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 b361ce4e564d6..a9748dd70b7c5 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-18 +date: 2023-09-19 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 c64fc4239c208..a0a1c5bd22f83 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-18 +date: 2023-09-19 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 c4900a48fecb5..2e6ffe413b7bd 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-18 +date: 2023-09-19 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 6159ddc9b73b2..808cb9b371a2d 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-18 +date: 2023-09-19 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 33ea6a3a360d3..85fd885aaa0de 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-18 +date: 2023-09-19 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 26732fe7b12fb..931f6d75e3066 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-18 +date: 2023-09-19 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 9b9ce414a9575..baff8c0b5ff36 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-18 +date: 2023-09-19 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 ddcda1fd4cf74..797cfb2addc56 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-18 +date: 2023-09-19 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 57495fa4fe25e..81f6fd1a00272 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-18 +date: 2023-09-19 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 347a0c8b5b2ca..e5e9eb597a0f4 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-18 +date: 2023-09-19 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 e16ba3c35ef63..9080393e16ea1 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-18 +date: 2023-09-19 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 72cb6439e6bee..1c550de449274 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-18 +date: 2023-09-19 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 5559664660786..e9dc901384300 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-18 +date: 2023-09-19 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 d58cd3ebc7e1d..358bd54b4e22d 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-18 +date: 2023-09-19 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 70b550e4a8b4b..f059d0d893222 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-18 +date: 2023-09-19 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 6e8aaec01e2ae..cd132e99309d5 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-18 +date: 2023-09-19 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 747f1e89eb6b6..51fdf9b22b488 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-18 +date: 2023-09-19 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 a62527194108d..11d578c25074b 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 45e011f7068ff..3dfa9e98c38b9 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index d90a640e051d4..3a14d1fa4291b 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-18 +date: 2023-09-19 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 2fd5915e5325d..0282fa5249a4d 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-18 +date: 2023-09-19 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 883c85a14ba5a..7005ba01a5add 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-18 +date: 2023-09-19 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 677d05ae1be0c..d299d5f4720ae 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-18 +date: 2023-09-19 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 3014a97dca8c0..eb20f8bd0b1d5 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.devdocs.json b/api_docs/index_management.devdocs.json index a5b4b8abf9b56..3b24e5a85204f 100644 --- a/api_docs/index_management.devdocs.json +++ b/api_docs/index_management.devdocs.json @@ -1410,12 +1410,13 @@ { "parentPluginId": "indexManagement", "id": "def-common.DataStream.storageSize", - "type": "string", + "type": "CompoundType", "tags": [], "label": "storageSize", "description": [], "signature": [ - "string | undefined" + "ByteSize", + " | undefined" ], "path": "x-pack/plugins/index_management/common/types/data_streams.ts", "deprecated": false, @@ -1457,7 +1458,8 @@ "label": "_meta", "description": [], "signature": [ - "MetaFromEs | undefined" + "Metadata", + " | undefined" ], "path": "x-pack/plugins/index_management/common/types/data_streams.ts", "deprecated": false, @@ -1487,16 +1489,31 @@ "path": "x-pack/plugins/index_management/common/types/data_streams.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.DataStream.lifecycle", + "type": "Object", + "tags": [], + "label": "lifecycle", + "description": [], + "signature": [ + "IndicesDataLifecycleWithRollover", + " | undefined" + ], + "path": "x-pack/plugins/index_management/common/types/data_streams.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false }, { "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs", + "id": "def-common.DataStreamIndex", "type": "Interface", "tags": [], - "label": "DataStreamFromEs", + "label": "DataStreamIndex", "description": [], "path": "x-pack/plugins/index_management/common/types/data_streams.ts", "deprecated": false, @@ -1504,7 +1521,7 @@ "children": [ { "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.name", + "id": "def-common.DataStreamIndex.name", "type": "string", "tags": [], "label": "name", @@ -1515,106 +1532,50 @@ }, { "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.timestamp_field", - "type": "Object", - "tags": [], - "label": "timestamp_field", - "description": [], - "signature": [ - "TimestampFieldFromEs" - ], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.indices", - "type": "Array", - "tags": [], - "label": "indices", - "description": [], - "signature": [ - "DataStreamIndexFromEs", - "[]" - ], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.generation", - "type": "number", - "tags": [], - "label": "generation", - "description": [], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs._meta", - "type": "Object", - "tags": [], - "label": "_meta", - "description": [], - "signature": [ - "MetaFromEs | undefined" - ], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.status", - "type": "CompoundType", - "tags": [], - "label": "status", - "description": [], - "signature": [ - "\"GREEN\" | \"YELLOW\" | \"RED\"" - ], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.template", + "id": "def-common.DataStreamIndex.uuid", "type": "string", "tags": [], - "label": "template", + "label": "uuid", "description": [], "path": "x-pack/plugins/index_management/common/types/data_streams.ts", "deprecated": false, "trackAdoption": false - }, + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "indexManagement", + "id": "def-common.EnhancedDataStreamFromEs", + "type": "Interface", + "tags": [], + "label": "EnhancedDataStreamFromEs", + "description": [], + "signature": [ { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.ilm_policy", - "type": "string", - "tags": [], - "label": "ilm_policy", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false + "pluginId": "indexManagement", + "scope": "common", + "docId": "kibIndexManagementPluginApi", + "section": "def-common.EnhancedDataStreamFromEs", + "text": "EnhancedDataStreamFromEs" }, + " extends ", + "IndicesDataStream" + ], + "path": "x-pack/plugins/index_management/common/types/data_streams.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.store_size", - "type": "string", + "id": "def-common.EnhancedDataStreamFromEs.store_size", + "type": "CompoundType", "tags": [], "label": "store_size", "description": [], "signature": [ - "string | undefined" + "ByteSize", + " | undefined" ], "path": "x-pack/plugins/index_management/common/types/data_streams.ts", "deprecated": false, @@ -1622,7 +1583,7 @@ }, { "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.store_size_bytes", + "id": "def-common.EnhancedDataStreamFromEs.store_size_bytes", "type": "number", "tags": [], "label": "store_size_bytes", @@ -1636,7 +1597,7 @@ }, { "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.maximum_timestamp", + "id": "def-common.EnhancedDataStreamFromEs.maximum_timestamp", "type": "number", "tags": [], "label": "maximum_timestamp", @@ -1650,64 +1611,17 @@ }, { "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.privileges", + "id": "def-common.EnhancedDataStreamFromEs.privileges", "type": "Object", "tags": [], "label": "privileges", "description": [], "signature": [ - "PrivilegesFromEs" + "{ delete_index: boolean; }" ], "path": "x-pack/plugins/index_management/common/types/data_streams.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamFromEs.hidden", - "type": "boolean", - "tags": [], - "label": "hidden", - "description": [], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamIndex", - "type": "Interface", - "tags": [], - "label": "DataStreamIndex", - "description": [], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamIndex.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "indexManagement", - "id": "def-common.DataStreamIndex.uuid", - "type": "string", - "tags": [], - "label": "uuid", - "description": [], - "path": "x-pack/plugins/index_management/common/types/data_streams.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 210c8db0b2901..9e94def6d0002 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/platform-deployment-management](https://github.com/orgs/elasti | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 194 | 0 | 189 | 4 | +| 186 | 0 | 181 | 3 | ## Client diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index e7fcfd4448bda..ba4cdde25d33f 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-18 +date: 2023-09-19 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 c327ce577ffab..455d116a454f0 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-18 +date: 2023-09-19 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 7e77600558565..a0275128349fe 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-18 +date: 2023-09-19 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 08ecddbf0e546..e928af2b0acd2 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-18 +date: 2023-09-19 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 52e226fe31f38..edafae4289b72 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-18 +date: 2023-09-19 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 d413952770e9c..5f7b4672aba30 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-18 +date: 2023-09-19 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 74a7c194b58e2..37f9df0c150b6 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-18 +date: 2023-09-19 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 1155edfa57925..d1196dc1fa364 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-18 +date: 2023-09-19 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 56b6a659a1cfa..3dbff1eecc348 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-18 +date: 2023-09-19 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 dcc3e6917906c..85f92a5beb5db 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-18 +date: 2023-09-19 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 5e7d5cda6a907..0b350353f11ad 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 54f5709af6432..adbb90ee01e6e 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -694,6 +694,14 @@ "plugin": "security", "path": "x-pack/plugins/security/server/analytics/analytics_service.ts" }, + { + "plugin": "@kbn/subscription-tracking", + "path": "packages/kbn-subscription-tracking/src/use_go_to_subscription.ts" + }, + { + "plugin": "@kbn/subscription-tracking", + "path": "packages/kbn-subscription-tracking/src/use_impression.ts" + }, { "plugin": "dashboard", "path": "src/plugins/dashboard/public/services/analytics/types.ts" @@ -710,6 +718,10 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts" }, + { + "plugin": "fleet", + "path": "x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts" + }, { "plugin": "osquery", "path": "x-pack/plugins/osquery/server/lib/telemetry/sender.ts" diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 1431b10b96c02..929c3a45317ff 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-18 +date: 2023-09-19 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 98abb678e022e..02de5c67063cc 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-18 +date: 2023-09-19 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 75fdab72a1664..1e4231079ebfa 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-18 +date: 2023-09-19 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 db0ce46c2cca1..7f246664319ff 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-18 +date: 2023-09-19 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 fe5d6301ae0a9..ebcd462bad230 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-18 +date: 2023-09-19 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 1e5c56e8540ed..5886b383c9553 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-18 +date: 2023-09-19 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 b5a17f95e4914..7a998ab96f2ab 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-18 +date: 2023-09-19 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 269e6c2fe51e0..9333fe73299a6 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-18 +date: 2023-09-19 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 c3b4b0ccf6851..56bdcad91968d 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-18 +date: 2023-09-19 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 7ffe42df8b83c..50f0e1f48dd66 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-18 +date: 2023-09-19 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 ea5a3a98abe3a..da512ec031b60 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-18 +date: 2023-09-19 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 fbe7866473bcb..746df336b12d2 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-18 +date: 2023-09-19 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 25522ed3865a2..d5249795aed1f 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-18 +date: 2023-09-19 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 878f101e79d36..febc21bee6ffb 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-18 +date: 2023-09-19 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 1658fd746d357..86322a1d6238a 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-18 +date: 2023-09-19 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 57da814dd2406..755ad40d0ea40 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-18 +date: 2023-09-19 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 1876e4a29dd0c..ab08330793019 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-18 +date: 2023-09-19 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 9f601981e3dad..e78d1a2341832 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-18 +date: 2023-09-19 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 aa9afe0e6bdf5..74a5c8b817471 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-18 +date: 2023-09-19 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 109fe7aff525b..e9d4d388d6eb7 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-18 +date: 2023-09-19 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 6d063326b3b3a..21341deaa7cae 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-18 +date: 2023-09-19 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 fca9a8c5c322f..6c6f70f8e9671 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-18 +date: 2023-09-19 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 4d3fb887f21b8..7dbd6ffe80637 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-18 +date: 2023-09-19 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 c92f82b27df0a..e82d78e4a1859 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-18 +date: 2023-09-19 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 46a571dffd4fd..ce53f668745d2 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-18 +date: 2023-09-19 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 2c20cab969269..c0fefe6fd9e83 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 883d8a78c250a..480e4d5f0a651 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index 5b542d0d61354..f8e23e97c8c40 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 5df2b5a15f823..9310a5b23a2e4 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 6050db97f3548..1861115fcf47c 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 2e69f191ad449..51ea6801ef508 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-18 +date: 2023-09-19 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 9ee1d9e495b79..21101c5a0bf3d 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-18 +date: 2023-09-19 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 93ebce24da602..1a0618d3f6892 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-18 +date: 2023-09-19 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 6d269f9294534..f59997144780a 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-18 +date: 2023-09-19 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 f4ca8e4ae41f7..053f10a70a196 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-18 +date: 2023-09-19 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 787c930535c49..9b38203b673a6 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-18 +date: 2023-09-19 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 ad2393d79632d..07c0eb18c5393 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-18 +date: 2023-09-19 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 b7aab6b4c493b..560c1dcbd47ea 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-18 +date: 2023-09-19 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 dac9fa29a97d4..ce985201500d9 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-18 +date: 2023-09-19 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 f665e9d9ecf20..ee325463ba6bb 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-18 +date: 2023-09-19 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 02cf4fd9f4802..7595feea40609 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-18 +date: 2023-09-19 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 fb1d9f90941ee..0f6fe1cbbc643 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-18 +date: 2023-09-19 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 3056c91730b4c..610d1c98be9fa 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-18 +date: 2023-09-19 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 0e94e11483833..5b5d2390e06da 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-18 +date: 2023-09-19 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 bb292f3a80240..961ea0d98a6e1 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-18 +date: 2023-09-19 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 431280d8f8b7a..6fa496a0e4a3a 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-18 +date: 2023-09-19 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 6d49d7b89f56e..524974d57d272 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-18 +date: 2023-09-19 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 4ee2badf63701..769ac4a8fa7e2 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-18 +date: 2023-09-19 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 462cdb9ec9936..db41b1972e83b 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-18 +date: 2023-09-19 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 ff970404a1927..a7281538cb169 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-18 +date: 2023-09-19 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 3ef941bbc2da4..a56954b9f87ad 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-18 +date: 2023-09-19 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 b1455cebda134..ab11d8099f64b 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-18 +date: 2023-09-19 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 6cd2f87cf2dc0..b0c598e8e7fc2 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-18 +date: 2023-09-19 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 8bab8235009e8..0b854379873f8 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-18 +date: 2023-09-19 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 12d2604c35bc0..bc66a658a09d7 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-18 +date: 2023-09-19 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 51c469f2d721a..98f0453bba863 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-18 +date: 2023-09-19 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 7bdbcde0b681c..5ae78ac6ae630 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-18 +date: 2023-09-19 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 6657a1b5a5463..6f527601d25d5 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-18 +date: 2023-09-19 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 1ccdf52e0fe0c..965803224a208 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-18 +date: 2023-09-19 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 792727a53527e..bc610c19de8e5 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-18 +date: 2023-09-19 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 288845aab22dd..9ddc85365cf36 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-18 +date: 2023-09-19 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 1b01571ae584a..96c64c80dc32d 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-18 +date: 2023-09-19 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 a04805f49b4a2..63605616a152a 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-18 +date: 2023-09-19 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 3a1d96a5885a5..9efc60f0471ef 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-18 +date: 2023-09-19 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 dfa0926e1b443..31e1f0f0577f2 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-18 +date: 2023-09-19 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 bc5bb99a112c4..6ff6ad2fe8914 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-18 +date: 2023-09-19 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 0f359f6490541..995063b09c18b 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-18 +date: 2023-09-19 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 644431b6e0b48..bce3b6202bbfb 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-18 +date: 2023-09-19 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 0b15fef58826c..6f3d2d9e58536 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-18 +date: 2023-09-19 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 de6e8725476a2..546f57bf82513 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-18 +date: 2023-09-19 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 3846540cb7906..577a756550aa2 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-18 +date: 2023-09-19 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 53e296cccb735..33cb79877ea30 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-18 +date: 2023-09-19 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 d79a6e6ee117d..614692e4ad2df 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-18 +date: 2023-09-19 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 1e70b4deff0ff..fb3b031f4a90a 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-18 +date: 2023-09-19 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 c2d71495027f5..69ef4a6620109 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-18 +date: 2023-09-19 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 fbc988f9558e7..c6656383616ae 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-18 +date: 2023-09-19 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 ade0799dcf68d..986e6acdeec9e 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-18 +date: 2023-09-19 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 9cb38caf49621..84f0843a19e8a 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-18 +date: 2023-09-19 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 4043cf0a22cc3..211df87cc4f7a 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-18 +date: 2023-09-19 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 f8ce8edd5401e..390af95765099 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-18 +date: 2023-09-19 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 6b2ac0d00c16e..3a5af90ebf2fd 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-18 +date: 2023-09-19 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 f22969795aff9..14fb0cd51dc1a 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-18 +date: 2023-09-19 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 18d451571c778..9a604b86f3a8d 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-18 +date: 2023-09-19 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 60f68cf242fb2..e14d1636cd8ae 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-18 +date: 2023-09-19 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 7f3f4539da535..eabf55d85162a 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-18 +date: 2023-09-19 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 09f3d6fcb46df..865b17a16a313 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-18 +date: 2023-09-19 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 d018a5094916a..ebff4d323574c 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-18 +date: 2023-09-19 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 179b02de80b0d..e415fe78a692b 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-18 +date: 2023-09-19 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 a93cbfa77ccd2..a92bde1080f3b 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-18 +date: 2023-09-19 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 d0da7439de20c..06819cd43ad01 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-18 +date: 2023-09-19 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 66fff8819a731..1f5290d1ee5f8 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-18 +date: 2023-09-19 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 59e3c8228a8f7..43de58efa351f 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-18 +date: 2023-09-19 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 c30a85d63af01..922964eb080e4 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-18 +date: 2023-09-19 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 1fd82b970a60a..06576835e342a 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-18 +date: 2023-09-19 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 d0b005dd9764e..b215d3ca721f2 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-18 +date: 2023-09-19 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 1293623fbe915..fe4bec67a807b 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-18 +date: 2023-09-19 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 c74dbcd1e7a72..39eeaa408d5f7 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-18 +date: 2023-09-19 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 6849af81def92..e2d71d4040118 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-18 +date: 2023-09-19 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 696f0c9915184..4b5dca9f38e6c 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-18 +date: 2023-09-19 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 a21966bd7c9be..6d94d7d191cb8 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -3503,10 +3503,6 @@ "plugin": "share", "path": "src/plugins/share/server/url_service/http/short_urls/register_resolve_route.ts" }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/legacy/aggregate.ts" - }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/find.ts" @@ -3535,10 +3531,6 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/get_rule.ts" }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/aggregate_rules.ts" - }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/find_rules.ts" @@ -4755,22 +4747,6 @@ "plugin": "actions", "path": "x-pack/plugins/actions/server/routes/get.test.ts" }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/aggregate_rules.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/aggregate_rules.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/aggregate_rules.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/aggregate_rules.test.ts" - }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/find_rules.test.ts" @@ -5091,26 +5067,6 @@ "plugin": "actions", "path": "x-pack/plugins/actions/server/routes/legacy/list_action_types.test.ts" }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/legacy/aggregate.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/legacy/aggregate.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/legacy/aggregate.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/legacy/aggregate.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/legacy/aggregate.test.ts" - }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/find.test.ts" @@ -6063,7 +6019,7 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/aggregate_rules.ts" + "path": "x-pack/plugins/alerting/server/routes/rule/apis/aggregate/aggregate_rules_route.ts" }, { "plugin": "alerting", @@ -7557,6 +7513,22 @@ "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/rule/apis/aggregate/aggregate_rules_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/aggregate/aggregate_rules_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/aggregate/aggregate_rules_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/aggregate/aggregate_rules_route.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/rule/apis/bulk_edit/bulk_edit_rules_route.test.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 298398a7f5a54..8ec96c382187a 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-18 +date: 2023-09-19 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 17d5d133c2463..19dc1690e9d0c 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-18 +date: 2023-09-19 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 51baa670cab43..9dc0714831e13 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-18 +date: 2023-09-19 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 261e646001d24..5c825b987c1a3 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-18 +date: 2023-09-19 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 b7ee03010b886..612b8b78d1c84 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-18 +date: 2023-09-19 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 e7f9952279cf4..2c7f357db8446 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-18 +date: 2023-09-19 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 e8228cb7d60e4..91de016d71e55 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-18 +date: 2023-09-19 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 7191da5e32a3f..40ab1236d563b 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-18 +date: 2023-09-19 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 c467d2d9db7b5..f7b584dd578ec 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-18 +date: 2023-09-19 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 0b57a707a4340..2d24c69fb5964 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-18 +date: 2023-09-19 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 5204c013e6522..48e3b37019fef 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-18 +date: 2023-09-19 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 b622e4db7e5ca..8d0497d8798a2 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-18 +date: 2023-09-19 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 a0a5de8e7c817..1d4319832a67b 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-18 +date: 2023-09-19 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 a2dbc53cfbbf5..72676c55f9de0 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-18 +date: 2023-09-19 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 914263632c7dc..7fb8322f1c113 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-18 +date: 2023-09-19 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 efb31ba738c76..861f6a7105d0f 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-18 +date: 2023-09-19 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 4c69941b73b1c..8a9e55b4c239b 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-18 +date: 2023-09-19 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 db2a6494b510b..c016211a86311 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-18 +date: 2023-09-19 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 ee9a5d7bec2af..9ba46a04012d1 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-18 +date: 2023-09-19 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 d0925febd283e..ecb4cb8d4f351 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-18 +date: 2023-09-19 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 83081f4298ff7..86e499fcb447d 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-18 +date: 2023-09-19 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 7e051793035e9..5d2cdb4812b6c 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-18 +date: 2023-09-19 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 a4ca66623ec38..ae28af86c35e9 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-18 +date: 2023-09-19 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 8975c66a01909..c5f32fbca8a12 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-18 +date: 2023-09-19 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 c75429f789019..69de437693602 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-18 +date: 2023-09-19 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 56985d429d014..288758d10ad4b 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-18 +date: 2023-09-19 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 53c800bf77235..355d7f1afabf1 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-18 +date: 2023-09-19 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 5b288cdc669fe..8581abd05cb29 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-18 +date: 2023-09-19 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 dac349ca70d9a..c6f4d248a8d1b 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-18 +date: 2023-09-19 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 426e2d9d885e2..da5f9f71ca746 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-18 +date: 2023-09-19 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 f1452901935d6..26c2b1b0f604f 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-18 +date: 2023-09-19 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 7b1a64a5f00bb..97f24aa48d451 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-18 +date: 2023-09-19 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 1ed1d5c2a29f6..0c66228172675 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-18 +date: 2023-09-19 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 f8c3ea677f86c..76112615dd00e 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-18 +date: 2023-09-19 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 30f96c1e4f43f..fb279abbea91b 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-18 +date: 2023-09-19 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 3192af74101fc..f16ff316ec0c5 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-18 +date: 2023-09-19 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 572c6b1634a23..986f31e68a09e 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-18 +date: 2023-09-19 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 a9822c3d4077d..6607d83fb7c7a 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-18 +date: 2023-09-19 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 a7daae67a7a2d..19efec4166740 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-18 +date: 2023-09-19 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 68f95feb68b9f..4e9995d3aad0e 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-18 +date: 2023-09-19 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 dacfbf9915c25..97d8457628de1 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-18 +date: 2023-09-19 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 d286e2d69b056..e911b700e7924 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-18 +date: 2023-09-19 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 5a7b7cb7a1fe1..0e96cb8844586 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-18 +date: 2023-09-19 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 3359aaded3d2d..552626b58b527 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-18 +date: 2023-09-19 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 4863232770f61..ca8a7881d0c9c 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-18 +date: 2023-09-19 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.devdocs.json b/api_docs/kbn_core_saved_objects_api_browser.devdocs.json index 94d374afbba24..a1ce0b5950132 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.devdocs.json +++ b/api_docs/kbn_core_saved_objects_api_browser.devdocs.json @@ -3623,7 +3623,7 @@ "signature": [ "{ type: string | string[]; search?: string | undefined; page?: number | undefined; filter?: any; aggs?: Record | undefined; namespaces?: string[] | undefined; perPage?: number | undefined; fields?: string[] | undefined; sortField?: string | undefined; preference?: string | undefined; defaultSearchOperator?: \"AND\" | \"OR\" | undefined; searchFields?: string[] | undefined; hasReference?: ", + "> | undefined; namespaces?: string[] | undefined; perPage?: number | undefined; fields?: string[] | undefined; defaultSearchOperator?: \"AND\" | \"OR\" | undefined; searchFields?: string[] | undefined; hasReference?: ", { "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", @@ -3639,7 +3639,7 @@ "section": "def-common.SavedObjectsFindOptionsReference", "text": "SavedObjectsFindOptionsReference" }, - "[] | undefined; hasReferenceOperator?: \"AND\" | \"OR\" | undefined; hasNoReference?: ", + "[] | undefined; sortField?: string | undefined; preference?: string | undefined; hasReferenceOperator?: \"AND\" | \"OR\" | undefined; hasNoReference?: ", { "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 5a2d7db857479..f6a23787c577d 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-18 +date: 2023-09-19 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.devdocs.json b/api_docs/kbn_core_saved_objects_api_server.devdocs.json index 89f29c9e91e81..dbbf19f7fb5e7 100644 --- a/api_docs/kbn_core_saved_objects_api_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_api_server.devdocs.json @@ -8233,9 +8233,7 @@ "signature": [ "{ type: string | string[]; search?: string | undefined; filter?: any; aggs?: Record | undefined; namespaces?: string[] | undefined; perPage?: number | undefined; fields?: string[] | undefined; sortField?: string | undefined; preference?: string | undefined; defaultSearchOperator?: \"AND\" | \"OR\" | undefined; searchFields?: string[] | undefined; sortOrder?: ", - "SortOrder", - " | undefined; rootSearchFields?: string[] | undefined; hasReference?: ", + "> | undefined; namespaces?: string[] | undefined; perPage?: number | undefined; fields?: string[] | undefined; defaultSearchOperator?: \"AND\" | \"OR\" | undefined; searchFields?: string[] | undefined; hasReference?: ", { "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", @@ -8251,7 +8249,9 @@ "section": "def-common.SavedObjectsFindOptionsReference", "text": "SavedObjectsFindOptionsReference" }, - "[] | undefined; hasReferenceOperator?: \"AND\" | \"OR\" | undefined; hasNoReference?: ", + "[] | undefined; sortField?: string | undefined; preference?: string | undefined; sortOrder?: ", + "SortOrder", + " | undefined; rootSearchFields?: string[] | undefined; hasReferenceOperator?: \"AND\" | \"OR\" | undefined; hasNoReference?: ", { "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 39530ce692860..9ad814b6efaaf 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-18 +date: 2023-09-19 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 24f0dea6e5c04..aeeced9f30b20 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-18 +date: 2023-09-19 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 7d22f6aa11a17..40b0395e4ac92 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-18 +date: 2023-09-19 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 8c67cb966603a..2be3981038e04 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-18 +date: 2023-09-19 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 e971f33061cd7..637fbfb063554 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-18 +date: 2023-09-19 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 ee3ac1456960e..3e072afaa5ff4 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-18 +date: 2023-09-19 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 72855ce3e1eff..e809a6b97d6e7 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-18 +date: 2023-09-19 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 79c45d96b59a4..39e4d223fd6ff 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-18 +date: 2023-09-19 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 d4a4fe336bd23..0fe0a3502539d 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-18 +date: 2023-09-19 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 a0fda632df250..ff2eda298e786 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-18 +date: 2023-09-19 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 32b422843d7e9..8b4711d113ce3 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-18 +date: 2023-09-19 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 212909e4659f4..7c0ce218afb7c 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-18 +date: 2023-09-19 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 a7150e07904cb..b77c5eb8a5ea3 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-18 +date: 2023-09-19 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 799789f205b97..a102a0f5e92df 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-18 +date: 2023-09-19 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 2b463d9af2251..26f641d4ff62d 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-18 +date: 2023-09-19 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 8eac443364007..a28f10d601d63 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-18 +date: 2023-09-19 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 a8af77f4e07dd..5a970081ce32f 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-18 +date: 2023-09-19 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 97e05f1f56e9d..42755e7ee1173 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-18 +date: 2023-09-19 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 2fab3b6865ee1..f794ca5f38a4d 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-18 +date: 2023-09-19 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 82caac3b7207d..7c204e1909f38 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-18 +date: 2023-09-19 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 0ed44aa66d3a0..33bb70518f366 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-18 +date: 2023-09-19 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 c6d8bc542ae7e..79358ef138073 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-18 +date: 2023-09-19 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 4b781320cf1fe..45853ce6dd189 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-18 +date: 2023-09-19 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 5672f3d52aa9b..7a2fdc5286d0e 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-18 +date: 2023-09-19 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 258647b6c3505..56209c7df01d9 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-18 +date: 2023-09-19 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 b29ba5eb5e17c..36d69d66ff97d 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-18 +date: 2023-09-19 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 3af24d09e0d5f..05d3b2fa30e9e 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-18 +date: 2023-09-19 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 12e8d0b8989a6..376eb06a1cb1f 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-18 +date: 2023-09-19 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 b46b10d809e39..ee31edd23398b 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-18 +date: 2023-09-19 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 cb27068c19def..6c528504f7af7 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-18 +date: 2023-09-19 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 dae886fc71071..63d2fc836bfad 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-18 +date: 2023-09-19 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 c24531d244a0e..a9043500d462e 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-18 +date: 2023-09-19 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 a7656c32d5db0..e590025514de2 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-18 +date: 2023-09-19 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 99c46bf0e0f8e..36812d6a493b9 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-18 +date: 2023-09-19 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 b11a59c15233f..423321b4d9cf7 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-18 +date: 2023-09-19 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 05b7761d655a8..15cafc88bad3d 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-18 +date: 2023-09-19 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 98a3e7c86f0fc..425c2438000c1 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-18 +date: 2023-09-19 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 c43e35cb935bb..f8751bd57a75c 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-18 +date: 2023-09-19 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 736a8ca1281a3..12cc17782ae7a 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-18 +date: 2023-09-19 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 5ec810328d0cb..661bd332ec78a 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-18 +date: 2023-09-19 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 1aaa32301de89..ae6b13fc7e38e 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-18 +date: 2023-09-19 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 88e83bf782815..b094e73bcb24b 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-18 +date: 2023-09-19 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 900b43cb49882..248a226f0bd9c 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-18 +date: 2023-09-19 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 1007fc2590a40..9d8d42d472053 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-18 +date: 2023-09-19 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 ef22f71dada8c..3929f33faf962 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-18 +date: 2023-09-19 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 b8406bfeaf364..1667ae19abdb6 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-18 +date: 2023-09-19 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 17344e3694c95..c5504eb349e64 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-18 +date: 2023-09-19 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 38b0b339633da..f75a6e249d222 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-18 +date: 2023-09-19 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 9b2cd1dd73e46..a2352e5d61cc9 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-18 +date: 2023-09-19 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 e23a5569093cd..2fbebca60bdd2 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-18 +date: 2023-09-19 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 d26d4bdd1015c..18ea5aecf39f2 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-18 +date: 2023-09-19 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 13a36afd533b6..7d8e9c014e707 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-18 +date: 2023-09-19 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 2534468bae29b..483827dca75c4 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-18 +date: 2023-09-19 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 2b06c2bb2042a..18e86d9d23d79 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-18 +date: 2023-09-19 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 d7fc0710f0c04..f3fc09a1faf2f 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-18 +date: 2023-09-19 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 9b0714523566e..be985102ae65d 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-18 +date: 2023-09-19 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 1be19bb4c38ea..de372ebf81d0c 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-18 +date: 2023-09-19 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 47c5d25300748..f7d592bf82590 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-18 +date: 2023-09-19 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 043cd313f02ae..bdeb39dfad822 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-18 +date: 2023-09-19 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 95d2fd6e024b9..6e0826a5972d3 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 753c14572dfc4..89fc182fe26c9 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-18 +date: 2023-09-19 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 ecca452457fea..c8c49be1e70b2 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-18 +date: 2023-09-19 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 edec1337ab437..24f3ce32cc714 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-18 +date: 2023-09-19 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 3be23a991425c..233c01b744263 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-18 +date: 2023-09-19 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 02143a5104363..50dced004c5a9 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-18 +date: 2023-09-19 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 75ecd6c5cf4a9..b1f0a1eab7b47 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-18 +date: 2023-09-19 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 1f2687ca6997e..9ec6f327a04c8 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-18 +date: 2023-09-19 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 63be0ad1b7d9f..ccd7b70fbfd78 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-18 +date: 2023-09-19 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.devdocs.json b/api_docs/kbn_elastic_assistant.devdocs.json index ba770f780e3fd..55e63a060a97f 100644 --- a/api_docs/kbn_elastic_assistant.devdocs.json +++ b/api_docs/kbn_elastic_assistant.devdocs.json @@ -127,7 +127,7 @@ "\nModal container for Elastic AI Assistant conversations, receiving the page contents as context, plus whatever\ncomponent currently has focus and any specific context it may provide through the SAssInterface." ], "signature": [ - "React.NamedExoticComponent" + "React.NamedExoticComponent & { readonly type: () => JSX.Element; }" ], "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.tsx", "deprecated": false, @@ -260,6 +260,24 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant", + "id": "def-public.useAssistantContext", + "type": "Function", + "tags": [], + "label": "useAssistantContext", + "description": [], + "signature": [ + "() => ", + "UseAssistantContext" + ], + "path": "x-pack/packages/kbn-elastic-assistant/impl/assistant_context/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant", "id": "def-public.useAssistantOverlay", diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index ed958ef6c2198..6a10ddd8da277 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 84 | 0 | 64 | 5 | +| 85 | 0 | 65 | 6 | ## Client diff --git a/api_docs/kbn_es.devdocs.json b/api_docs/kbn_es.devdocs.json index a8542adedc15a..4d53e7ff40952 100644 --- a/api_docs/kbn_es.devdocs.json +++ b/api_docs/kbn_es.devdocs.json @@ -542,55 +542,6 @@ "children": [], "returnComment": [] }, - { - "parentPluginId": "@kbn/es", - "id": "def-common.Cluster.waitForClusterReady", - "type": "Function", - "tags": [], - "label": "waitForClusterReady", - "description": [], - "signature": [ - "(client: ", - "default", - ", readyTimeout?: number) => Promise" - ], - "path": "packages/kbn-es/src/cluster.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/es", - "id": "def-common.Cluster.waitForClusterReady.$1", - "type": "Object", - "tags": [], - "label": "client", - "description": [], - "signature": [ - "default" - ], - "path": "packages/kbn-es/src/cluster.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/es", - "id": "def-common.Cluster.waitForClusterReady.$2", - "type": "number", - "tags": [], - "label": "readyTimeout", - "description": [], - "signature": [ - "number" - ], - "path": "packages/kbn-es/src/cluster.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, { "parentPluginId": "@kbn/es", "id": "def-common.Cluster.runServerless", diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 3149649da72e8..f91e6a4442467 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 46 | 0 | 33 | 7 | +| 43 | 0 | 30 | 7 | ## Common diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 4e1af85d1a805..3e919b154baca 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-18 +date: 2023-09-19 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 43ff688e3bc5c..1adf1a2c96683 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-18 +date: 2023-09-19 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 9523f191412e4..ac32cecd084a8 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-18 +date: 2023-09-19 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 9eec8a4311789..19a81540e044b 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-18 +date: 2023-09-19 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 17fbcc350321a..4c339d9ec7f4d 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-18 +date: 2023-09-19 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 a3da0c0af61dc..1366ec91c8d73 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-18 +date: 2023-09-19 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 f9b6795731703..42ca4491446cf 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-18 +date: 2023-09-19 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 661fa78f6edd3..e395bae80a5ab 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-18 +date: 2023-09-19 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 0ba1019cc85a5..f484014e73bad 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-18 +date: 2023-09-19 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 8a350c19db31d..2d8ad34b484d1 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-18 +date: 2023-09-19 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 4d44fd3ed2377..f412737eea549 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-18 +date: 2023-09-19 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 521831ed4f87f..d0ebd4b157581 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-18 +date: 2023-09-19 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 32e35f6c68937..c57e33533d663 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-18 +date: 2023-09-19 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 0f0675b7e72aa..4823f0ed0b713 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-18 +date: 2023-09-19 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 ad504d5ef9879..a189851343082 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-18 +date: 2023-09-19 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 d7ff6d91a93e1..107637aab8eb5 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-18 +date: 2023-09-19 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 1ae352ca4528a..1784fb60046ac 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-18 +date: 2023-09-19 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 2fcd643d290eb..1b4b8ae7740fe 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-18 +date: 2023-09-19 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 9d42b1ed35d60..ed2691e4aa219 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-18 +date: 2023-09-19 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 9a21e2763d6ae..a20b965a5fa4b 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-18 +date: 2023-09-19 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 d46698414584f..8cff797e35710 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-18 +date: 2023-09-19 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 b23047fdb0988..a982c1523cd71 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-18 +date: 2023-09-19 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 84164e1c1021a..842f9b82c70ff 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-18 +date: 2023-09-19 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 03ee64eadafd9..05a2c43d955bf 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-18 +date: 2023-09-19 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 0dfcbf4a6d448..d647235430309 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-18 +date: 2023-09-19 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 dc69d4fe7e3d3..53af3fe2c6686 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-18 +date: 2023-09-19 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 980c4e4602d5f..867d5e04f6976 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-18 +date: 2023-09-19 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 40bea63cfb251..54fed99157f82 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-18 +date: 2023-09-19 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 8922002ca31d2..1d17472e2b2de 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-18 +date: 2023-09-19 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 1fd48308f8597..e3ad35e0c32ec 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-18 +date: 2023-09-19 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 14efba7045ebf..117addf9c4509 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-18 +date: 2023-09-19 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 38ed5fa7534a9..7f4fa2cae2d2e 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-18 +date: 2023-09-19 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 ba74e3f5d29c4..54accdcc8f216 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-18 +date: 2023-09-19 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 44fc76a2206a1..94242e66e07d0 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-18 +date: 2023-09-19 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 4261974ca6180..418a01e0b65f2 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-18 +date: 2023-09-19 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 b70b0c568806e..f9be814f55f4d 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-18 +date: 2023-09-19 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 486f24f9706ee..15511146fd4bc 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-18 +date: 2023-09-19 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 e86271e016cd4..7b6882fd90cc5 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-18 +date: 2023-09-19 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 eac7cac6eda48..dc7efc4ef5195 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-18 +date: 2023-09-19 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 76004044100b4..53e1fbd4325e3 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-18 +date: 2023-09-19 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 ae544efb2c8dc..e17636728bfa9 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-18 +date: 2023-09-19 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 84b6ad70d01a3..5c593b65105ae 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-18 +date: 2023-09-19 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 d99f7f91b01ee..fb745f85cc677 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-18 +date: 2023-09-19 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 eee12d35d8594..53c427431d7d7 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-18 +date: 2023-09-19 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 cbd41ac3a1787..0e5dedf91d13d 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-18 +date: 2023-09-19 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 b6962455b897e..860b4bc0b7e53 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-18 +date: 2023-09-19 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 c7d8b47e11d9c..941ac10d555c3 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-18 +date: 2023-09-19 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 e61753b7c22f4..c0d4448688d9a 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-18 +date: 2023-09-19 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 de021f02fc0f5..0d0549b29d72a 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-18 +date: 2023-09-19 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 dc4bfeedc783e..c2ce535b93dcb 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-18 +date: 2023-09-19 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 c16d1e942bd0a..bdff515c530f6 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-18 +date: 2023-09-19 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 b03e9c9a50664..b172fd364b5b8 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-18 +date: 2023-09-19 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 d81a340525546..bcebb2748f4d2 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-18 +date: 2023-09-19 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 ce66be19e0779..8487ebf915f57 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-18 +date: 2023-09-19 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 ab86773a41e73..b9cdd3d884e0e 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-18 +date: 2023-09-19 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 a1d612ccf01d7..26a6b7a3ab494 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-18 +date: 2023-09-19 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 e4ae50a5cc6af..bb9b3bf26df8b 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-18 +date: 2023-09-19 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 807cab5731d13..778593aa1e103 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-18 +date: 2023-09-19 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 6e4a983975f49..416d3beee6ef1 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-18 +date: 2023-09-19 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 37c7405981d6d..dede765256926 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-18 +date: 2023-09-19 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 add1b5059ef85..198f3174b44ad 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-18 +date: 2023-09-19 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 01878ec950d56..495215972834a 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-18 +date: 2023-09-19 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 a5745e288a26f..99366c59d9583 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-18 +date: 2023-09-19 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 1eab46981de16..2944a73a2979a 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-18 +date: 2023-09-19 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 08d14a07501f7..152367e2df249 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-18 +date: 2023-09-19 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 fbe70cd84d797..23d7cc3c93d54 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-18 +date: 2023-09-19 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 d86ec5423e505..5dd6f56271d67 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-18 +date: 2023-09-19 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 64f146d953e4f..eebe6693444ce 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-18 +date: 2023-09-19 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 1b68b5a668931..380eeab64892a 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-18 +date: 2023-09-19 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 ba8fadbd9f1d9..09be0013a7ffb 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-18 +date: 2023-09-19 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 bedc7d19b1f82..772deac325783 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-18 +date: 2023-09-19 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 a660a81c7f964..adb782a15e017 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-18 +date: 2023-09-19 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 f7c61706a1f21..be918ae0ef203 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-18 +date: 2023-09-19 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 7d41c629bcd52..e1e5c39bee302 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-18 +date: 2023-09-19 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 4d90531ba9d5e..5e1510c1be06d 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-18 +date: 2023-09-19 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 05f4a33b937b3..e03a220ae16f4 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-18 +date: 2023-09-19 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 a241d0e6c04ce..b707e25fe2ae1 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-18 +date: 2023-09-19 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 14208a7e8e820..4869c260a698a 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-18 +date: 2023-09-19 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 4915ab0f1f4fd..ef740256de675 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-18 +date: 2023-09-19 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 8ddfb291e3b6a..f5cb34db2e81f 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-18 +date: 2023-09-19 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 4bcb5ed044922..da049961904fe 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-18 +date: 2023-09-19 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 b1cd27a8dfd4d..bb4fedbc435a5 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-18 +date: 2023-09-19 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 eabdf6c60fcbb..a0a88215fca1b 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-18 +date: 2023-09-19 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 dc72e40f42eb3..d69b7f0d8b076 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-18 +date: 2023-09-19 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 67d4c1be49a5c..629e919360762 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-18 +date: 2023-09-19 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 f976d9614b830..1626ec84589a8 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-18 +date: 2023-09-19 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 6438631017692..c5c7559ff6cea 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-18 +date: 2023-09-19 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 77919a302b08e..754f944c3b44f 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-18 +date: 2023-09-19 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 3bcc2a6abcf1e..64bef85b0702c 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-18 +date: 2023-09-19 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 b8d4c507e5426..9edca99aedd89 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-18 +date: 2023-09-19 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 2d7d1f6344944..a2ca22a8b14ba 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-18 +date: 2023-09-19 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 4f18787a375af..d55c871584fa1 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-18 +date: 2023-09-19 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 414bcf7af9472..b1b6d80b33f6e 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-18 +date: 2023-09-19 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 73169eb112e5c..0dcab881957c8 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index a20ebc06533ba..73da840a0bb5b 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 4cd9860a8c016..393b5aa66483c 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-18 +date: 2023-09-19 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 6cd98d818f5bd..03aed8608981e 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-18 +date: 2023-09-19 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 2b57cb9a42b07..8359b86e68d58 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-18 +date: 2023-09-19 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 c375602c225f9..f3ac4f6f4d9b8 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-18 +date: 2023-09-19 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 8af9361955b31..6db17b090a7d6 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-18 +date: 2023-09-19 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 107b246b3c767..a9525c85ccb85 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-18 +date: 2023-09-19 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 b2a4867f57cfc..bea3e2f823192 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-18 +date: 2023-09-19 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 01384ad40284d..bc0813e00ea69 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-18 +date: 2023-09-19 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 2a3f0ac5656d6..9578f8996684d 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-18 +date: 2023-09-19 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 a1ef84571847b..fffe4c4c2368b 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-18 +date: 2023-09-19 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 485eeeffe50a0..ebe85f5b8e7d2 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-18 +date: 2023-09-19 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 30eef9a93add6..de77dcc703055 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-18 +date: 2023-09-19 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 11e350f034e92..f4c2b71c07404 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-18 +date: 2023-09-19 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 f3ec6cefb8679..47a7ff2e7cf0f 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-18 +date: 2023-09-19 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 00fd04613319d..61aa483afbb8b 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-18 +date: 2023-09-19 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 0fd59393621be..b56a0820add3b 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-18 +date: 2023-09-19 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 9e7271703ea23..f559d070d8821 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-18 +date: 2023-09-19 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 ba690c22bf736..3e310b0b03354 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-18 +date: 2023-09-19 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 2c850ce03d7ce..df3315dd7e661 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-18 +date: 2023-09-19 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 782ea1a5bac52..5ecd1fafa84f3 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-18 +date: 2023-09-19 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 937a5512dcff5..3f45fa8450fbf 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-18 +date: 2023-09-19 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 c4906f5f860cf..eae71ee895a9f 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-18 +date: 2023-09-19 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 956c6c1c78f7b..1b201de1dda42 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-18 +date: 2023-09-19 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 8d49fe6e71253..44c4b1ae55ce9 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-18 +date: 2023-09-19 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 ae6f1af0c1eb3..06cb3913daf6e 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-18 +date: 2023-09-19 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 9d3297430935d..237be130f7ceb 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-18 +date: 2023-09-19 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 490950e341549..dce475277263a 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-18 +date: 2023-09-19 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 4d35f1dec4756..024737df6aaad 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-18 +date: 2023-09-19 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 8a5a155b864b5..194b6f6426968 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-18 +date: 2023-09-19 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 02e15e94dacb8..69636b6f6870e 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-18 +date: 2023-09-19 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 f1ccb53f39076..ae63f8e47041d 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-18 +date: 2023-09-19 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 b1ed70cb6fd59..86aa8a53fd835 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-18 +date: 2023-09-19 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 3457a99184c02..66fa45e5eced5 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-18 +date: 2023-09-19 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 b72aa38d2025b..271554d30b7dc 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-18 +date: 2023-09-19 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 f37218d128bda..bf5a5fc0fd53c 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-18 +date: 2023-09-19 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 0002623242b1c..02f13382c8da0 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-18 +date: 2023-09-19 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 8de39326b0045..c294f23df3b67 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-18 +date: 2023-09-19 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 c1858a7d9c7e0..17ce9abfc680f 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-18 +date: 2023-09-19 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 189f2bf682c33..7b8048e977245 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-18 +date: 2023-09-19 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 450206107cf47..c594f435d4a2d 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-18 +date: 2023-09-19 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 4516d012e01fc..459d446f92635 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-18 +date: 2023-09-19 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 63f1b68e93502..aa68eb43b7836 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-18 +date: 2023-09-19 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 775e32ac1d591..fc69ce015d229 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-18 +date: 2023-09-19 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 b4e20b518fd71..26f54352dbca0 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-18 +date: 2023-09-19 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 3cdb4dd19a3d1..3aa3787414e38 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-18 +date: 2023-09-19 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 458b29e3f52b9..f0e7dfa55ad61 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-18 +date: 2023-09-19 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 4094350d13a03..af4539486b4eb 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-18 +date: 2023-09-19 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 af690c3cb1fa7..c9babd11b9d0d 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-18 +date: 2023-09-19 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 4c2cb02409dc6..6be4dca995682 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-18 +date: 2023-09-19 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 3db9d6b75b281..70467b474450c 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-18 +date: 2023-09-19 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 03df6cec2614c..b8255c21a9de2 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-18 +date: 2023-09-19 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 8e111b5b1d767..c129795935b7f 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-18 +date: 2023-09-19 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 0e54b46146687..e7b4b53ad868a 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-18 +date: 2023-09-19 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 abe96717bfefe..d44547ba0e0ba 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-18 +date: 2023-09-19 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 cbff4ea009ab0..25b5a5ff5709e 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-18 +date: 2023-09-19 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 8ae4faa00dd01..f128d64d3811b 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-18 +date: 2023-09-19 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 360a418e01a07..b2fb925750ae1 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-18 +date: 2023-09-19 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 8f069f7d7cee0..b3260ba34661b 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-18 +date: 2023-09-19 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 8541a86e06fe3..e3fce0ced3a31 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-18 +date: 2023-09-19 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 86ba3f6c258e9..34e79173572f2 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-18 +date: 2023-09-19 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 2b0f90fa4f7a7..03684778c62d8 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-18 +date: 2023-09-19 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 a67a353db51cb..1a9ba7c881097 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-18 +date: 2023-09-19 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 bad42d222d1bc..cd7f17db7a417 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-18 +date: 2023-09-19 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 e68403da9feaf..47bc1bac7b387 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-18 +date: 2023-09-19 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 e4b7de52c8989..abb4e9a21fbd3 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-18 +date: 2023-09-19 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 d8ae81b6ca25a..486711b20e5af 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-18 +date: 2023-09-19 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 837161cdf2129..bc8f4d0eab32e 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-18 +date: 2023-09-19 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 a0823fda11128..e0ff0ceec1d7f 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-18 +date: 2023-09-19 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 c53e51dc80d54..7126a29dea129 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-18 +date: 2023-09-19 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 09bddd7a54e30..0ded36ebeba0d 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-18 +date: 2023-09-19 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 5184e1446b8a2..5f55c93936d1e 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-18 +date: 2023-09-19 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 7ebf5efebf9a2..4ee0c1ec80df9 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-18 +date: 2023-09-19 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 a8bc3c26196ca..8e6753bb43c7a 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-18 +date: 2023-09-19 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 da290c77fd32e..1f6c4f6a34379 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-18 +date: 2023-09-19 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 d12f805781443..ea61fba3a4c8c 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-18 +date: 2023-09-19 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 583f3965121e3..209603f99d4ce 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-18 +date: 2023-09-19 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 da4c6fcd6c023..27be49901bb81 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-18 +date: 2023-09-19 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 4df082183977e..54f69352149bd 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-18 +date: 2023-09-19 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 585462a2f6ac4..4b426cc92189e 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_subscription_tracking.devdocs.json b/api_docs/kbn_subscription_tracking.devdocs.json new file mode 100644 index 0000000000000..ea9cdb7f07167 --- /dev/null +++ b/api_docs/kbn_subscription_tracking.devdocs.json @@ -0,0 +1,519 @@ +{ + "id": "@kbn/subscription-tracking", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.registerEvents", + "type": "Function", + "tags": [], + "label": "registerEvents", + "description": [ + "\nRegisters the subscription-specific event types" + ], + "signature": [ + "(analyticsClient: Pick<", + { + "pluginId": "@kbn/analytics-client", + "scope": "common", + "docId": "kibKbnAnalyticsClientPluginApi", + "section": "def-common.IAnalyticsClient", + "text": "IAnalyticsClient" + }, + ", \"registerEventType\">) => void" + ], + "path": "packages/kbn-subscription-tracking/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.registerEvents.$1", + "type": "Object", + "tags": [], + "label": "analyticsClient", + "description": [], + "signature": [ + "Pick<", + { + "pluginId": "@kbn/analytics-client", + "scope": "common", + "docId": "kibKbnAnalyticsClientPluginApi", + "section": "def-common.IAnalyticsClient", + "text": "IAnalyticsClient" + }, + ", \"registerEventType\">" + ], + "path": "packages/kbn-subscription-tracking/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionButton", + "type": "Function", + "tags": [], + "label": "SubscriptionButton", + "description": [ + "\nWrapper around `EuiButton` that provides subscription events" + ], + "signature": [ + "({\n subscriptionContext,\n children,\n ...restProps\n}: ", + { + "pluginId": "@kbn/subscription-tracking", + "scope": "common", + "docId": "kibKbnSubscriptionTrackingPluginApi", + "section": "def-common.SubscriptionButtonProps", + "text": "SubscriptionButtonProps" + }, + ") => JSX.Element" + ], + "path": "packages/kbn-subscription-tracking/src/subscription_elements.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionButton.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n subscriptionContext,\n children,\n ...restProps\n}", + "description": [], + "signature": [ + { + "pluginId": "@kbn/subscription-tracking", + "scope": "common", + "docId": "kibKbnSubscriptionTrackingPluginApi", + "section": "def-common.SubscriptionButtonProps", + "text": "SubscriptionButtonProps" + } + ], + "path": "packages/kbn-subscription-tracking/src/subscription_elements.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionButtonEmpty", + "type": "Function", + "tags": [], + "label": "SubscriptionButtonEmpty", + "description": [ + "\nWrapper around `EuiButtonEmpty` that provides subscription events" + ], + "signature": [ + "({\n subscriptionContext,\n children,\n ...restProps\n}: ", + { + "pluginId": "@kbn/subscription-tracking", + "scope": "common", + "docId": "kibKbnSubscriptionTrackingPluginApi", + "section": "def-common.SubscriptionButtonEmptyProps", + "text": "SubscriptionButtonEmptyProps" + }, + ") => JSX.Element" + ], + "path": "packages/kbn-subscription-tracking/src/subscription_elements.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionButtonEmpty.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n subscriptionContext,\n children,\n ...restProps\n}", + "description": [], + "signature": [ + { + "pluginId": "@kbn/subscription-tracking", + "scope": "common", + "docId": "kibKbnSubscriptionTrackingPluginApi", + "section": "def-common.SubscriptionButtonEmptyProps", + "text": "SubscriptionButtonEmptyProps" + } + ], + "path": "packages/kbn-subscription-tracking/src/subscription_elements.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionLink", + "type": "Function", + "tags": [], + "label": "SubscriptionLink", + "description": [ + "\nWrapper around `EuiLink` that provides subscription events" + ], + "signature": [ + "({\n subscriptionContext,\n children,\n ...restProps\n}: ", + { + "pluginId": "@kbn/subscription-tracking", + "scope": "common", + "docId": "kibKbnSubscriptionTrackingPluginApi", + "section": "def-common.SubscriptionLinkProps", + "text": "SubscriptionLinkProps" + }, + ") => JSX.Element" + ], + "path": "packages/kbn-subscription-tracking/src/subscription_elements.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionLink.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n subscriptionContext,\n children,\n ...restProps\n}", + "description": [], + "signature": [ + { + "pluginId": "@kbn/subscription-tracking", + "scope": "common", + "docId": "kibKbnSubscriptionTrackingPluginApi", + "section": "def-common.SubscriptionLinkProps", + "text": "SubscriptionLinkProps" + } + ], + "path": "packages/kbn-subscription-tracking/src/subscription_elements.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionTrackingProvider", + "type": "Function", + "tags": [], + "label": "SubscriptionTrackingProvider", + "description": [ + "\nExternal services provider" + ], + "signature": [ + "({ children, ...services }: React.PropsWithChildren<", + { + "pluginId": "@kbn/subscription-tracking", + "scope": "common", + "docId": "kibKbnSubscriptionTrackingPluginApi", + "section": "def-common.Services", + "text": "Services" + }, + ">) => JSX.Element" + ], + "path": "packages/kbn-subscription-tracking/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionTrackingProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "{ children, ...services }", + "description": [], + "signature": [ + "React.PropsWithChildren<", + { + "pluginId": "@kbn/subscription-tracking", + "scope": "common", + "docId": "kibKbnSubscriptionTrackingPluginApi", + "section": "def-common.Services", + "text": "Services" + }, + ">" + ], + "path": "packages/kbn-subscription-tracking/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.Services", + "type": "Interface", + "tags": [], + "label": "Services", + "description": [], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.Services.navigateToApp", + "type": "Function", + "tags": [], + "label": "navigateToApp", + "description": [], + "signature": [ + "(app: string, options: { path: string; }) => void" + ], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.Services.navigateToApp.$1", + "type": "string", + "tags": [], + "label": "app", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.Services.navigateToApp.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.Services.navigateToApp.$2.path", + "type": "string", + "tags": [], + "label": "path", + "description": [], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.Services.analyticsClient", + "type": "Object", + "tags": [], + "label": "analyticsClient", + "description": [], + "signature": [ + "{ reportEvent: (eventType: string, eventData: EventTypeData) => void; }" + ], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionContextData", + "type": "Interface", + "tags": [], + "label": "SubscriptionContextData", + "description": [ + "\nA piece of metadata which consists of an identifier of the advertised feature and\nthe `source` (e.g. location) of the subscription element." + ], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionContextData.source", + "type": "CompoundType", + "tags": [], + "label": "source", + "description": [ + "\nA human-readable identifier describing the location of the beginning of the\nsubscription flow.\nLocation identifiers are prefixed with a solution identifier, e.g. `security__`\n" + ], + "signature": [ + "`observability__${string}` | `security__${string}`" + ], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionContextData.feature", + "type": "string", + "tags": [], + "label": "feature", + "description": [ + "\nA human-readable identifier describing the feature that is being promoted.\n" + ], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.EVENT_NAMES", + "type": "Enum", + "tags": [], + "label": "EVENT_NAMES", + "description": [], + "path": "packages/kbn-subscription-tracking/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionButtonEmptyProps", + "type": "Type", + "tags": [], + "label": "SubscriptionButtonEmptyProps", + "description": [], + "signature": [ + "((", + "DisambiguateSet", + " & ", + "CommonEuiButtonEmptyProps", + " & { onClick?: React.MouseEventHandler | undefined; } & React.ButtonHTMLAttributes) | (", + "DisambiguateSet", + "<", + "EuiButtonEmptyPropsForButton", + ", EuiButtonEmptyPropsForAnchor> & ", + "CommonEuiButtonEmptyProps", + " & { href?: string | undefined; onClick?: React.MouseEventHandler | undefined; } & React.AnchorHTMLAttributes)) & CommonProps" + ], + "path": "packages/kbn-subscription-tracking/src/subscription_elements.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionButtonProps", + "type": "Type", + "tags": [], + "label": "SubscriptionButtonProps", + "description": [], + "signature": [ + "EuiButtonProps", + " & CommonProps" + ], + "path": "packages/kbn-subscription-tracking/src/subscription_elements.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionLinkProps", + "type": "Type", + "tags": [], + "label": "SubscriptionLinkProps", + "description": [], + "signature": [ + "((", + "DisambiguateSet", + "<", + "EuiLinkButtonProps", + ", ", + "EuiLinkAnchorProps", + "> & ", + "EuiLinkAnchorProps", + ") | (", + "DisambiguateSet", + "<", + "EuiLinkAnchorProps", + ", ", + "EuiLinkButtonProps", + "> & ", + "EuiLinkButtonProps", + ")) & CommonProps" + ], + "path": "packages/kbn-subscription-tracking/src/subscription_elements.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/subscription-tracking", + "id": "def-common.SubscriptionTrackingContext", + "type": "Object", + "tags": [], + "label": "SubscriptionTrackingContext", + "description": [], + "signature": [ + "React.Context<", + { + "pluginId": "@kbn/subscription-tracking", + "scope": "common", + "docId": "kibKbnSubscriptionTrackingPluginApi", + "section": "def-common.Services", + "text": "Services" + }, + " | null>" + ], + "path": "packages/kbn-subscription-tracking/src/services.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] + } +} \ No newline at end of file diff --git a/api_docs/kbn_subscription_tracking.mdx b/api_docs/kbn_subscription_tracking.mdx new file mode 100644 index 0000000000000..fe9ce601dc6c8 --- /dev/null +++ b/api_docs/kbn_subscription_tracking.mdx @@ -0,0 +1,42 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnSubscriptionTrackingPluginApi +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-19 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/subscription-tracking'] +--- +import kbnSubscriptionTrackingObj from './kbn_subscription_tracking.devdocs.json'; + + + +Contact [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 24 | 0 | 16 | 0 | + +## Common + +### Objects + + +### Functions + + +### Interfaces + + +### Enums + + +### Consts, variables and types + + diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index b32da7cf7f3fe..bc8c610b77ffc 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 6e9572c79bdca..c0874f7d3732f 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-18 +date: 2023-09-19 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 633fe98ae1264..de3b783cfbe17 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-18 +date: 2023-09-19 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 c1e2c8211bdcd..9d1ee7d201ca9 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-18 +date: 2023-09-19 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 8591347a02cb1..1b1fa60c4fce3 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-18 +date: 2023-09-19 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 97589f58ef7f0..b6885800ce4ad 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-18 +date: 2023-09-19 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 89815d8fb1d12..5fd29b89e81b3 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-18 +date: 2023-09-19 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 2612a2b454a21..b8e57dfbe1fa1 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-18 +date: 2023-09-19 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 74f6d6f0c2818..4be0e6e0de365 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-18 +date: 2023-09-19 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.devdocs.json b/api_docs/kbn_ui_shared_deps_src.devdocs.json index 2e7894453849b..6dc5639e2e27a 100644 --- a/api_docs/kbn_ui_shared_deps_src.devdocs.json +++ b/api_docs/kbn_ui_shared_deps_src.devdocs.json @@ -287,6 +287,61 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/ui-shared-deps-src", + "id": "def-common.externals.reduxjstoolkit", + "type": "string", + "tags": [], + "label": "'@reduxjs/toolkit'", + "description": [], + "path": "packages/kbn-ui-shared-deps-src/src/definitions.js", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ui-shared-deps-src", + "id": "def-common.externals.reactredux", + "type": "string", + "tags": [], + "label": "'react-redux'", + "description": [], + "path": "packages/kbn-ui-shared-deps-src/src/definitions.js", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ui-shared-deps-src", + "id": "def-common.externals.redux", + "type": "string", + "tags": [], + "label": "redux", + "description": [], + "path": "packages/kbn-ui-shared-deps-src/src/definitions.js", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ui-shared-deps-src", + "id": "def-common.externals.immer", + "type": "string", + "tags": [], + "label": "immer", + "description": [], + "path": "packages/kbn-ui-shared-deps-src/src/definitions.js", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ui-shared-deps-src", + "id": "def-common.externals.reselect", + "type": "string", + "tags": [], + "label": "reselect", + "description": [], + "path": "packages/kbn-ui-shared-deps-src/src/definitions.js", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/ui-shared-deps-src", "id": "def-common.externals.rxjs", diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index f3b5125844c44..19328a41784e3 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 47 | 0 | 38 | 0 | +| 52 | 0 | 43 | 0 | ## Common diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index f7f6cb5f8e9c9..d87ecb492fd44 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-18 +date: 2023-09-19 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 0587485d89cf0..f48aa0341db5f 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-18 +date: 2023-09-19 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 8ebb478b85ecc..75cc9a2218b1e 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-18 +date: 2023-09-19 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 8c8f6f673fde3..deaa36ff231a5 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-18 +date: 2023-09-19 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 31e6a44eb52d9..fafbfb6b53841 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-18 +date: 2023-09-19 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 27cda631bb9e3..1b5df8bc78f7c 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-18 +date: 2023-09-19 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 3a9bf3d8372a9..1144702db2149 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-18 +date: 2023-09-19 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 2564b7f1ea610..af386e2cc79ff 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-18 +date: 2023-09-19 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 06faefc89efa0..c82d5721372e9 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-18 +date: 2023-09-19 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 14b0a78d5664d..99b9a82578779 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-18 +date: 2023-09-19 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 810ab3e64bbb0..42b8a42d02e9e 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-18 +date: 2023-09-19 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 f6f601098955d..4cd6941eea03c 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-18 +date: 2023-09-19 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 be886267160d9..c810f5fbff85e 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-18 +date: 2023-09-19 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 5354c08d5a5f4..4041fe26889c2 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-18 +date: 2023-09-19 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 6e9101c7d7ae5..1c069f0bfee69 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index b5d3ef10fc43f..637e19954c353 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 569fb3ce1f001..46d9ac2bbf4ef 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-18 +date: 2023-09-19 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 06526a52eab03..27923ed32f7dd 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-18 +date: 2023-09-19 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 3e5cdd134932c..5f2633bb3a2c0 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-18 +date: 2023-09-19 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 1b119d29e5364..f5305c673b8c9 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-18 +date: 2023-09-19 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 af4886734e265..e0a865bc3075a 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-18 +date: 2023-09-19 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 2a5783d872c37..cd3b1e778b5c3 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-18 +date: 2023-09-19 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 48befa9dd754c..17300a27ec2d3 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-18 +date: 2023-09-19 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 886c80a166b42..d3112738ad883 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-18 +date: 2023-09-19 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 34e545e5a278b..a352e4321f67f 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-18 +date: 2023-09-19 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 fa4d670853041..a240fe08abd4e 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-18 +date: 2023-09-19 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 c3055caaa3c2c..2877046a32147 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-18 +date: 2023-09-19 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 0d7ff4bf9fa3a..87aaa97cd6cfe 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index a0e2ab06193d7..944a0d26fc46f 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-18 +date: 2023-09-19 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 34db03eb41c09..6d6b058abdc0d 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-18 +date: 2023-09-19 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 0d2e39a04287f..682fff7d046b6 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-18 +date: 2023-09-19 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 9529b004070b7..e9e55cd79a461 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-18 +date: 2023-09-19 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 b5bc67c6e8226..f5f32f8a8e315 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-18 +date: 2023-09-19 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 c0fe674b7ca24..8879796c4ca50 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-18 +date: 2023-09-19 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 8064591412a7a..b657ddc8a8817 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index 1d3257949d761..799dd345ce281 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -2251,6 +2251,26 @@ "path": "x-pack/plugins/observability/public/typings/fetch_overview_data/index.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-public.ObservabilityFetchDataResponse.universal_profiling", + "type": "Object", + "tags": [], + "label": "universal_profiling", + "description": [], + "signature": [ + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.FetchDataResponse", + "text": "FetchDataResponse" + } + ], + "path": "x-pack/plugins/observability/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -2365,6 +2385,20 @@ "path": "x-pack/plugins/observability/public/typings/fetch_overview_data/index.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-public.ObservabilityHasDataResponse.universal_profiling", + "type": "Object", + "tags": [], + "label": "universal_profiling", + "description": [], + "signature": [ + "UniversalProfilingHasDataResponse" + ], + "path": "x-pack/plugins/observability/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -4231,7 +4265,7 @@ "label": "ObservabilityFetchDataPlugins", "description": [], "signature": [ - "\"uptime\" | \"ux\" | \"infra_logs\" | \"infra_metrics\" | \"apm\"" + "\"uptime\" | \"ux\" | \"infra_logs\" | \"infra_metrics\" | \"apm\" | \"universal_profiling\"" ], "path": "x-pack/plugins/observability/public/typings/fetch_overview_data/index.ts", "deprecated": false, @@ -4424,6 +4458,27 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observability", + "id": "def-public.UniversalProfilingDataResponse", + "type": "Type", + "tags": [], + "label": "UniversalProfilingDataResponse", + "description": [], + "signature": [ + { + "pluginId": "observability", + "scope": "public", + "docId": "kibObservabilityPluginApi", + "section": "def-public.FetchDataResponse", + "text": "FetchDataResponse" + } + ], + "path": "x-pack/plugins/observability/public/typings/fetch_overview_data/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observability", "id": "def-public.uptimeOverviewLocatorID", @@ -7928,7 +7983,7 @@ "label": "config", "description": [], "signature": [ - "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly thresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly compositeSlo: Readonly<{} & { enabled: boolean; }>; }" + "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly compositeSlo: Readonly<{} & { enabled: boolean; }>; }" ], "path": "x-pack/plugins/observability/server/routes/types.ts", "deprecated": false, @@ -9724,7 +9779,7 @@ "label": "ObservabilityConfig", "description": [], "signature": [ - "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly thresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly compositeSlo: Readonly<{} & { enabled: boolean; }>; }" + "{ readonly enabled: boolean; readonly unsafe: Readonly<{} & { alertDetails: Readonly<{} & { uptime: Readonly<{} & { enabled: boolean; }>; metrics: Readonly<{} & { enabled: boolean; }>; observability: Readonly<{} & { enabled: boolean; }>; logs: Readonly<{} & { enabled: boolean; }>; }>; thresholdRule: Readonly<{} & { enabled: boolean; }>; }>; readonly annotations: Readonly<{} & { index: string; enabled: boolean; }>; readonly customThresholdRule: Readonly<{} & { groupByPageSize: number; }>; readonly compositeSlo: Readonly<{} & { enabled: boolean; }>; }" ], "path": "x-pack/plugins/observability/server/index.ts", "deprecated": false, diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 55e5602e5d681..21db32af455cf 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/actionable-observability](https://github.com/orgs/elastic/team | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 543 | 2 | 534 | 14 | +| 546 | 2 | 537 | 14 | ## Client diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 9e605b605838d..cb039f217da63 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index ec7139b7b9326..0d393c1474a1d 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-18 +date: 2023-09-19 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 046939f5e474f..5326b2bf2dd4c 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-18 +date: 2023-09-19 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 ba07abd8f4ea5..381e01bc0ebf8 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-18 +date: 2023-09-19 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 593ca0efd05b9..da3d94c890a9d 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-18 +date: 2023-09-19 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 e5a177c21266e..efc926d660f0d 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 689 | 580 | 43 | +| 690 | 581 | 43 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 74825 | 223 | 63875 | 1528 | +| 74827 | 223 | 63869 | 1531 | ## 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) | - | 793 | 1 | 762 | 49 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 767 | 1 | 736 | 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 | @@ -73,7 +73,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 51 | 0 | 44 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Adds dashboards for discovering and managing Enterprise Search products. | 6 | 0 | 6 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 115 | 3 | 111 | 3 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 195 | 0 | 195 | 5 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | The Event Annotation service contains expressions for event annotations | 201 | 0 | 201 | 6 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 111 | 0 | 111 | 11 | | | [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) | - | 132 | 1 | 132 | 14 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'error' renderer to expressions | 17 | 0 | 15 | 2 | @@ -106,7 +106,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 149 | 0 | 109 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Image embeddable | 3 | 0 | 3 | 1 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 | -| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 194 | 0 | 189 | 4 | +| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 186 | 0 | 181 | 3 | | | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | This plugin visualizes data from Filebeat and Metricbeat, and integrates with other Observability solutions | 42 | 0 | 39 | 11 | | ingestPipelines | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | inputControlVis | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Input Control visualization to Kibana | 0 | 0 | 0 | 0 | @@ -136,7 +136,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | -| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 543 | 2 | 534 | 14 | +| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 546 | 2 | 537 | 14 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 42 | 0 | 39 | 7 | | observabilityLogExplorer | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | This plugin exposes and registers observability log consumption features. | 0 | 0 | 0 | 0 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 17 | 0 | 16 | 0 | @@ -184,7 +184,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 257 | 1 | 213 | 22 | | | [@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 | 51 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 576 | 1 | 550 | 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 | @@ -437,8 +437,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 19 | 0 | 11 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 35125 | 0 | 34718 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 13 | 0 | 5 | 0 | -| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 84 | 0 | 64 | 5 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 46 | 0 | 33 | 7 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 85 | 0 | 65 | 6 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 43 | 0 | 30 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 27 | 0 | 14 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 3 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 259 | 1 | 199 | 15 | @@ -613,6 +613,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 102 | 2 | 65 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 4 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 41 | 2 | 21 | 0 | +| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 24 | 0 | 16 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 5 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 289 | 4 | 242 | 12 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 137 | 5 | 105 | 2 | @@ -622,7 +623,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 39 | 0 | 25 | 1 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 86 | 0 | 86 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 49 | 0 | 35 | 0 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 47 | 0 | 38 | 0 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 52 | 0 | 43 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 7 | 0 | 6 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 92 | 0 | 42 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 10 | 0 | 7 | 6 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index ab68bc1841ce5..63abb58d1aba6 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-18 +date: 2023-09-19 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 a02442989138b..a3cb82b1f5ae4 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-18 +date: 2023-09-19 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 d63c165720c51..605d64f36f597 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-18 +date: 2023-09-19 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 81e8cd085aee9..fb85330c4a82a 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-18 +date: 2023-09-19 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 f3d3b7819c8b5..3b18917983031 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-18 +date: 2023-09-19 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 529cd8de5302e..cc164d7da3664 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-18 +date: 2023-09-19 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 2aa4c6ce02ba0..371dd2f096a47 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-18 +date: 2023-09-19 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 801f96570ae65..0896b85d92ed6 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-18 +date: 2023-09-19 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 8f930fb9b2c1a..79496af4501db 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-18 +date: 2023-09-19 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 c1471bbee241e..bd4d71e82e826 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-18 +date: 2023-09-19 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 c9759ef6df70d..a9f2a61686bcc 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-18 +date: 2023-09-19 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 db932cbfa0310..6fe9de598ddc0 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-18 +date: 2023-09-19 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 c929b98b07a86..a0e74f88d9c2e 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-18 +date: 2023-09-19 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 747d69708946a..13dc6046f5767 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-18 +date: 2023-09-19 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 7386a2e827192..20c25d8975955 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-18 +date: 2023-09-19 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 fe0f03f33762a..548e65c09178a 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-18 +date: 2023-09-19 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 ea5a152a1d057..5b4210216fed5 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-18 +date: 2023-09-19 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 5eba3ddebdd38..7c8a01642f832 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-18 +date: 2023-09-19 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 22cdb80677758..611040377bf1b 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-18 +date: 2023-09-19 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 c889923cb5830..06129a24e742e 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-18 +date: 2023-09-19 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 4e17e3d8b0466..9cecfd7a4a096 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-18 +date: 2023-09-19 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 753f8d779b7b3..d50b6cd5aef07 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-18 +date: 2023-09-19 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 15c5da35e4840..2707170c38325 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-18 +date: 2023-09-19 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 0de7aa5a518ee..a44b8271291d4 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-18 +date: 2023-09-19 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 7c445037e8b5d..49794dd880c9f 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-18 +date: 2023-09-19 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 70f90f3dc20ab..691b34b3d0659 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-18 +date: 2023-09-19 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 2c5bff59f99c8..5cca8cf8021e4 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 6404d5f492fc2..c767c9c22c838 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 189fefea6e009..8861d740f9e78 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-18 +date: 2023-09-19 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 8d678bc02daa7..890b79205b2e1 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-18 +date: 2023-09-19 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 7b494960ac3aa..a898f29622843 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-18 +date: 2023-09-19 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 e6aec2eb4a60c..c3de48fd725bc 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-18 +date: 2023-09-19 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 354877d217b88..e0366383e1da1 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-18 +date: 2023-09-19 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 eb0617a920f30..9d4e0063ec981 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-18 +date: 2023-09-19 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 19a99a2b95e3d..5a35d27cfe121 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-18 +date: 2023-09-19 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 78ca7b06f4108..1e44cafff9848 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 2539f40f5be8e..8c997c60d3286 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index fe698cfdcafeb..71aca2f9dd5dd 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-18 +date: 2023-09-19 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 a153daf2744a9..2bbfb1290b896 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -1217,13 +1217,7 @@ "({\n http,\n searchText,\n typesFilter,\n actionTypesFilter,\n ruleExecutionStatusesFilter,\n ruleStatusesFilter,\n tagsFilter,\n}: ", "LoadRuleAggregationsProps", ") => Promise<", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RuleAggregationFormattedResult", - "text": "RuleAggregationFormattedResult" - }, + "AggregateRulesResponse", ">" ], "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/aggregate.ts", @@ -9019,7 +9013,7 @@ "label": "isGroupAggregation", "description": [], "signature": [ - "(termField?: string | undefined) => boolean" + "(termField?: string | string[] | undefined) => boolean" ], "path": "x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts", "deprecated": false, @@ -9028,12 +9022,12 @@ { "parentPluginId": "triggersActionsUi", "id": "def-common.isGroupAggregation.$1", - "type": "string", + "type": "CompoundType", "tags": [], "label": "termField", "description": [], "signature": [ - "string | undefined" + "string | string[] | undefined" ], "path": "x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts", "deprecated": false, @@ -9256,12 +9250,12 @@ { "parentPluginId": "triggersActionsUi", "id": "def-common.BuildAggregationOpts.termField", - "type": "string", + "type": "CompoundType", "tags": [], "label": "termField", "description": [], "signature": [ - "string | undefined" + "string | string[] | undefined" ], "path": "x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts", "deprecated": false, diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index a14a53787e873..6341ab131ad8c 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-18 +date: 2023-09-19 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 | 51 | +| 576 | 1 | 550 | 52 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 36aae26dc9903..1773e573472ee 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-18 +date: 2023-09-19 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 7b3f0faa027cf..5dc0189171e8c 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-18 +date: 2023-09-19 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 47599b58f8d07..2a2d395e6b54c 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-18 +date: 2023-09-19 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 4ad356e41031c..e276ceb59d5a1 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-18 +date: 2023-09-19 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 b62b43f181db7..b226890976c9f 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-18 +date: 2023-09-19 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 03b11994546df..3b0ba934d5289 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-18 +date: 2023-09-19 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 a79fa233b60c2..28d3de651e7ef 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-18 +date: 2023-09-19 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 879d342d58126..75a2e45fb43ba 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-18 +date: 2023-09-19 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 967fe7880a4c5..d8b10b102d402 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-18 +date: 2023-09-19 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 96ca8d0ac6d0a..c7b71aa8b6e41 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-18 +date: 2023-09-19 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 4461569637176..9bbac994735f3 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-18 +date: 2023-09-19 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 e5ddc67d24f63..226d650aa6144 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-18 +date: 2023-09-19 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 65d0487d4ba3b..6929050acaf79 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-18 +date: 2023-09-19 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 15aa4f66931c6..b15fb92d95fd7 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-18 +date: 2023-09-19 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 e238a48bbb921..81b2610b49520 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-18 +date: 2023-09-19 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 830700d499f93..a5077ae84a77a 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-18 +date: 2023-09-19 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 3bf19e74f9f3d..9933318ab9afb 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-18 +date: 2023-09-19 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 af39253166b07..c7ec674e555d6 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-18 +date: 2023-09-19 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 139ad5a35f397..76228a6dc2d14 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-18 +date: 2023-09-19 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 d069c100321aa..3d10ef59dcaea 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-18 +date: 2023-09-19 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 e5cb903be22db..b9e72384b76fa 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-18 +date: 2023-09-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc index 765f1949ff5f5..253770bb7332d 100644 --- a/docs/CHANGELOG.asciidoc +++ b/docs/CHANGELOG.asciidoc @@ -10,6 +10,7 @@ Review important information about the {kib} 8.x releases. +* <> * <> * <> * <> @@ -48,11 +49,49 @@ Review important information about the {kib} 8.x releases. * <> -- +[[release-notes-8.10.1]] +== {kib} 8.10.1 + +The 8.10.1 release includes the following bug fixes. + +[float] +[[fixes-v8.10.1]] +=== Bug Fixes + +Dashboard:: +* Fixes content editor flyout footer ({kibana-pull}165907[#165907]). +Elastic Security:: +For the Elastic Security 8.10.1 release information, refer to {security-guide}/release-notes.html[_Elastic Security Solution Release Notes_]. +Fleet:: +* Show snapshot version in agent upgrade modal and allow custom values ({kibana-pull}165978[#165978]). +Observability:: +* Fix(slo): Use comma-separarted list of source index for transform ({kibana-pull}166294[#166294]). +Presentation:: +* Fixes air-gapped enviroment hitting `400` error when loading fonts for layer ({kibana-pull}165986[#165986]). + [[release-notes-8.10.0]] == {kib} 8.10.0 +IMPORTANT: {kib} 8.10.0 has been withdrawn. + For information about the {kib} 8.10.0 release, review the following information. +[float] +[[security-updates-v8.10.0]] +=== Security Updates + +* An issue was discovered by Elastic whereby sensitive information is recorded +in {kib} logs in the event of an error. The issue impacts only {kib} version +8.10.0 when logging in the JSON layout or when the pattern layout is configured +to log the `%meta` pattern. ++ +The issue is resolved in {kib} 8.10.1. Version 8.10.0 has been removed from our +download sites. ++ +For more information, see our related +https://discuss.elastic.co/t/kibana-8-10-1-security-update/343287[security +announcement]. + [float] [[breaking-changes-8.10.0]] === Breaking changes diff --git a/docs/api/osquery-manager/packs/create.asciidoc b/docs/api/osquery-manager/packs/create.asciidoc index 5f9829164b245..2fcfc58d43dba 100644 --- a/docs/api/osquery-manager/packs/create.asciidoc +++ b/docs/api/osquery-manager/packs/create.asciidoc @@ -33,6 +33,8 @@ experimental[] Create packs. `policy_ids`:: (Optional, array) A list of agents policy IDs. +`shards`:: (Required, object) An object with shard configuration for policies included in the pack. For each policy, set the shard configuration to a percentage (1–100) of target hosts. + `queries`:: (Required, object) An object of queries. @@ -56,8 +58,13 @@ $ curl -X POST api/osquery/packs \ "description": "My pack", "enabled": true, "policy_ids": [ - "my_policy_id" + "my_policy_id", + "fleet-server-policy" ], + "shards": { + "my_policy_id": 35, + "fleet-server-policy": 58 + }, "queries": { "my_query": { "query": "SELECT * FROM listening_ports;", @@ -67,7 +74,10 @@ $ curl -X POST api/osquery/packs \ "field": "port" }, "tags": { - "value": ["tag1", "tag2"] + "value": [ + "tag1", + "tag2" + ] } } } diff --git a/docs/api/osquery-manager/packs/update.asciidoc b/docs/api/osquery-manager/packs/update.asciidoc index 0fc2e2684e0e9..d098d2567f1ac 100644 --- a/docs/api/osquery-manager/packs/update.asciidoc +++ b/docs/api/osquery-manager/packs/update.asciidoc @@ -38,6 +38,8 @@ WARNING: You are unable to update a prebuilt pack (`read_only = true`). `policy_ids`:: (Optional, array) A list of agent policy IDs. +`shards`:: (Optional, object) An object with shard configuration for policies included in the pack. For each policy, set the shard configuration to a percentage (1–100) of target hosts. + `queries`:: (Required, object) An object of queries. diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 17425103eb6a8..325a4c47bd624 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -629,7 +629,7 @@ using the CURL scripts in the scripts folder. |{kib-repo}blob/{branch}/x-pack/plugins/log_explorer/README.md[logExplorer] -|This plugin provides a LogExplorer component using the Discover customization framework, offering several affordances specifically designed for log consumption. +|This plugin is home to the component and related types. It implements several of the underlying concepts that the Observability Log Explorer app builds upon. |{kib-repo}blob/{branch}/x-pack/plugins/logs_shared/README.md[logsShared] diff --git a/package.json b/package.json index 497c3c5b11232..775ee005bfb81 100644 --- a/package.json +++ b/package.json @@ -721,6 +721,7 @@ "@kbn/status-plugin-a-plugin": "link:test/server_integration/plugins/status_plugin_a", "@kbn/status-plugin-b-plugin": "link:test/server_integration/plugins/status_plugin_b", "@kbn/std": "link:packages/kbn-std", + "@kbn/subscription-tracking": "link:packages/kbn-subscription-tracking", "@kbn/synthetics-plugin": "link:x-pack/plugins/synthetics", "@kbn/task-manager-fixture-plugin": "link:x-pack/test/alerting_api_integration/common/plugins/task_manager_fixture", "@kbn/task-manager-performance-plugin": "link:x-pack/test/plugin_api_perf/plugins/task_manager_performance", @@ -951,7 +952,7 @@ "object-hash": "^1.3.1", "object-path-immutable": "^3.1.1", "openai": "^3.3.0", - "openpgp": "5.3.0", + "openpgp": "5.10.1", "opn": "^5.5.0", "ora": "^4.0.4", "p-limit": "^3.0.1", @@ -1097,6 +1098,7 @@ "@jest/reporters": "^29.6.1", "@jest/transform": "^29.6.1", "@jest/types": "^29.6.1", + "@kayahr/text-encoding": "^1.2.0", "@kbn/alerting-api-integration-helpers": "link:x-pack/test/alerting_api_integration/packages/helpers", "@kbn/ambient-common-types": "link:packages/kbn-ambient-common-types", "@kbn/ambient-ftr-types": "link:packages/kbn-ambient-ftr-types", diff --git a/packages/analytics/shippers/fullstory/src/fullstory_shipper.ts b/packages/analytics/shippers/fullstory/src/fullstory_shipper.ts index 6c1e11c36542d..bcb95ae38f1fb 100644 --- a/packages/analytics/shippers/fullstory/src/fullstory_shipper.ts +++ b/packages/analytics/shippers/fullstory/src/fullstory_shipper.ts @@ -32,6 +32,7 @@ const PAGE_VARS_KEYS = [ 'buildNum', // May be useful for Serverless 'cloudId', 'deploymentId', + 'projectId', // projectId and deploymentId are mutually exclusive. They shouldn't be sent in the same offering. 'cluster_name', 'cluster_uuid', 'cluster_version', diff --git a/packages/core/analytics/core-analytics-browser-internal/tsconfig.json b/packages/core/analytics/core-analytics-browser-internal/tsconfig.json index 4c2daa18d079d..c6efe4287effc 100644 --- a/packages/core/analytics/core-analytics-browser-internal/tsconfig.json +++ b/packages/core/analytics/core-analytics-browser-internal/tsconfig.json @@ -2,14 +2,9 @@ "extends": "../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", - "types": [ - "jest", - "node" - ] + "types": ["jest", "node"] }, - "include": [ - "**/*.ts" - ], + "include": ["**/*.ts"], "kbn_references": [ "@kbn/logging", "@kbn/analytics-client", @@ -20,7 +15,5 @@ "@kbn/core-base-browser-mocks", "@kbn/core-injected-metadata-browser-mocks" ], - "exclude": [ - "target/**/*", - ] + "exclude": ["target/**/*"] } diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx index 008ee8a02989e..148fffca1bcc2 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx @@ -281,6 +281,11 @@ export class ChromeService { projectNavigation.setProjectsUrl(projectsUrl); }; + const setProjectName = (projectName: string) => { + validateChromeStyle(); + projectNavigation.setProjectName(projectName); + }; + const isIE = () => { const ua = window.navigator.userAgent; const msie = ua.indexOf('MSIE '); // IE 10 or older @@ -374,6 +379,7 @@ export class ChromeService { headerBanner$={headerBanner$.pipe(takeUntil(this.stop$))} homeHref$={projectNavigation.getProjectHome$()} projectsUrl$={projectNavigation.getProjectsUrl$()} + projectName$={projectNavigation.getProjectName$()} docLinks={docLinks} kibanaVersion={injectedMetadata.getKibanaVersion()} prependBasePath={http.basePath.prepend} @@ -507,6 +513,7 @@ export class ChromeService { project: { setHome: setProjectHome, setProjectsUrl, + setProjectName, setNavigation: setProjectNavigation, setSideNavComponent: setProjectSideNavComponent, setBreadcrumbs: setProjectBreadcrumbs, diff --git a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.ts b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.ts index 90be8ff754053..65d7fcc1bf559 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/project_navigation/project_navigation_service.ts @@ -46,6 +46,7 @@ export class ProjectNavigationService { }>({ current: null }); private projectHome$ = new BehaviorSubject(undefined); private projectsUrl$ = new BehaviorSubject(undefined); + private projectName$ = new BehaviorSubject(undefined); private projectNavigation$ = new BehaviorSubject(undefined); private activeNodes$ = new BehaviorSubject([]); private projectNavigationNavTreeFlattened: Record = {}; @@ -98,6 +99,12 @@ export class ProjectNavigationService { getProjectsUrl$: () => { return this.projectsUrl$.asObservable(); }, + setProjectName: (projectName: string) => { + this.projectName$.next(projectName); + }, + getProjectName$: () => { + return this.projectName$.asObservable(); + }, setProjectNavigation: (projectNavigation: ChromeProjectNavigation) => { this.projectNavigation$.next(projectNavigation); this.projectNavigationNavTreeFlattened = flattenNav(projectNavigation.navigationTree); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/types.ts b/packages/core/chrome/core-chrome-browser-internal/src/types.ts index a5610e726ac55..9bfb822531de4 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/types.ts +++ b/packages/core/chrome/core-chrome-browser-internal/src/types.ts @@ -56,6 +56,12 @@ export interface InternalChromeStart extends ChromeStart { */ setProjectsUrl(projectsUrl: string): void; + /** + * Sets the project name. + * @param projectName + */ + setProjectName(projectName: string): void; + /** * Sets the project navigation config to be used for rendering project navigation. * It is used for default project sidenav, project breadcrumbs, tracking active deep link. diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.test.tsx index b2a1cecede239..167b11629ce55 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.test.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.test.tsx @@ -29,6 +29,7 @@ describe('Header', () => { helpMenuLinks$: Rx.of([]), homeHref$: Rx.of('app/home'), projectsUrl$: Rx.of('/projects/'), + projectName$: Rx.of('My Project'), kibanaVersion: '8.9', loadingCount$: Rx.of(0), navControlsLeft$: Rx.of([]), @@ -82,5 +83,6 @@ describe('Header', () => { const projectsLink = await screen.getByTestId('projectsLink'); expect(projectsLink).toHaveAttribute('href', '/projects/'); + expect(projectsLink).toHaveTextContent('My Project'); }); }); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.tsx index 239b8487e1a06..1cbf8eaa9af0a 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/project/header.tsx @@ -73,6 +73,12 @@ const getHeaderCss = ({ size }: EuiThemeComputed) => ({ padding-right: ${size.xs}; `, }, + projectName: { + link: css` + /* TODO: make header layout more flexible? */ + max-width: 320px; + `, + }, }); type HeaderCss = ReturnType; @@ -107,6 +113,7 @@ export interface Props { helpMenuLinks$: Observable; homeHref$: Observable; projectsUrl$: Observable; + projectName$: Observable; kibanaVersion: string; application: InternalApplicationStart; loadingCount$: ReturnType; @@ -184,6 +191,7 @@ export const ProjectHeader = ({ const toggleCollapsibleNavRef = createRef void }>(); const headerActionMenuMounter = useHeaderActionMenuMounter(observables.actionMenu$); const projectsUrl = useObservable(observables.projectsUrl$); + const projectName = useObservable(observables.projectName$); const { euiTheme } = useEuiTheme(); const headerCss = getHeaderCss(euiTheme); const { logo: logoCss } = headerCss; @@ -246,8 +254,12 @@ export const ProjectHeader = ({ - - {headerStrings.cloud.linkToProjects} + + {projectName ?? headerStrings.cloud.linkToProjects} diff --git a/packages/core/chrome/core-chrome-browser-mocks/src/chrome_service.mock.ts b/packages/core/chrome/core-chrome-browser-mocks/src/chrome_service.mock.ts index a3621f0fae3e4..f063bdcdccb37 100644 --- a/packages/core/chrome/core-chrome-browser-mocks/src/chrome_service.mock.ts +++ b/packages/core/chrome/core-chrome-browser-mocks/src/chrome_service.mock.ts @@ -70,6 +70,7 @@ const createStartContractMock = () => { project: { setHome: jest.fn(), setProjectsUrl: jest.fn(), + setProjectName: jest.fn(), setNavigation: jest.fn(), setSideNavComponent: jest.fn(), setBreadcrumbs: jest.fn(), diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts index 2e3a99b4b463e..43cf127a9ab19 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts @@ -713,6 +713,36 @@ describe('DocumentMigrator', () => { ]); }); + it('does not lose namespaces in documents with undefined namespace and defined namespaces property', () => { + const migrator = new DocumentMigrator({ + ...testOpts(), + typeRegistry: createRegistry( + { name: 'dog', namespaceType: 'multiple', convertToMultiNamespaceTypeVersion: '1.0.0' } + // no migration transforms are defined, the typeMigrationVersion will be derived from 'convertToMultiNamespaceTypeVersion' + ), + }); + migrator.prepareMigrations(); + const obj = { + id: 'mischievous', + type: 'dog', + attributes: { name: 'Ann' }, + coreMigrationVersion: kibanaVersion, + typeMigrationVersion: '0.1.0', + namespaces: ['something'], + } as SavedObjectUnsanitizedDoc; + const actual = migrator.migrateAndConvert(obj); + expect(actual).toEqual([ + { + id: 'mischievous', + type: 'dog', + attributes: { name: 'Ann' }, + coreMigrationVersion: kibanaVersion, + typeMigrationVersion: '1.0.0', + namespaces: ['something'], + }, + ]); + }); + it('does not fail when encountering documents with coreMigrationVersion higher than the latest known', () => { const migrator = new DocumentMigrator({ ...testOpts(), diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts index 762fa20342c49..11090badd9173 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts @@ -105,6 +105,13 @@ function convertNamespaceType(doc: SavedObjectUnsanitizedDoc) { const { namespace, ...otherAttrs } = doc; const additionalDocs: SavedObjectUnsanitizedDoc[] = []; + if (namespace == null && otherAttrs.namespaces) { + return { + additionalDocs, + transformedDoc: otherAttrs, + }; + } + // If this object exists in the default namespace, return it with the appropriate `namespaces` field without changing its ID. if (namespace === undefined) { return { diff --git a/packages/kbn-apm-config-loader/src/apm_config.ts b/packages/kbn-apm-config-loader/src/apm_config.ts index 2127d612d583b..c4f2bfdf60e82 100644 --- a/packages/kbn-apm-config-loader/src/apm_config.ts +++ b/packages/kbn-apm-config-loader/src/apm_config.ts @@ -6,14 +6,22 @@ * Side Public License, v 1. */ -import { schema } from '@kbn/config-schema'; +import { schema, TypeOf } from '@kbn/config-schema'; -export const apmConfigSchema = schema.object( +export type ApmConfigSchema = TypeOf; + +const apmReusableConfigSchema = schema.object( { active: schema.maybe(schema.boolean()), serverUrl: schema.maybe(schema.uri()), secretToken: schema.maybe(schema.string()), - globalLabels: schema.object({}, { unknowns: 'allow' }), + apiKey: schema.maybe(schema.string()), + environment: schema.maybe(schema.string()), + globalLabels: schema.maybe(schema.object({}, { unknowns: 'allow' })), }, { unknowns: 'allow' } ); + +export const apmConfigSchema = apmReusableConfigSchema.extends({ + servicesOverrides: schema.maybe(schema.recordOf(schema.string(), apmReusableConfigSchema)), +}); diff --git a/packages/kbn-apm-config-loader/src/config.test.ts b/packages/kbn-apm-config-loader/src/config.test.ts index 2d6dc013a214e..ec4355922f90e 100644 --- a/packages/kbn-apm-config-loader/src/config.test.ts +++ b/packages/kbn-apm-config-loader/src/config.test.ts @@ -359,5 +359,50 @@ describe('ApmConfiguration', () => { }) ); }); + + it('allows overriding some services settings', () => { + const kibanaConfig = { + elastic: { + apm: { + active: true, + serverUrl: 'http://an.internal.apm.server:port/', + transactionSampleRate: 0.1, + servicesOverrides: { + externalServiceName: { + active: false, + serverUrl: 'http://a.public.apm.server:port/', + disableSend: true, // just adding an extra field to prove merging works + }, + }, + }, + }, + }; + + const internalService = new ApmConfiguration(mockedRootDir, kibanaConfig, true).getConfig( + 'internalServiceName' + ); + expect(internalService).toEqual( + expect.objectContaining({ + active: true, + serverUrl: 'http://an.internal.apm.server:port/', + transactionSampleRate: 0.1, + serviceName: 'internalServiceName', + }) + ); + expect(internalService).not.toHaveProperty('disableSend'); + expect(internalService).not.toHaveProperty('servicesOverrides'); // We don't want to leak this to the client's config + + expect( + new ApmConfiguration(mockedRootDir, kibanaConfig, true).getConfig('externalServiceName') + ).toEqual( + expect.objectContaining({ + active: false, + serverUrl: 'http://a.public.apm.server:port/', + transactionSampleRate: 0.1, + disableSend: true, + serviceName: 'externalServiceName', + }) + ); + }); }); }); diff --git a/packages/kbn-apm-config-loader/src/config.ts b/packages/kbn-apm-config-loader/src/config.ts index 285d6e21f29e4..0dbff5b2385ca 100644 --- a/packages/kbn-apm-config-loader/src/config.ts +++ b/packages/kbn-apm-config-loader/src/config.ts @@ -14,6 +14,7 @@ import { getDataPath } from '@kbn/utils'; import { readFileSync } from 'fs'; import type { AgentConfigOptions } from 'elastic-apm-node'; import type { AgentConfigOptions as RUMAgentConfigOptions } from '@elastic/apm-rum'; +import type { ApmConfigSchema } from './apm_config'; // https://www.elastic.co/guide/en/apm/agent/nodejs/current/configuration.html const DEFAULT_CONFIG: AgentConfigOptions = { @@ -49,6 +50,18 @@ const CENTRALIZED_SERVICE_DIST_CONFIG: AgentConfigOptions = { transactionSampleRate: 0.1, }; +interface KibanaRawConfig { + elastic?: { + apm?: ApmConfigSchema; + }; + path?: { + data?: string; + }; + server?: { + uuid?: string; + }; +} + export class ApmConfiguration { private baseConfig?: AgentConfigOptions; private kibanaVersion: string; @@ -56,7 +69,7 @@ export class ApmConfiguration { constructor( private readonly rootDir: string, - private readonly rawKibanaConfig: Record, + private readonly rawKibanaConfig: KibanaRawConfig, private readonly isDistributable: boolean ) { // eslint-disable-next-line @typescript-eslint/no-var-requires @@ -66,10 +79,19 @@ export class ApmConfiguration { } public getConfig(serviceName: string): AgentConfigOptions { - return { + const { servicesOverrides = {} } = this.getConfigFromKibanaConfig(); + + let baseConfig = { ...this.getBaseConfig(), serviceName, }; + + const serviceOverride = servicesOverrides[serviceName]; + if (serviceOverride) { + baseConfig = merge({}, baseConfig, serviceOverride); + } + + return baseConfig; } private getBaseConfig() { @@ -166,7 +188,7 @@ export class ApmConfiguration { * Get the elastic.apm configuration from the --config file, supersedes the * default config. */ - private getConfigFromKibanaConfig(): AgentConfigOptions { + private getConfigFromKibanaConfig(): ApmConfigSchema { return this.rawKibanaConfig?.elastic?.apm ?? {}; } @@ -266,7 +288,7 @@ export class ApmConfiguration { * Reads APM configuration from different sources and merges them together. */ private getConfigFromAllSources(): AgentConfigOptions { - const configFromKibanaConfig = this.getConfigFromKibanaConfig(); + const { servicesOverrides, ...configFromKibanaConfig } = this.getConfigFromKibanaConfig(); const configFromEnv = this.getConfigFromEnv(configFromKibanaConfig); const config = merge({}, configFromKibanaConfig, configFromEnv); diff --git a/packages/kbn-apm-synthtrace-client/src/lib/apm/mobile_device.ts b/packages/kbn-apm-synthtrace-client/src/lib/apm/mobile_device.ts index 252590104e7a2..9a904d0d94dbb 100644 --- a/packages/kbn-apm-synthtrace-client/src/lib/apm/mobile_device.ts +++ b/packages/kbn-apm-synthtrace-client/src/lib/apm/mobile_device.ts @@ -254,6 +254,7 @@ export class MobileDevice extends Entity { return new ApmError({ ...this.fields, 'error.type': 'crash', + 'error.id': generateLongId(message), 'error.exception': [{ message, ...{ type: 'crash' } }], 'error.grouping_name': groupingName || message, }); diff --git a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts index bfae0c76d76a8..3304fc7bd3c9c 100644 --- a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts +++ b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts @@ -69,5 +69,6 @@ function kibanaHeaders() { Accept: 'application/json', 'Content-Type': 'application/json', 'kbn-xsrf': 'kibana', + 'elastic-api-version': '2023-10-31', }; } diff --git a/packages/kbn-es/src/cluster.ts b/packages/kbn-es/src/cluster.ts index 76c1119ab3584..cf61d768d7b0c 100644 --- a/packages/kbn-es/src/cluster.ts +++ b/packages/kbn-es/src/cluster.ts @@ -42,8 +42,7 @@ import { InstallSnapshotOptions, InstallSourceOptions, } from './install/types'; - -const DEFAULT_READY_TIMEOUT = 60 * 1000; +import { waitUntilClusterReady } from './utils/wait_until_cluster_ready'; // listen to data on stream until map returns anything but undefined const firstResult = (stream: Readable, map: (data: Buffer) => string | true | undefined) => @@ -426,7 +425,12 @@ export class Cluster { }); if (!skipReadyCheck) { - await this.waitForClusterReady(client, readyTimeout); + await waitUntilClusterReady({ + client, + expectedStatus: 'yellow', + log: this.log, + readyTimeout, + }); } // once the cluster is ready setup the native realm @@ -509,45 +513,6 @@ export class Cluster { }); } - async waitForClusterReady(client: Client, readyTimeout = DEFAULT_READY_TIMEOUT) { - let attempt = 0; - const start = Date.now(); - - this.log.info('waiting for ES cluster to report a yellow or green status'); - - while (true) { - attempt += 1; - - try { - const resp = await client.cluster.health(); - if (resp.status !== 'red') { - return; - } - - throw new Error(`not ready, cluster health is ${resp.status}`); - } catch (error) { - const timeSinceStart = Date.now() - start; - if (timeSinceStart > readyTimeout) { - const sec = readyTimeout / 1000; - throw new Error(`ES cluster failed to come online with the ${sec} second timeout`); - } - - if (error.message.startsWith('not ready,')) { - if (timeSinceStart > 10_000) { - this.log.warning(error.message); - } - } else { - this.log.warning( - `waiting for ES cluster to come online, attempt ${attempt} failed with: ${error.message}` - ); - } - - const waitSec = attempt * 1.5; - await new Promise((resolve) => setTimeout(resolve, waitSec * 1000)); - } - } - } - private getJavaOptions(opts: string | undefined) { let esJavaOpts = `${opts || ''} ${process.env.ES_JAVA_OPTS || ''}`; // ES now automatically sets heap size to 50% of the machine's available memory diff --git a/packages/kbn-es/src/integration_tests/cluster.test.ts b/packages/kbn-es/src/integration_tests/cluster.test.ts index dfe3d25f5ec65..cf6bba5df669b 100644 --- a/packages/kbn-es/src/integration_tests/cluster.test.ts +++ b/packages/kbn-es/src/integration_tests/cluster.test.ts @@ -12,6 +12,7 @@ import * as extractConfig from '../utils/extract_config_files'; import * as dockerUtils from '../utils/docker'; import { createAnyInstanceSerializer, createStripAnsiSerializer } from '@kbn/jest-serializers'; import * as installUtils from '../install'; +import * as waitClusterUtil from '../utils/wait_until_cluster_ready'; import { Cluster } from '../cluster'; import { ES_NOPASSWORD_P12_PATH } from '@kbn/dev-utils/src/certs'; import { @@ -20,8 +21,10 @@ import { InstallSnapshotOptions, InstallSourceOptions, } from '../install/types'; +import { Client } from '@elastic/elasticsearch'; expect.addSnapshotSerializer(createAnyInstanceSerializer(ToolingLog)); +expect.addSnapshotSerializer(createAnyInstanceSerializer(Client)); expect.addSnapshotSerializer(createStripAnsiSerializer()); const log = new ToolingLog(); @@ -101,6 +104,10 @@ jest.mock('../utils/docker', () => ({ runDockerContainer: jest.fn(), })); +jest.mock('../utils/wait_until_cluster_ready', () => ({ + waitUntilClusterReady: jest.fn(), +})); + const downloadSnapshotMock = jest.spyOn(installUtils, 'downloadSnapshot'); const installSourceMock = jest.spyOn(installUtils, 'installSource'); const installSnapshotMock = jest.spyOn(installUtils, 'installSnapshot'); @@ -108,6 +115,7 @@ const installArchiveMock = jest.spyOn(installUtils, 'installArchive'); const extractConfigFilesMock = jest.spyOn(extractConfig, 'extractConfigFiles'); const runServerlessClusterMock = jest.spyOn(dockerUtils, 'runServerlessCluster'); const runDockerContainerMock = jest.spyOn(dockerUtils, 'runDockerContainer'); +const waitUntilClusterReadyMock = jest.spyOn(waitClusterUtil, 'waitUntilClusterReady'); beforeEach(() => { jest.resetAllMocks(); @@ -366,6 +374,40 @@ describe('#start(installPath)', () => { expect(fs.existsSync(writeLogsToPath)).toBe(true); }); + test('calls waitUntilClusterReady() by default', async () => { + mockEsBin({ start: true }); + waitUntilClusterReadyMock.mockResolvedValue(); + + await new Cluster({ log }).start(installPath, esClusterExecOptions); + expect(waitUntilClusterReadyMock).toHaveBeenCalledTimes(1); + expect(waitUntilClusterReadyMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "client": , + "expectedStatus": "yellow", + "log": , + "readyTimeout": undefined, + }, + ] + `); + }); + + test(`doesn't call waitUntilClusterReady() if 'skipReadyCheck' is passed`, async () => { + mockEsBin({ start: true }); + waitUntilClusterReadyMock.mockResolvedValue(); + + await new Cluster({ log }).start(installPath, { skipReadyCheck: true }); + expect(waitUntilClusterReadyMock).toHaveBeenCalledTimes(0); + }); + + test(`rejects if waitUntilClusterReady() rejects`, async () => { + mockEsBin({ start: true }); + waitUntilClusterReadyMock.mockRejectedValue(new Error('foo')); + await expect( + new Cluster({ log }).start(installPath, esClusterExecOptions) + ).rejects.toThrowError('foo'); + }); + test('rejects if #start() was called previously', async () => { mockEsBin({ start: true }); @@ -750,18 +792,8 @@ describe('#runServerless()', () => { waitForReady: true, }; await cluster.runServerless(serverlessOptions); - expect(runServerlessClusterMock.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - , - Object { - "background": true, - "basePath": "${installPath}", - "clean": true, - "teardown": true, - "waitForReady": true, - }, - ] - `); + expect(runServerlessClusterMock.mock.calls[0][0]).toMatchInlineSnapshot(``); + expect(runServerlessClusterMock.mock.calls[0][1]).toBe(serverlessOptions); }); }); @@ -810,17 +842,12 @@ describe('#runDocker()', () => { }); test('passes through all options+log to #runDockerContainer()', async () => { + const options = { dockerCmd: 'start -a es01' }; runDockerContainerMock.mockResolvedValueOnce(); const cluster = new Cluster({ log }); - await cluster.runDocker({ dockerCmd: 'start -a es01' }); - expect(runDockerContainerMock.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - , - Object { - "dockerCmd": "start -a es01", - }, - ] - `); + await cluster.runDocker(options); + expect(runDockerContainerMock.mock.calls[0][0]).toMatchInlineSnapshot(``); + expect(runDockerContainerMock.mock.calls[0][1]).toBe(options); }); }); diff --git a/packages/kbn-es/src/utils/docker.test.ts b/packages/kbn-es/src/utils/docker.test.ts index 4856aa6d1b17d..1d4f1a71468af 100644 --- a/packages/kbn-es/src/utils/docker.test.ts +++ b/packages/kbn-es/src/utils/docker.test.ts @@ -33,6 +33,7 @@ import { import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log'; import { ES_P12_PATH } from '@kbn/dev-utils'; import { ESS_CONFIG_PATH, ESS_RESOURCES_PATHS, ESS_SECRETS_PATH, ESS_JWKS_PATH } from '../paths'; +import * as waitClusterUtil from './wait_until_cluster_ready'; jest.mock('execa'); const execa = jest.requireMock('execa'); @@ -42,6 +43,10 @@ jest.mock('@elastic/elasticsearch', () => { }; }); +jest.mock('./wait_until_cluster_ready', () => ({ + waitUntilClusterReady: jest.fn(), +})); + const log = new ToolingLog(); const logWriter = new ToolingLogCollectingWriter(); log.setWriters([logWriter]); @@ -51,6 +56,8 @@ const baseEsPath = `${KIBANA_ROOT}/.es`; const serverlessDir = 'stateless'; const serverlessObjectStorePath = `${baseEsPath}/${serverlessDir}`; +const waitUntilClusterReadyMock = jest.spyOn(waitClusterUtil, 'waitUntilClusterReady'); + beforeEach(() => { jest.resetAllMocks(); log.indent(-log.getIndent()); @@ -473,24 +480,18 @@ describe('runServerlessCluster()', () => { // setupDocker execa calls then run three nodes and attach logger expect(execa.mock.calls).toHaveLength(8); }); - describe('waitForReady', () => { - test('should wait for serverless nodes to be ready to serve requests', async () => { - mockFs({ - [baseEsPath]: {}, - }); - execa.mockImplementation(() => Promise.resolve({ stdout: '' })); - const health = jest.fn(); - jest - .requireMock('@elastic/elasticsearch') - .Client.mockImplementation(() => ({ cluster: { health } })); - - health.mockImplementationOnce(() => Promise.reject()); // first call fails - health.mockImplementationOnce(() => Promise.resolve({ status: 'red' })); // second call return wrong status - health.mockImplementationOnce(() => Promise.resolve({ status: 'green' })); // then succeeds - - await runServerlessCluster(log, { basePath: baseEsPath, waitForReady: true }); - expect(health).toHaveBeenCalledTimes(3); - }, 10000); + + test(`should wait for serverless nodes to return 'green' status`, async () => { + waitUntilClusterReadyMock.mockResolvedValue(); + mockFs({ + [baseEsPath]: {}, + }); + execa.mockImplementation(() => Promise.resolve({ stdout: '' })); + + await runServerlessCluster(log, { basePath: baseEsPath, waitForReady: true }); + expect(waitUntilClusterReadyMock).toHaveBeenCalledTimes(1); + expect(waitUntilClusterReadyMock.mock.calls[0][0].expectedStatus).toEqual('green'); + expect(waitUntilClusterReadyMock.mock.calls[0][0].readyTimeout).toEqual(undefined); }); }); diff --git a/packages/kbn-es/src/utils/docker.ts b/packages/kbn-es/src/utils/docker.ts index 00adea7e07cd6..1369af0e1adab 100644 --- a/packages/kbn-es/src/utils/docker.ts +++ b/packages/kbn-es/src/utils/docker.ts @@ -349,7 +349,7 @@ export async function maybePullDockerImage(log: ToolingLog, image: string) { stdio: ['ignore', 'inherit', 'pipe'], }).catch(({ message }) => { throw createCliError( - `Error pulling image. This is likely an issue authenticating with ${DOCKER_REGISTRY}. + `Error pulling image. This is likely an issue authenticating with ${DOCKER_REGISTRY}. Visit ${chalk.bold.cyan('https://docker-auth.elastic.co/github_auth')} to login. ${message}` @@ -622,8 +622,7 @@ export async function runServerlessCluster(log: ToolingLog, options: ServerlessO } : {}), }); - await waitUntilClusterReady({ client, log }); - log.success('ES is ready'); + await waitUntilClusterReady({ client, expectedStatus: 'green', log }); } if (options.teardown) { diff --git a/packages/kbn-es/src/utils/wait_until_cluster_ready.test.ts b/packages/kbn-es/src/utils/wait_until_cluster_ready.test.ts new file mode 100644 index 0000000000000..c662ba4ecaf8c --- /dev/null +++ b/packages/kbn-es/src/utils/wait_until_cluster_ready.test.ts @@ -0,0 +1,86 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { Client } from '@elastic/elasticsearch'; +import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log'; +import { waitUntilClusterReady } from './wait_until_cluster_ready'; + +jest.mock('@elastic/elasticsearch', () => { + return { + Client: jest.fn(), + }; +}); + +const log = new ToolingLog(); +const logWriter = new ToolingLogCollectingWriter(); +log.setWriters([logWriter]); + +const health = jest.fn(); + +beforeEach(() => { + jest.resetAllMocks(); + jest + .requireMock('@elastic/elasticsearch') + .Client.mockImplementation(() => ({ cluster: { health } })); + log.indent(-log.getIndent()); + logWriter.messages.length = 0; +}); + +afterEach(() => { + jest.clearAllMocks(); +}); + +describe('waitUntilClusterReady', () => { + test(`waits for node to return 'green' status`, async () => { + health.mockImplementationOnce(() => Promise.reject(new Error('foo'))); + health.mockImplementationOnce(() => Promise.resolve({ status: 'red' })); + health.mockImplementationOnce(() => Promise.resolve({ status: 'yellow' })); + health.mockImplementationOnce(() => Promise.resolve({ status: 'green' })); // 4th call returns expected status + + const client = new Client({}); + + await waitUntilClusterReady({ client, log, expectedStatus: 'green' }); + expect(health).toHaveBeenCalledTimes(4); + expect(logWriter.messages).toMatchInlineSnapshot(` + Array [ + " info waiting for ES cluster to report a green status", + " warn waiting for ES cluster to come online, attempt 1 failed with: foo", + " succ ES cluster is ready", + ] + `); + }, 10000); + + test(`waits for node to return 'yellow' status`, async () => { + health.mockImplementationOnce(() => Promise.reject(new Error('foo'))); + health.mockImplementationOnce(() => Promise.resolve({ status: 'red' })); + health.mockImplementationOnce(() => Promise.resolve({ status: 'YELLOW' })); // 3rd call returns expected status + health.mockImplementationOnce(() => Promise.resolve({ status: 'yellow' })); + health.mockImplementationOnce(() => Promise.resolve({ status: 'green' })); + + const client = new Client({}); + + await waitUntilClusterReady({ client, log, expectedStatus: 'yellow' }); + expect(health).toHaveBeenCalledTimes(3); + expect(logWriter.messages).toMatchInlineSnapshot(` + Array [ + " info waiting for ES cluster to report a yellow status", + " warn waiting for ES cluster to come online, attempt 1 failed with: foo", + " succ ES cluster is ready", + ] + `); + }, 10000); + + test(`rejects when 'readyTimeout' is exceeded`, async () => { + health.mockImplementationOnce(() => Promise.reject(new Error('foo'))); + health.mockImplementationOnce(() => Promise.resolve({ status: 'red' })); + const client = new Client({}); + await expect( + waitUntilClusterReady({ client, log, expectedStatus: 'yellow', readyTimeout: 1000 }) + ).rejects.toThrow('ES cluster failed to come online with the 1 second timeout'); + }); +}); diff --git a/packages/kbn-es/src/utils/wait_until_cluster_ready.ts b/packages/kbn-es/src/utils/wait_until_cluster_ready.ts index b8611253f89d3..99fa4a25c2071 100644 --- a/packages/kbn-es/src/utils/wait_until_cluster_ready.ts +++ b/packages/kbn-es/src/utils/wait_until_cluster_ready.ts @@ -7,38 +7,52 @@ */ import { Client } from '@elastic/elasticsearch'; +import { HealthStatus } from '@elastic/elasticsearch/lib/api/types'; import { ToolingLog } from '@kbn/tooling-log'; const DEFAULT_READY_TIMEOUT = 60 * 1000; // 1 minute +export type ClusterReadyStatus = 'green' | 'yellow'; export interface WaitOptions { client: Client; + expectedStatus: ClusterReadyStatus; log: ToolingLog; readyTimeout?: number; } +const checkStatus = (readyStatus: ClusterReadyStatus) => { + return readyStatus === 'yellow' + ? (status: HealthStatus) => status.toLocaleLowerCase() !== 'red' + : (status: HealthStatus) => status.toLocaleLowerCase() === 'green'; +}; + /** - * General method to wait for the ES cluster status to be green + * General method to wait for the ES cluster status to be yellow or green */ export async function waitUntilClusterReady({ client, + expectedStatus, log, readyTimeout = DEFAULT_READY_TIMEOUT, }: WaitOptions) { let attempt = 0; const start = Date.now(); - log.info('waiting for ES cluster to report a green status'); + log.info(`waiting for ES cluster to report a ${expectedStatus} status`); + + const isReady = checkStatus(expectedStatus); while (true) { attempt += 1; try { const resp = await client.cluster.health(); - if (resp.status === 'green') { + const status: HealthStatus = resp.status; + if (isReady(status)) { + log.success('ES cluster is ready'); return; } - throw new Error(`not ready, cluster health is ${resp.status}`); + throw new Error(`not ready, cluster health is ${status}`); } catch (error) { const timeSinceStart = Date.now() - start; if (timeSinceStart > readyTimeout) { diff --git a/packages/kbn-subscription-tracking/README.md b/packages/kbn-subscription-tracking/README.md new file mode 100644 index 0000000000000..4f84593980881 --- /dev/null +++ b/packages/kbn-subscription-tracking/README.md @@ -0,0 +1,35 @@ +# @kbn/subscription-tracking + +This package leverages the `@kbn/analytics-client` package to send dedicated subscription tracking events. + +It provides a set of React components that automatically track `impression` and `click` events. Consumers of those components need to specify a `subscription context` that gives more details on the type of feature that is advertised and the location of the upsell. + +```typescript +import { SubscriptionLink } from '@kbn/subscription-tracking'; +import type { SubscriptionContext } from '@kbn/subscription-tracking'; + +const subscriptionContext: SubscriptionContext = { + feature: 'threat-intelligence', + source: 'security__threat-intelligence', +}; + +export const Paywall = () => { + return ( +
+ + Upgrade to Platinum to get this feature + +
+ ); +}; +``` + +The example above uses a `SubscriptionLink` which is a wrapper of `EuiLink` . So it behaves just like a normal link. Alternatively, upsells can also use a `SubscriptionButton` or `SubscriptionButtonEmpty` which wrap `EuiButton` and `EuiButtonEmpty` respectively. + +When the link is mounted, it will send off an `impression` event with the given `subscriptionContext`. That piece of metadata consists of an identifier of the advertised feature (in this case `threat-intelligence`) and the `source` (aka location) of the impression (in this case the `threat-intelligence` page in the `security` solution). `source` follows the following format: `{solution-identifier}__location-identifier`. + +There are no special rules for how to name these identifiers but it's good practise to make sure that `feature` has the same value for all upsells advertising the same feature (e.g. use enums for features to prevent spelling mistakes). + +Upon interaction with the upsell link/button, a special `click` event is sent, which, again, contains the same subscription context. + +If you want to use the `subscription-tracking` elements in your app, you have to set up a `SubscriptionTrackingProvider` in your plugin setup and register the tracking events on startup. Have a look at https://github.com/elastic/kibana/pull/143910 for an example of an integration. diff --git a/packages/kbn-subscription-tracking/index.ts b/packages/kbn-subscription-tracking/index.ts new file mode 100644 index 0000000000000..de17c595918d5 --- /dev/null +++ b/packages/kbn-subscription-tracking/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './src/subscription_elements'; + +export { + SubscriptionTrackingContext, + SubscriptionTrackingProvider, + registerEvents, +} from './src/services'; + +export * from './types'; diff --git a/packages/kbn-subscription-tracking/jest.config.js b/packages/kbn-subscription-tracking/jest.config.js new file mode 100644 index 0000000000000..edc1839850dae --- /dev/null +++ b/packages/kbn-subscription-tracking/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../..', + roots: ['/packages/kbn-subscription-tracking'], +}; diff --git a/packages/kbn-subscription-tracking/kibana.jsonc b/packages/kbn-subscription-tracking/kibana.jsonc new file mode 100644 index 0000000000000..e165baebfa76b --- /dev/null +++ b/packages/kbn-subscription-tracking/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/subscription-tracking", + "owner": "@elastic/security-threat-hunting-investigations" +} diff --git a/packages/kbn-subscription-tracking/mocks.tsx b/packages/kbn-subscription-tracking/mocks.tsx new file mode 100644 index 0000000000000..b918f9bba2828 --- /dev/null +++ b/packages/kbn-subscription-tracking/mocks.tsx @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { FC } from 'react'; +import { analyticsClientMock } from '@kbn/analytics-client/src/mocks'; + +import { SubscriptionTrackingProvider } from './src/services'; + +const analyticsClientMockInst = analyticsClientMock.create(); + +/** + * Mock for the external services provider. Only use in tests! + */ +export const MockSubscriptionTrackingProvider: FC = ({ children }) => { + return ( + + {children} + + ); +}; diff --git a/packages/kbn-subscription-tracking/package.json b/packages/kbn-subscription-tracking/package.json new file mode 100644 index 0000000000000..e9dd11b56c81b --- /dev/null +++ b/packages/kbn-subscription-tracking/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/subscription-tracking", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} \ No newline at end of file diff --git a/packages/kbn-subscription-tracking/src/helpers.test.ts b/packages/kbn-subscription-tracking/src/helpers.test.ts new file mode 100644 index 0000000000000..fa000567d35d3 --- /dev/null +++ b/packages/kbn-subscription-tracking/src/helpers.test.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { isValidContext } from './helpers'; + +describe('tracking', () => { + describe('isValidLocation', () => { + it('identifies correct contexts', () => { + expect( + isValidContext({ + feature: 'test', + source: 'security__test', + }) + ).toBeTruthy(); + }); + + it('identifies incorrect contexts', () => { + expect( + isValidContext({ + feature: '', + source: 'security__', + }) + ).toBeFalsy(); + + expect( + isValidContext({ + feature: 'test', + source: 'security__', + }) + ).toBeFalsy(); + + expect( + isValidContext({ + feature: '', + source: 'security__test', + }) + ).toBeFalsy(); + }); + }); +}); diff --git a/packages/kbn-subscription-tracking/src/helpers.ts b/packages/kbn-subscription-tracking/src/helpers.ts new file mode 100644 index 0000000000000..251c0d1c04116 --- /dev/null +++ b/packages/kbn-subscription-tracking/src/helpers.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { SubscriptionContextData } from '../types'; + +const sourceStringRegEx = /^(\w[\w\-_]*)__(\w[\w\-_]*)$/; +export function isValidContext(context: SubscriptionContextData): boolean { + return context.feature.length > 0 && sourceStringRegEx.test(context.source); +} diff --git a/packages/kbn-subscription-tracking/src/services.tsx b/packages/kbn-subscription-tracking/src/services.tsx new file mode 100644 index 0000000000000..857bd0b0dcd89 --- /dev/null +++ b/packages/kbn-subscription-tracking/src/services.tsx @@ -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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { FC, useContext } from 'react'; +import type { AnalyticsClient, EventTypeOpts } from '@kbn/analytics-client'; +import { EVENT_NAMES, Services, SubscriptionContextData } from '../types'; + +export const SubscriptionTrackingContext = React.createContext(null); + +/** + * External services provider + */ +export const SubscriptionTrackingProvider: FC = ({ children, ...services }) => { + return ( + + {children} + + ); +}; + +/** + * React hook for accessing pre-wired services. + */ +export function useServices() { + const context = useContext(SubscriptionTrackingContext); + + if (!context) { + throw new Error( + 'SubscriptionTrackingContext is missing. Ensure your component or React root is wrapped with SubscriptionTrackingProvider.' + ); + } + + return context; +} + +const subscriptionContextSchema: EventTypeOpts['schema'] = { + source: { + type: 'keyword', + _meta: { + description: + 'A human-readable identifier describing the location of the beginning of the subscription flow', + }, + }, + feature: { + type: 'keyword', + _meta: { + description: 'A human-readable identifier describing the feature that is being promoted', + }, + }, +}; + +/** + * Registers the subscription-specific event types + */ +export function registerEvents(analyticsClient: Pick) { + analyticsClient.registerEventType({ + eventType: EVENT_NAMES.IMPRESSION, + schema: subscriptionContextSchema, + }); + + analyticsClient.registerEventType({ + eventType: EVENT_NAMES.CLICK, + schema: subscriptionContextSchema, + }); +} diff --git a/packages/kbn-subscription-tracking/src/subscription_elements.test.tsx b/packages/kbn-subscription-tracking/src/subscription_elements.test.tsx new file mode 100644 index 0000000000000..1795bbf42dd0c --- /dev/null +++ b/packages/kbn-subscription-tracking/src/subscription_elements.test.tsx @@ -0,0 +1,108 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { + SubscriptionLink, + SubscriptionButton, + SubscriptionButtonEmpty, +} from './subscription_elements'; +import { SubscriptionTrackingProvider } from './services'; +import { EVENT_NAMES, Services, SubscriptionContextData } from '../types'; +import { coolDownTimeMs, resetCoolDown } from './use_impression'; + +const testServices: Services = { + navigateToApp: jest.fn(), + analyticsClient: { + reportEvent: jest.fn(), + registerEventType: jest.fn(), + } as any, +}; +const testContext: SubscriptionContextData = { feature: 'test', source: 'security__test' }; + +const WithProviders: React.FC = ({ children }) => ( + + {children} + +); + +const renderWithProviders = (children: React.ReactElement) => + render(children, { wrapper: WithProviders }); + +const reset = () => { + jest.resetAllMocks(); + resetCoolDown(); +}; + +describe('SubscriptionElements', () => { + beforeAll(() => { + jest.useFakeTimers(); + }); + + afterAll(() => { + jest.useRealTimers(); + }); + + [SubscriptionButton, SubscriptionLink, SubscriptionButtonEmpty].forEach((SubscriptionElement) => { + describe(SubscriptionElement.name, () => { + beforeEach(reset); + + it('renders the children correctly', () => { + renderWithProviders( + Hello + ); + expect(screen.getByText('Hello')).toBeTruthy(); + }); + + it('fires an impression event when rendered', () => { + renderWithProviders(); + expect(testServices.analyticsClient.reportEvent).toHaveBeenCalledWith( + EVENT_NAMES.IMPRESSION, + testContext + ); + }); + + it('fires an impression event when rendered (but only once)', () => { + const { unmount } = renderWithProviders( + + ); + expect(testServices.analyticsClient.reportEvent).toHaveBeenCalledTimes(1); + unmount(); + + // does not create an impression again when remounted + const { unmount: unmountAgain } = renderWithProviders( + + ); + unmountAgain(); + expect(testServices.analyticsClient.reportEvent).toHaveBeenCalledTimes(1); + + // only creates anew impression when the cooldown time has passed + jest.setSystemTime(Date.now() + coolDownTimeMs); + renderWithProviders(); + expect(testServices.analyticsClient.reportEvent).toHaveBeenCalledTimes(2); + }); + + it('tracks a click when clicked and navigates to page', () => { + renderWithProviders( + hello + ); + + screen.getByText('hello').click(); + expect(testServices.analyticsClient.reportEvent).toHaveBeenCalledWith( + EVENT_NAMES.CLICK, + testContext + ); + expect(testServices.navigateToApp).toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/packages/kbn-subscription-tracking/src/subscription_elements.tsx b/packages/kbn-subscription-tracking/src/subscription_elements.tsx new file mode 100644 index 0000000000000..f29c58d8a0a41 --- /dev/null +++ b/packages/kbn-subscription-tracking/src/subscription_elements.tsx @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { EuiLink, EuiButton, EuiButtonEmpty } from '@elastic/eui'; +import type { EuiLinkProps, EuiButtonEmptyProps, EuiButtonProps } from '@elastic/eui'; +import { useGoToSubscription } from './use_go_to_subscription'; +import { useImpression } from './use_impression'; +import type { SubscriptionContextData } from '../types'; + +interface CommonProps { + /** The context information for this subscription element */ + subscriptionContext: SubscriptionContextData; +} + +export type SubscriptionLinkProps = EuiLinkProps & CommonProps; + +/** + * Wrapper around `EuiLink` that provides subscription events + */ +export function SubscriptionLink({ + subscriptionContext, + children, + ...restProps +}: SubscriptionLinkProps) { + const goToSubscription = useGoToSubscription({ subscriptionContext }); + useImpression(subscriptionContext); + + return ( + + {children} + + ); +} + +export type SubscriptionButtonProps = EuiButtonProps & CommonProps; + +/** + * Wrapper around `EuiButton` that provides subscription events + */ +export function SubscriptionButton({ + subscriptionContext, + children, + ...restProps +}: SubscriptionButtonProps) { + const goToSubscription = useGoToSubscription({ subscriptionContext }); + useImpression(subscriptionContext); + + return ( + + {children} + + ); +} + +export type SubscriptionButtonEmptyProps = EuiButtonEmptyProps & CommonProps; + +/** + * Wrapper around `EuiButtonEmpty` that provides subscription events + */ +export function SubscriptionButtonEmpty({ + subscriptionContext, + children, + ...restProps +}: SubscriptionButtonEmptyProps) { + const goToSubscription = useGoToSubscription({ subscriptionContext }); + useImpression(subscriptionContext); + + return ( + + {children} + + ); +} diff --git a/packages/kbn-subscription-tracking/src/use_go_to_subscription.ts b/packages/kbn-subscription-tracking/src/use_go_to_subscription.ts new file mode 100644 index 0000000000000..6c93fb27ee9bd --- /dev/null +++ b/packages/kbn-subscription-tracking/src/use_go_to_subscription.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import { useCallback } from 'react'; +import { isValidContext } from './helpers'; +import { useServices } from './services'; +import { EVENT_NAMES, SubscriptionContextData } from '../types'; + +interface Options { + subscriptionContext: SubscriptionContextData; +} + +/** + * Provides a navigation function that navigates to the subscription + * management page. When the function executes, a click event with the + * given context is emitted. + */ +export const useGoToSubscription = ({ subscriptionContext }: Options) => { + const { navigateToApp, analyticsClient } = useServices(); + const goToSubscription = useCallback(() => { + if (isValidContext(subscriptionContext)) { + analyticsClient.reportEvent(EVENT_NAMES.CLICK, subscriptionContext); + } else { + // eslint-disable-next-line no-console + console.error('The provided subscription context is invalid', subscriptionContext); + } + navigateToApp('management', { path: 'stack/license_management' }); + }, [analyticsClient, navigateToApp, subscriptionContext]); + + return goToSubscription; +}; diff --git a/packages/kbn-subscription-tracking/src/use_impression.ts b/packages/kbn-subscription-tracking/src/use_impression.ts new file mode 100644 index 0000000000000..eb8aa4c2e0ec5 --- /dev/null +++ b/packages/kbn-subscription-tracking/src/use_impression.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { useEffect } from 'react'; +import { isValidContext } from './helpers'; +import { useServices } from './services'; +import { EVENT_NAMES, SubscriptionContextData } from '../types'; + +/** + * Sends an impression event with the given context. + * + * Note: impression events are throttled and will not fire more + * often than once every 30 seconds. + */ +export const useImpression = (context: SubscriptionContextData) => { + const { analyticsClient } = useServices(); + + useEffect(() => { + if (!isValidContext(context)) { + // eslint-disable-next-line no-console + console.error('The provided subscription context is invalid', context); + return; + } + if (!isCoolingDown(context)) { + analyticsClient.reportEvent(EVENT_NAMES.IMPRESSION, context); + coolDown(context); + } + }, [analyticsClient, context]); +}; + +/** + * Impressions from the same context should not fire more than once every 30 seconds. + * This prevents logging too many impressions in case a page is reloaded often or + * if the user is navigating back and forth rapidly. + */ +export const coolDownTimeMs = 30 * 1000; +let impressionCooldown = new WeakMap(); + +function isCoolingDown(context: SubscriptionContextData) { + const previousLog = impressionCooldown.get(context); + + // we logged before and we are in the cooldown period + return previousLog && Date.now() - previousLog < coolDownTimeMs; +} + +function coolDown(context: SubscriptionContextData) { + impressionCooldown.set(context, Date.now()); +} + +export function resetCoolDown() { + impressionCooldown = new WeakMap(); +} diff --git a/packages/kbn-subscription-tracking/tsconfig.json b/packages/kbn-subscription-tracking/tsconfig.json new file mode 100644 index 0000000000000..677e9db998bb7 --- /dev/null +++ b/packages/kbn-subscription-tracking/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": ["jest", "node", "react"] + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["target/**/*"], + "kbn_references": ["@kbn/analytics-client"] +} diff --git a/packages/kbn-subscription-tracking/types.ts b/packages/kbn-subscription-tracking/types.ts new file mode 100644 index 0000000000000..a2adf0c6d90c5 --- /dev/null +++ b/packages/kbn-subscription-tracking/types.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import type { AnalyticsClient } from '@kbn/analytics-client'; + +enum SolutionIdentifier { + observability = 'observability', + security = 'security', +} +type LocationString = string; +type SourceIdentifier = `${SolutionIdentifier}__${LocationString}`; +/** + * A piece of metadata which consists of an identifier of the advertised feature and + * the `source` (e.g. location) of the subscription element. + */ +export interface SubscriptionContextData { + /** + * A human-readable identifier describing the location of the beginning of the + * subscription flow. + * Location identifiers are prefixed with a solution identifier, e.g. `security__` + * + * @example "security__host-overview" - the user is looking at an upsell button + * on the host overview page in the security solution + */ + source: SourceIdentifier; + + /** + * A human-readable identifier describing the feature that is being promoted. + * + * @example "alerts-by-process-ancestry" + */ + feature: string; +} + +export interface Services { + navigateToApp: (app: string, options: { path: string }) => void; + analyticsClient: Pick; +} + +export enum EVENT_NAMES { + CLICK = 'subscription__upsell__click', + IMPRESSION = 'subscription__upsell__impression', +} diff --git a/packages/kbn-test/src/jest/setup/polyfills.jsdom.js b/packages/kbn-test/src/jest/setup/polyfills.jsdom.js index 1d963afdfc4da..77aa4a6e389d1 100644 --- a/packages/kbn-test/src/jest/setup/polyfills.jsdom.js +++ b/packages/kbn-test/src/jest/setup/polyfills.jsdom.js @@ -17,9 +17,9 @@ if (!global.URL.hasOwnProperty('createObjectURL')) { // https://github.com/jsdom/jsdom/issues/2524 if (!global.hasOwnProperty('TextEncoder')) { - const { TextEncoder, TextDecoder } = require('util'); - global.TextEncoder = TextEncoder; - global.TextDecoder = TextDecoder; + const customTextEncoding = require('@kayahr/text-encoding'); + global.TextEncoder = customTextEncoding.TextEncoder; + global.TextDecoder = customTextEncoding.TextDecoder; } // NOTE: We should evaluate removing this once we upgrade to Node 18 and find out if loaders.gl already fixed this usage diff --git a/packages/kbn-ui-shared-deps-npm/BUILD.bazel b/packages/kbn-ui-shared-deps-npm/BUILD.bazel index 61569ac39c41d..f2ff64942a993 100644 --- a/packages/kbn-ui-shared-deps-npm/BUILD.bazel +++ b/packages/kbn-ui-shared-deps-npm/BUILD.bazel @@ -62,6 +62,11 @@ RUNTIME_DEPS = [ "@npm//tslib", "@npm//uuid", "@npm//io-ts", + "@npm//@reduxjs/toolkit", + "@npm//redux", + "@npm//react-redux", + "@npm//immer", + "@npm//reselect" ] webpack_cli( diff --git a/packages/kbn-ui-shared-deps-npm/webpack.config.js b/packages/kbn-ui-shared-deps-npm/webpack.config.js index 21eb15d016f7b..a7beaf4462dc8 100644 --- a/packages/kbn-ui-shared-deps-npm/webpack.config.js +++ b/packages/kbn-ui-shared-deps-npm/webpack.config.js @@ -84,6 +84,10 @@ module.exports = (_, argv) => { '@emotion/cache', '@emotion/react', '@hello-pangea/dnd/dist/dnd.js', + '@reduxjs/toolkit', + 'redux', + 'react-redux', + 'immer', '@tanstack/react-query', '@tanstack/react-query-devtools', 'classnames', @@ -103,6 +107,7 @@ module.exports = (_, argv) => { 'react-router-dom-v5-compat', 'react-router', 'react', + 'reselect', 'rxjs', 'rxjs/operators', 'styled-components', diff --git a/packages/kbn-ui-shared-deps-src/src/definitions.js b/packages/kbn-ui-shared-deps-src/src/definitions.js index 08e5355a3f444..ae9dcd3b056f1 100644 --- a/packages/kbn-ui-shared-deps-src/src/definitions.js +++ b/packages/kbn-ui-shared-deps-src/src/definitions.js @@ -56,6 +56,11 @@ const externals = { // this is how plugins/consumers from npm load monaco 'monaco-editor/esm/vs/editor/editor.api': '__kbnSharedDeps__.MonacoBarePluginApi', 'io-ts': '__kbnSharedDeps__.IoTs', + '@reduxjs/toolkit': '__kbnSharedDeps__.ReduxjsToolkit', + 'react-redux': '__kbnSharedDeps__.ReactRedux', + redux: '__kbnSharedDeps__.Redux', + immer: '__kbnSharedDeps__.Immer', + reselect: '__kbnSharedDeps__.Reselect', /** * big deps which are locked to a single version diff --git a/packages/kbn-ui-shared-deps-src/src/entry.js b/packages/kbn-ui-shared-deps-src/src/entry.js index ac203abadb39a..2491a34193e2e 100644 --- a/packages/kbn-ui-shared-deps-src/src/entry.js +++ b/packages/kbn-ui-shared-deps-src/src/entry.js @@ -47,6 +47,11 @@ export const ElasticEuiLibServicesFormat = require('@elastic/eui/optimize/es/ser export const ElasticEuiChartsTheme = require('@elastic/eui/dist/eui_charts_theme'); export const KbnDatemath = require('@kbn/datemath'); export const HelloPangeaDnd = require('@hello-pangea/dnd/dist/dnd'); +export const ReduxjsToolkit = require('@reduxjs/toolkit'); +export const ReactRedux = require('react-redux'); +export const Redux = require('redux'); +export const Immer = require('immer'); +export const Reselect = require('reselect'); export const Lodash = require('lodash'); export const LodashFp = require('lodash/fp'); diff --git a/renovate.json b/renovate.json index 7d6ccf6a22c88..0fd6ad800c03c 100644 --- a/renovate.json +++ b/renovate.json @@ -286,7 +286,8 @@ "tough-cookie", "@types/tough-cookie", "xml-crypto", - "@types/xml-crypto" + "@types/xml-crypto", + "@kayahr/text-encoding" ], "reviewers": [ "team:kibana-security" @@ -611,4 +612,4 @@ "enabled": true } ] -} \ No newline at end of file +} diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index ff0296ec9777b..d7c04f430661c 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -78,7 +78,7 @@ export const DEV_ONLY_LICENSE_ALLOWED = ['MPL-2.0']; // there are some licenses which should not be globally allowed // but can be brought in on a per-package basis export const PER_PACKAGE_ALLOWED_LICENSES = { - 'openpgp@5.3.0': ['LGPL-3.0+'], + 'openpgp@5.10.1': ['LGPL-3.0+'], }; // Globally overrides a license for a given package@version export const LICENSE_OVERRIDES = { diff --git a/src/plugins/dashboard/public/plugin.tsx b/src/plugins/dashboard/public/plugin.tsx index d2802a8ef3b6d..4d46b837da5ca 100644 --- a/src/plugins/dashboard/public/plugin.tsx +++ b/src/plugins/dashboard/public/plugin.tsx @@ -282,7 +282,7 @@ export class DashboardPlugin if (home) { home.featureCatalogue.register({ - id: LEGACY_DASHBOARD_APP_ID, + id: DASHBOARD_APP_ID, title: dashboardAppTitle, subtitle: i18n.translate('dashboard.featureCatalogue.dashboardSubtitle', { defaultMessage: 'Analyze data in dashboards.', @@ -291,7 +291,7 @@ export class DashboardPlugin defaultMessage: 'Display and share a collection of visualizations and saved searches.', }), icon: 'dashboardApp', - path: `/app/dashboards#${LANDING_PAGE_PATH}`, + path: `/app/${DASHBOARD_APP_ID}#${LANDING_PAGE_PATH}`, showOnHomePage: false, category: 'data', solutionId: 'kibana', diff --git a/src/plugins/discover/public/components/discover_container/discover_container.tsx b/src/plugins/discover/public/components/discover_container/discover_container.tsx index 28a596946bd18..8c879fdfef7bc 100644 --- a/src/plugins/discover/public/components/discover_container/discover_container.tsx +++ b/src/plugins/discover/public/components/discover_container/discover_container.tsx @@ -82,7 +82,11 @@ export const DiscoverContainerInternal = ({ css={discoverContainerWrapperCss} data-test-subj="discover-container-internal-wrapper" > - + = ({ newsFetchResult, solutions, features }) => }; // Dashboard and discover are displayed in larger cards - const mainApps = ['dashboard', 'discover']; + const mainApps = ['dashboards', 'discover']; const remainingApps = kibanaApps.map(({ id }) => id).filter((id) => !mainApps.includes(id)); const onDataViewCreated = () => { diff --git a/src/plugins/management/kibana.jsonc b/src/plugins/management/kibana.jsonc index b180cd74fa3d3..1c5f3ebc4bf36 100644 --- a/src/plugins/management/kibana.jsonc +++ b/src/plugins/management/kibana.jsonc @@ -10,7 +10,8 @@ "share" ], "optionalPlugins": [ - "home" + "home", + "serverless" ], "requiredBundles": [ "kibanaReact", diff --git a/src/plugins/management/public/plugin.ts b/src/plugins/management/public/plugin.ts index f272b84aa2e0a..d4ef130eb4de0 100644 --- a/src/plugins/management/public/plugin.ts +++ b/src/plugins/management/public/plugin.ts @@ -10,6 +10,7 @@ import { i18n } from '@kbn/i18n'; import { BehaviorSubject } from 'rxjs'; import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import { HomePublicPluginSetup } from '@kbn/home-plugin/public'; +import { ServerlessPluginStart } from '@kbn/serverless/public'; import { CoreSetup, CoreStart, @@ -39,6 +40,7 @@ interface ManagementSetupDependencies { interface ManagementStartDependencies { share: SharePluginStart; + serverless?: ServerlessPluginStart; } export class ManagementPlugin @@ -122,13 +124,21 @@ export class ManagementPlugin updater$: this.appUpdater, async mount(params: AppMountParameters) { const { renderApp } = await import('./application'); - const [coreStart] = await core.getStartServices(); + const [coreStart, deps] = await core.getStartServices(); return renderApp(params, { sections: getSectionsServiceStartPrivate(), kibanaVersion, coreStart, - setBreadcrumbs: coreStart.chrome.setBreadcrumbs, + setBreadcrumbs: (newBreadcrumbs) => { + if (deps.serverless) { + // drop the root management breadcrumb in serverless because it comes from the navigation tree + const [, ...trailingBreadcrumbs] = newBreadcrumbs; + deps.serverless.setBreadcrumbs(trailingBreadcrumbs); + } else { + coreStart.chrome.setBreadcrumbs(newBreadcrumbs); + } + }, isSidebarEnabled$: managementPlugin.isSidebarEnabled$, cardsNavigationConfig$: managementPlugin.cardsNavigationConfig$, landingPageRedirect$: managementPlugin.landingPageRedirect$, diff --git a/src/plugins/management/tsconfig.json b/src/plugins/management/tsconfig.json index 3ad07523cecb0..77c3752e7b0c3 100644 --- a/src/plugins/management/tsconfig.json +++ b/src/plugins/management/tsconfig.json @@ -25,7 +25,8 @@ "@kbn/test-jest-helpers", "@kbn/config-schema", "@kbn/core-application-browser", - "@kbn/core-http-browser" + "@kbn/core-http-browser", + "@kbn/serverless" ], "exclude": [ "target/**/*" diff --git a/test/api_integration/apis/event_annotations/event_annotations.ts b/test/api_integration/apis/event_annotations/event_annotations.ts index fda97881f3d9b..fc4a313279b02 100644 --- a/test/api_integration/apis/event_annotations/event_annotations.ts +++ b/test/api_integration/apis/event_annotations/event_annotations.ts @@ -10,18 +10,29 @@ import expect from '@kbn/expect'; import type { EventAnnotationGroupSavedObjectAttributes, EventAnnotationGroupCreateIn, + EventAnnotationGroupCreateOut, EventAnnotationGroupUpdateIn, EventAnnotationGroupSearchIn, + EventAnnotationGroupSearchOut, + EventAnnotationGroupGetIn, + EventAnnotationGroupGetOut, + EventAnnotationGroupDeleteIn, + EventAnnotationGroupDeleteOut, } from '@kbn/event-annotation-plugin/common'; import { CONTENT_ID } from '@kbn/event-annotation-plugin/common'; +import { EVENT_ANNOTATION_GROUP_TYPE } from '@kbn/event-annotation-common'; import { FtrProviderContext } from '../../ftr_provider_context'; const CONTENT_ENDPOINT = '/api/content_management/rpc'; const API_VERSION = 1; -const EXISTING_ID_1 = 'fcebef20-3ba4-11ee-85d3-3dd00bdd66ef'; // from loaded archive -const EXISTING_ID_2 = '0d1aa670-3baf-11ee-a4a7-c11cb33a9549'; // from loaded archive +// IDs come from from loaded archive +const EXISTING_ID_1 = '46c2a460-4e77-11ee-bb97-116581699678'; +const EXISTING_ID_2 = '425d2760-4e77-11ee-bb97-116581699678'; +const DESCRIPTION_2 = 'i am a description you can search for!'; +const EXISTING_ID_3 = '3905a4d0-4e77-11ee-bb97-116581699678'; +const TAG_ID = '36a8f020-4e77-11ee-bb97-116581699678'; const DEFAULT_EVENT_ANNOTATION_GROUP: EventAnnotationGroupSavedObjectAttributes = { title: 'a group', @@ -56,6 +67,8 @@ export default function ({ getService }: FtrProviderContext) { describe('group API', () => { before(async () => { + await kibanaServer.savedObjects.clean({ types: [EVENT_ANNOTATION_GROUP_TYPE] }); + await kibanaServer.importExport.load( 'test/api_integration/fixtures/kbn_archiver/event_annotations/event_annotations.json' ); @@ -65,10 +78,79 @@ export default function ({ getService }: FtrProviderContext) { await kibanaServer.importExport.unload( 'test/api_integration/fixtures/kbn_archiver/event_annotations/event_annotations.json' ); + + await kibanaServer.savedObjects.clean({ types: [EVENT_ANNOTATION_GROUP_TYPE] }); + }); + + describe('get', () => { + it(`should retrieve an existing group`, async () => { + const payload: EventAnnotationGroupGetIn = { + contentTypeId: CONTENT_ID, + id: EXISTING_ID_1, + version: API_VERSION, + }; + + const resp = await supertest + .post(`${CONTENT_ENDPOINT}/get`) + .set('kbn-xsrf', 'kibana') + .send(payload) + .expect(200); + + const result = resp.body.result.result as EventAnnotationGroupGetOut; + + expect(result.item.id).to.be(EXISTING_ID_1); + expect(result.meta.outcome).to.be('exactMatch'); + expect(result.item.references.length).to.be(1); + expect(result.item.attributes).to.eql({ + annotations: [ + { + filter: { + language: 'kuery', + query: + 'agent.keyword : "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" ', + type: 'kibana_query', + }, + icon: 'triangle', + id: 'fdede168-eff1-400f-b106-0f62061f5099', + key: { + type: 'point_in_time', + }, + label: 'Event', + timeField: 'timestamp', + type: 'query', + }, + ], + dataViewSpec: null, + description: '', + ignoreGlobalFilters: true, + title: 'group3', + }); + }); + + it(`should reject a group that does not exist`, async () => { + const payload: EventAnnotationGroupGetIn = { + contentTypeId: CONTENT_ID, + id: 'does-not-exist', + version: API_VERSION, + }; + + const resp = await supertest + .post(`${CONTENT_ENDPOINT}/get`) + .set('kbn-xsrf', 'kibana') + .send(payload) + .expect(404); + + expect(resp.body).to.eql({ + error: 'Not Found', + message: 'Saved object [event-annotation-group/does-not-exist] not found', + statusCode: 404, + }); + }); }); describe('search', () => { - // TODO test tag searching, ordering, pagination, etc + const performSearch = (payload: EventAnnotationGroupSearchIn) => + supertest.post(`${CONTENT_ENDPOINT}/search`).set('kbn-xsrf', 'kibana').send(payload); it(`should retrieve existing groups`, async () => { const payload: EventAnnotationGroupSearchIn = { @@ -83,19 +165,172 @@ export default function ({ getService }: FtrProviderContext) { version: API_VERSION, }; + const resp = await performSearch(payload).expect(200); + + const results = resp.body.result.result.hits; + expect(results.length).to.be(3); + expect(results.map(({ id }: { id: string }) => id)).to.eql([ + EXISTING_ID_1, + EXISTING_ID_2, + EXISTING_ID_3, + ]); + }); + + it(`should filter by tag`, async () => { + const payload: EventAnnotationGroupSearchIn = { + contentTypeId: CONTENT_ID, + query: { + limit: 1000, + tags: { + included: [TAG_ID], + excluded: [], + }, + }, + version: API_VERSION, + }; + + const resp = await performSearch(payload).expect(200); + + const result = resp.body.result.result as EventAnnotationGroupSearchOut; + expect(result.hits.length).to.be(2); + expect( + result.hits.every(({ references }) => references.map(({ id }) => id).includes(TAG_ID)) + ).to.be(true); + }); + + it(`should filter by text`, async () => { + const payload: EventAnnotationGroupSearchIn = { + contentTypeId: CONTENT_ID, + query: { + limit: 1000, + text: DESCRIPTION_2, + tags: { + included: [], + excluded: [], + }, + }, + version: API_VERSION, + }; + + const resp = await performSearch(payload).expect(200); + + const result = resp.body.result.result as EventAnnotationGroupSearchOut; + expect(result.hits.length).to.be(1); + expect(result.hits[0].id).to.be(EXISTING_ID_2); + }); + + it(`should paginate`, async () => { + const payload: EventAnnotationGroupSearchIn = { + contentTypeId: CONTENT_ID, + query: { + limit: 1, + cursor: '1', + tags: { + included: [], + excluded: [], + }, + }, + version: API_VERSION, + }; + + const resp = await performSearch(payload).expect(200); + + const result = resp.body.result.result as EventAnnotationGroupSearchOut; + expect(result.hits.length).to.be(1); + expect(result.hits[0].id).to.be(EXISTING_ID_1); + expect(result.pagination.total).to.be(3); + + // get second page + payload.query.cursor = '2'; + + const resp2 = await performSearch(payload).expect(200); + + const result2 = resp2.body.result.result as EventAnnotationGroupSearchOut; + expect(result2.hits.length).to.be(1); + expect(result2.hits[0].id).to.be(EXISTING_ID_2); + expect(result2.pagination.total).to.be(3); + + // get third page + payload.query.cursor = '3'; + + const resp3 = await performSearch(payload).expect(200); + + const result3 = resp3.body.result.result as EventAnnotationGroupSearchOut; + expect(result3.hits.length).to.be(1); + expect(result3.hits[0].id).to.be(EXISTING_ID_3); + expect(result3.pagination.total).to.be(3); + }); + }); + + describe('create', () => { + it(`should create a new group`, async () => { + const payload: EventAnnotationGroupCreateIn = { + contentTypeId: CONTENT_ID, + data: DEFAULT_EVENT_ANNOTATION_GROUP, + options: { + references: DEFAULT_REFERENCES, + }, + version: API_VERSION, + }; + const resp = await supertest - .post(`${CONTENT_ENDPOINT}/search`) + .post(`${CONTENT_ENDPOINT}/create`) .set('kbn-xsrf', 'kibana') .send(payload) .expect(200); - const results = resp.body.result.result.hits; - expect(results.length).to.be(2); - expect(results.map(({ id }: { id: string }) => id)).to.eql([EXISTING_ID_2, EXISTING_ID_1]); + const result = resp.body.result.result as EventAnnotationGroupCreateOut; + + expect(result.item.attributes).to.eql(DEFAULT_EVENT_ANNOTATION_GROUP); + expect(result.item.id).to.be.a('string'); + expect(result.item.namespaces).to.eql(['default']); + }); + + it(`should reject malformed groups`, async () => { + const badGroups = [ + // extra property + { + ...DEFAULT_EVENT_ANNOTATION_GROUP, + extraProp: 'some-value', + }, + // missing title + { + ...DEFAULT_EVENT_ANNOTATION_GROUP, + title: undefined, + }, + // wrong type for property + { + ...DEFAULT_EVENT_ANNOTATION_GROUP, + ignoreGlobalFilters: 'not-a-boolean', + }, + ] as unknown as EventAnnotationGroupSavedObjectAttributes[]; // (coerce the types because these are intentionally malformed) + + const expectedMessages = [ + 'Invalid data. [extraProp]: definition for this key is missing', + 'Invalid data. [title]: expected value of type [string] but got [undefined]', + 'Invalid data. [ignoreGlobalFilters]: expected value of type [boolean] but got [string]', + ]; + + for (let i = 0; i < badGroups.length; i++) { + const payload: EventAnnotationGroupCreateIn = { + contentTypeId: CONTENT_ID, + data: badGroups[i], + options: { + references: DEFAULT_REFERENCES, + }, + version: API_VERSION, + }; + + const resp = await supertest + .post(`${CONTENT_ENDPOINT}/create`) + .set('kbn-xsrf', 'kibana') + .send(payload) + .expect(400); + + expect(resp.body.message).to.be(expectedMessages[i]); + } }); - }); - describe('create', () => { it(`should require dataViewSpec to be specified`, async () => { const createWithDataViewSpec = (dataViewSpec: any) => { const payload: EventAnnotationGroupCreateIn = { @@ -127,6 +362,81 @@ export default function ({ getService }: FtrProviderContext) { }); describe('update', () => { + it(`should update a group`, async () => { + const payload: EventAnnotationGroupUpdateIn = { + contentTypeId: CONTENT_ID, + data: { + ...DEFAULT_EVENT_ANNOTATION_GROUP, + description: 'updated description', + }, + id: EXISTING_ID_1, + options: { + references: DEFAULT_REFERENCES, + }, + version: API_VERSION, + }; + + const resp = await supertest + .post(`${CONTENT_ENDPOINT}/update`) + .set('kbn-xsrf', 'kibana') + .send(payload) + .expect(200); + + const result = resp.body.result.result as EventAnnotationGroupCreateOut; + + expect(result.item.attributes).to.eql({ + ...DEFAULT_EVENT_ANNOTATION_GROUP, + description: 'updated description', + }); + expect(result.item.id).to.be(EXISTING_ID_1); + }); + + it(`should reject malformed groups`, async () => { + const badGroups = [ + // extra property + { + ...DEFAULT_EVENT_ANNOTATION_GROUP, + extraProp: 'some-value', + }, + // missing title + { + ...DEFAULT_EVENT_ANNOTATION_GROUP, + title: undefined, + }, + // wrong type for property + { + ...DEFAULT_EVENT_ANNOTATION_GROUP, + ignoreGlobalFilters: 'not-a-boolean', + }, + ] as unknown as EventAnnotationGroupSavedObjectAttributes[]; // (coerce the types because these are intentionally malformed) + + const expectedMessages = [ + 'Invalid data. [extraProp]: definition for this key is missing', + 'Invalid data. [title]: expected value of type [string] but got [undefined]', + 'Invalid data. [ignoreGlobalFilters]: expected value of type [boolean] but got [string]', + ]; + + for (let i = 0; i < badGroups.length; i++) { + const payload: EventAnnotationGroupUpdateIn = { + contentTypeId: CONTENT_ID, + data: badGroups[i], + id: EXISTING_ID_1, + options: { + references: DEFAULT_REFERENCES, + }, + version: API_VERSION, + }; + + const resp = await supertest + .post(`${CONTENT_ENDPOINT}/update`) + .set('kbn-xsrf', 'kibana') + .send(payload) + .expect(400); + + expect(resp.body.message).to.be(expectedMessages[i]); + } + }); + it(`should require dataViewSpec to be specified`, async () => { const updateWithDataViewSpec = (dataViewSpec: any) => { const payload: EventAnnotationGroupUpdateIn = { @@ -158,6 +468,34 @@ export default function ({ getService }: FtrProviderContext) { }); }); - // TODO - delete + describe('delete', () => { + const deleteGroupByID = (id: string) => { + const payload: EventAnnotationGroupDeleteIn = { + contentTypeId: CONTENT_ID, + id, + version: API_VERSION, + }; + + return supertest.post(`${CONTENT_ENDPOINT}/delete`).set('kbn-xsrf', 'kibana').send(payload); + }; + + it(`should delete a group`, async () => { + const resp = await deleteGroupByID(EXISTING_ID_1).expect(200); + + const result = resp.body.result.result as EventAnnotationGroupDeleteOut; + + expect(result.success).to.be(true); + }); + + it(`should reject deleting a group that does not exist`, async () => { + const resp = await deleteGroupByID('does-not-exist').expect(404); + + expect(resp.body).to.eql({ + error: 'Not Found', + message: 'Saved object [event-annotation-group/does-not-exist] not found', + statusCode: 404, + }); + }); + }); }); } diff --git a/test/api_integration/fixtures/kbn_archiver/event_annotations/event_annotations.json b/test/api_integration/fixtures/kbn_archiver/event_annotations/event_annotations.json index ed574c749518c..4732d061c6930 100644 --- a/test/api_integration/fixtures/kbn_archiver/event_annotations/event_annotations.json +++ b/test/api_integration/fixtures/kbn_archiver/event_annotations/event_annotations.json @@ -7,33 +7,31 @@ "title": "kibana_sample_data_logs" }, "coreMigrationVersion": "8.8.0", - "created_at": "2023-08-15T19:49:25.494Z", + "created_at": "2023-09-07T17:23:20.906Z", "id": "90943e30-9a47-11e8-b64d-95841ca0b247", "managed": false, "references": [], "type": "index-pattern", "typeMigrationVersion": "8.0.0", - "updated_at": "2023-08-15T19:49:25.494Z", - "version": "WzIyLDFd" + "updated_at": "2023-09-07T17:23:20.906Z", + "version": "WzEwMiwxXQ==" } { "attributes": { "annotations": [ { - "color": "#6092c0", "filter": { "language": "kuery", "query": "agent.keyword : \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\" ", "type": "kibana_query" }, - "icon": "asterisk", - "id": "499ee351-f541-46e0-b327-b3dcae91aff5", + "icon": "triangle", + "id": "fdede168-eff1-400f-b106-0f62061f5099", "key": { "type": "point_in_time" }, "label": "Event", - "lineStyle": "dashed", "timeField": "timestamp", "type": "query" } @@ -41,11 +39,11 @@ "dataViewSpec": null, "description": "", "ignoreGlobalFilters": true, - "title": "Another group" + "title": "group3" }, "coreMigrationVersion": "8.8.0", - "created_at": "2023-08-15T21:02:32.023Z", - "id": "0d1aa670-3baf-11ee-a4a7-c11cb33a9549", + "created_at": "2023-09-08T18:41:09.030Z", + "id": "46c2a460-4e77-11ee-bb97-116581699678", "managed": false, "references": [ { @@ -55,8 +53,25 @@ } ], "type": "event-annotation-group", - "updated_at": "2023-08-15T22:15:43.724Z", - "version": "WzU4LDFd" + "updated_at": "2023-09-08T18:42:48.080Z", + "version": "WzE2OCwxXQ==" +} + +{ + "attributes": { + "color": "#dac7c4", + "description": "a tag to filter by", + "name": "tag" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-09-08T18:40:42.018Z", + "id": "36a8f020-4e77-11ee-bb97-116581699678", + "managed": false, + "references": [], + "type": "tag", + "typeMigrationVersion": "8.0.0", + "updated_at": "2023-09-08T18:40:42.018Z", + "version": "WzI3NDUsMV0=" } { @@ -64,9 +79,49 @@ "annotations": [ { "icon": "triangle", - "id": "1d9627a8-11dc-44f1-badb-4d40a80b6bee", + "id": "3d9f03ca-36aa-4ebb-aab8-efef1591c6d5", "key": { - "timestamp": "2023-08-10T15:00:00.000Z", + "timestamp": "2023-09-08T18:32:00.000Z", + "type": "point_in_time" + }, + "label": "Event", + "type": "manual" + } + ], + "dataViewSpec": null, + "description": "i am a description you can search for!", + "ignoreGlobalFilters": true, + "title": "group2" + }, + "coreMigrationVersion": "8.8.0", + "created_at": "2023-09-08T18:41:01.654Z", + "id": "425d2760-4e77-11ee-bb97-116581699678", + "managed": false, + "references": [ + { + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "event-annotation-group_dataView-ref-90943e30-9a47-11e8-b64d-95841ca0b247", + "type": "index-pattern" + }, + { + "id": "36a8f020-4e77-11ee-bb97-116581699678", + "name": "36a8f020-4e77-11ee-bb97-116581699678", + "type": "tag" + } + ], + "type": "event-annotation-group", + "updated_at": "2023-09-08T18:41:01.654Z", + "version": "WzE2NCwxXQ==" +} + +{ + "attributes": { + "annotations": [ + { + "icon": "triangle", + "id": "f7be288b-8adf-48b9-89d4-267db4863a3d", + "key": { + "timestamp": "2023-09-08T18:32:00.000Z", "type": "point_in_time" }, "label": "Event", @@ -76,20 +131,25 @@ "dataViewSpec": null, "description": "", "ignoreGlobalFilters": true, - "title": "A group" + "title": "group1" }, "coreMigrationVersion": "8.8.0", - "created_at": "2023-08-15T19:50:29.907Z", - "id": "fcebef20-3ba4-11ee-85d3-3dd00bdd66ef", + "created_at": "2023-09-08T18:40:45.981Z", + "id": "3905a4d0-4e77-11ee-bb97-116581699678", "managed": false, "references": [ { "id": "90943e30-9a47-11e8-b64d-95841ca0b247", "name": "event-annotation-group_dataView-ref-90943e30-9a47-11e8-b64d-95841ca0b247", "type": "index-pattern" + }, + { + "id": "36a8f020-4e77-11ee-bb97-116581699678", + "name": "36a8f020-4e77-11ee-bb97-116581699678", + "type": "tag" } ], "type": "event-annotation-group", - "updated_at": "2023-08-15T22:13:19.290Z", - "version": "WzU0LDFd" + "updated_at": "2023-09-08T18:40:45.981Z", + "version": "WzE2MiwxXQ==" } \ No newline at end of file diff --git a/test/functional/apps/context/_discover_navigation.ts b/test/functional/apps/context/_discover_navigation.ts index 99e27b52983a0..54c743df37309 100644 --- a/test/functional/apps/context/_discover_navigation.ts +++ b/test/functional/apps/context/_discover_navigation.ts @@ -134,7 +134,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.saveSearch('my search'); await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/test/functional/apps/context/classic/_discover_navigation.ts b/test/functional/apps/context/classic/_discover_navigation.ts index b0b7f672a75b3..d20de752061e9 100644 --- a/test/functional/apps/context/classic/_discover_navigation.ts +++ b/test/functional/apps/context/classic/_discover_navigation.ts @@ -136,7 +136,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.saveSearch('my classic search'); await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/test/functional/apps/dashboard/group1/create_and_add_embeddables.ts b/test/functional/apps/dashboard/group1/create_and_add_embeddables.ts index bc79023bd51b7..9531606e649f3 100644 --- a/test/functional/apps/dashboard/group1/create_and_add_embeddables.ts +++ b/test/functional/apps/dashboard/group1/create_and_add_embeddables.ts @@ -30,7 +30,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('ensure toolbar popover closes on add', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.switchToEditMode(); await dashboardAddPanel.clickEditorMenuButton(); @@ -44,7 +44,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('add new visualization link', () => { before(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('few panels'); }); diff --git a/test/functional/apps/dashboard/group1/dashboard_unsaved_listing.ts b/test/functional/apps/dashboard/group1/dashboard_unsaved_listing.ts index 73e97aab3cb36..87c19402a51be 100644 --- a/test/functional/apps/dashboard/group1/dashboard_unsaved_listing.ts +++ b/test/functional/apps/dashboard/group1/dashboard_unsaved_listing.ts @@ -42,7 +42,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); }); diff --git a/test/functional/apps/dashboard/group1/dashboard_unsaved_state.ts b/test/functional/apps/dashboard/group1/dashboard_unsaved_state.ts index 51669b395b6f1..902e76342ec98 100644 --- a/test/functional/apps/dashboard/group1/dashboard_unsaved_state.ts +++ b/test/functional/apps/dashboard/group1/dashboard_unsaved_state.ts @@ -32,7 +32,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('few panels'); await PageObjects.header.waitUntilLoadingHasFinished(); @@ -71,7 +71,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.visualize.gotoVisualizationLandingPage(); await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.common.navigateToApp('dashboards'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('few panels'); await PageObjects.dashboard.waitForRenderComplete(); await validateQueryAndFilter(); @@ -138,7 +138,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.visualize.gotoVisualizationLandingPage(); await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.common.navigateToApp('dashboards'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('few panels'); const currentPanelCount = await PageObjects.dashboard.getPanelCount(); expect(currentPanelCount).to.eql(unsavedPanelCount); diff --git a/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts b/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts index 7ed4cba6c7089..f11ca330bf178 100644 --- a/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts +++ b/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts @@ -25,7 +25,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('few panels'); await PageObjects.dashboard.switchToEditMode(); @@ -86,7 +86,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { redirectToOrigin: false, }); await PageObjects.visualize.notLinkedToOriginatingApp(); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); it('loses originatingApp connection after first save when redirectToOrigin is false', async () => { diff --git a/test/functional/apps/dashboard/group1/edit_visualizations.js b/test/functional/apps/dashboard/group1/edit_visualizations.js index d4de54586b731..20234ca1f8055 100644 --- a/test/functional/apps/dashboard/group1/edit_visualizations.js +++ b/test/functional/apps/dashboard/group1/edit_visualizations.js @@ -50,7 +50,7 @@ export default function ({ getService, getPageObjects }) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); after(async () => { @@ -114,7 +114,7 @@ export default function ({ getService, getPageObjects }) { }); it('visualize app menu navigates to the visualize listing page if the last opened visualization was linked to dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); @@ -133,7 +133,7 @@ export default function ({ getService, getPageObjects }) { describe('by value', () => { it('save and return button returns to dashboard after editing visualization with changes saved', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await createMarkdownVis(); diff --git a/test/functional/apps/dashboard/group1/embeddable_data_grid.ts b/test/functional/apps/dashboard/group1/embeddable_data_grid.ts index 85277e63d6f6c..71da8fadea4af 100644 --- a/test/functional/apps/dashboard/group1/embeddable_data_grid.ts +++ b/test/functional/apps/dashboard/group1/embeddable_data_grid.ts @@ -31,7 +31,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', 'doc_table:legacy': false, }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/test/functional/apps/dashboard/group1/embeddable_rendering.ts b/test/functional/apps/dashboard/group1/embeddable_rendering.ts index d7addf89ac404..45408a8846c17 100644 --- a/test/functional/apps/dashboard/group1/embeddable_rendering.ts +++ b/test/functional/apps/dashboard/group1/embeddable_rendering.ts @@ -114,7 +114,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); await PageObjects.common.setTime({ from, to }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); await elasticChart.setNewChartUiDebugFlag(true); diff --git a/test/functional/apps/dashboard/group1/url_field_formatter.ts b/test/functional/apps/dashboard/group1/url_field_formatter.ts index 688499a36e34c..d2a4be0598a35 100644 --- a/test/functional/apps/dashboard/group1/url_field_formatter.ts +++ b/test/functional/apps/dashboard/group1/url_field_formatter.ts @@ -60,7 +60,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('applied on dashboard', async () => { - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.loadSavedDashboard('dashboard with table'); await dashboard.waitForRenderComplete(); const fieldLink = await visChart.getFieldLinkInVisTable(`${fieldName}: Descending`); diff --git a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts index 1244e179f7f6a..da9660ac4f4cb 100644 --- a/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts +++ b/test/functional/apps/dashboard/group2/dashboard_filter_bar.ts @@ -47,7 +47,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); after(async () => { diff --git a/test/functional/apps/dashboard/group2/dashboard_filtering.ts b/test/functional/apps/dashboard/group2/dashboard_filtering.ts index 1fb70ef508c2b..24f276b831036 100644 --- a/test/functional/apps/dashboard/group2/dashboard_filtering.ts +++ b/test/functional/apps/dashboard/group2/dashboard_filtering.ts @@ -66,7 +66,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.gotoDashboardLandingPage(); }); diff --git a/test/functional/apps/dashboard/group2/full_screen_mode.ts b/test/functional/apps/dashboard/group2/full_screen_mode.ts index 53cb707961ea6..23be5e4b7afe6 100644 --- a/test/functional/apps/dashboard/group2/full_screen_mode.ts +++ b/test/functional/apps/dashboard/group2/full_screen_mode.ts @@ -27,7 +27,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('few panels'); }); diff --git a/test/functional/apps/dashboard/group2/panel_expand_toggle.ts b/test/functional/apps/dashboard/group2/panel_expand_toggle.ts index f33280ba7bb79..99d09a5f42e7e 100644 --- a/test/functional/apps/dashboard/group2/panel_expand_toggle.ts +++ b/test/functional/apps/dashboard/group2/panel_expand_toggle.ts @@ -25,7 +25,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('few panels'); }); diff --git a/test/functional/apps/dashboard/group3/copy_panel_to.ts b/test/functional/apps/dashboard/group3/copy_panel_to.ts index 1f40f780a5398..81c5406426127 100644 --- a/test/functional/apps/dashboard/group3/copy_panel_to.ts +++ b/test/functional/apps/dashboard/group3/copy_panel_to.ts @@ -46,7 +46,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard(fewPanelsTitle); await PageObjects.dashboard.waitForRenderComplete(); diff --git a/test/functional/apps/dashboard/group4/dashboard_empty.ts b/test/functional/apps/dashboard/group4/dashboard_empty.ts index 02437b0685694..03a9d965d589b 100644 --- a/test/functional/apps/dashboard/group4/dashboard_empty.ts +++ b/test/functional/apps/dashboard/group4/dashboard_empty.ts @@ -34,7 +34,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); log.debug('load kibana with no data'); await kibanaServer.importExport.unload(kbnDirectory); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); after(async () => { @@ -54,7 +54,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); // create the new data view from the dashboards/create route in order to test that the dashboard is loaded properly as soon as the data view is created... - await PageObjects.common.navigateToApp('dashboard', { hash: '/create' }); + await PageObjects.common.navigateToApp('dashboards', { hash: '/create' }); const button = await testSubjects.find('createDataViewButton'); button.click(); diff --git a/test/functional/apps/dashboard/group4/dashboard_time.ts b/test/functional/apps/dashboard/group4/dashboard_time.ts index e1dbefa63ac74..2b35c5e78f331 100644 --- a/test/functional/apps/dashboard/group4/dashboard_time.ts +++ b/test/functional/apps/dashboard/group4/dashboard_time.ts @@ -24,7 +24,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after(async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); describe('dashboard without stored timed', () => { diff --git a/test/functional/apps/dashboard/group5/dashboard_back_button.ts b/test/functional/apps/dashboard/group5/dashboard_back_button.ts index 1fd9614d2421a..c8fbf1c6da411 100644 --- a/test/functional/apps/dashboard/group5/dashboard_back_button.ts +++ b/test/functional/apps/dashboard/group5/dashboard_back_button.ts @@ -25,7 +25,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); }); diff --git a/test/functional/apps/dashboard/group5/dashboard_error_handling.ts b/test/functional/apps/dashboard/group5/dashboard_error_handling.ts index a3265fdcc7f9d..ab8e8ac76f85b 100644 --- a/test/functional/apps/dashboard/group5/dashboard_error_handling.ts +++ b/test/functional/apps/dashboard/group5/dashboard_error_handling.ts @@ -33,7 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'test/functional/fixtures/kbn_archiver/dashboard_error_cases.json' ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); after(async () => { diff --git a/test/functional/apps/dashboard/group5/dashboard_query_bar.ts b/test/functional/apps/dashboard/group5/dashboard_query_bar.ts index 010aec9607816..a3bfcea2eaa2a 100644 --- a/test/functional/apps/dashboard/group5/dashboard_query_bar.ts +++ b/test/functional/apps/dashboard/group5/dashboard_query_bar.ts @@ -29,7 +29,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('dashboard with filter'); }); diff --git a/test/functional/apps/dashboard/group5/dashboard_settings.ts b/test/functional/apps/dashboard/group5/dashboard_settings.ts index bbfb867cdf176..ae0e727814eef 100644 --- a/test/functional/apps/dashboard/group5/dashboard_settings.ts +++ b/test/functional/apps/dashboard/group5/dashboard_settings.ts @@ -28,7 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('few panels'); await PageObjects.dashboard.switchToEditMode(); diff --git a/test/functional/apps/dashboard/group5/data_shared_attributes.ts b/test/functional/apps/dashboard/group5/data_shared_attributes.ts index 71d8a16b2f7d8..3202d418bd512 100644 --- a/test/functional/apps/dashboard/group5/data_shared_attributes.ts +++ b/test/functional/apps/dashboard/group5/data_shared_attributes.ts @@ -30,7 +30,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('dashboard with everything'); await PageObjects.dashboard.waitForRenderComplete(); diff --git a/test/functional/apps/dashboard/group5/embed_mode.ts b/test/functional/apps/dashboard/group5/embed_mode.ts index 16934fc9101a8..3c2cfbae77a9f 100644 --- a/test/functional/apps/dashboard/group5/embed_mode.ts +++ b/test/functional/apps/dashboard/group5/embed_mode.ts @@ -49,7 +49,7 @@ export default function ({ await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('dashboard with everything'); diff --git a/test/functional/apps/dashboard/group5/empty_dashboard.ts b/test/functional/apps/dashboard/group5/empty_dashboard.ts index 49fa50c075427..6939833a80086 100644 --- a/test/functional/apps/dashboard/group5/empty_dashboard.ts +++ b/test/functional/apps/dashboard/group5/empty_dashboard.ts @@ -27,7 +27,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); }); diff --git a/test/functional/apps/dashboard/group5/legacy_urls.ts b/test/functional/apps/dashboard/group5/legacy_urls.ts index 54834bf8969b7..03dabfe87ba2f 100644 --- a/test/functional/apps/dashboard/group5/legacy_urls.ts +++ b/test/functional/apps/dashboard/group5/legacy_urls.ts @@ -38,7 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'test/functional/fixtures/kbn_archiver/dashboard/current/kibana' ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.addVisualization('Rendering-Test:-animal-sounds-pie'); await PageObjects.dashboard.saveDashboard('legacyTest', { waitDialogIsClosed: true }); @@ -109,7 +109,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('resolves markdown link from dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.addVisualization('legacy url markdown'); (await find.byLinkText('abc')).click(); diff --git a/test/functional/apps/dashboard/group5/saved_search_embeddable.ts b/test/functional/apps/dashboard/group5/saved_search_embeddable.ts index c409f3d802276..f20172d10ed5c 100644 --- a/test/functional/apps/dashboard/group5/saved_search_embeddable.ts +++ b/test/functional/apps/dashboard/group5/saved_search_embeddable.ts @@ -32,7 +32,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); await PageObjects.common.setTime({ from, to }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/test/functional/apps/dashboard/group5/share.ts b/test/functional/apps/dashboard/group5/share.ts index a6d9289313e62..45bb5cd80c508 100644 --- a/test/functional/apps/dashboard/group5/share.ts +++ b/test/functional/apps/dashboard/group5/share.ts @@ -109,7 +109,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const from = 'Sep 19, 2017 @ 06:31:44.000'; const to = 'Sep 23, 2018 @ 18:31:44.000'; await PageObjects.common.setTime({ from, to }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('few panels'); await PageObjects.dashboard.switchToEditMode(); diff --git a/test/functional/apps/dashboard/group6/dashboard_grid.ts b/test/functional/apps/dashboard/group6/dashboard_grid.ts index 90e2187e19eb4..c48a2973acc46 100644 --- a/test/functional/apps/dashboard/group6/dashboard_grid.ts +++ b/test/functional/apps/dashboard/group6/dashboard_grid.ts @@ -25,7 +25,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('few panels'); await PageObjects.dashboard.switchToEditMode(); diff --git a/test/functional/apps/dashboard/group6/dashboard_saved_query.ts b/test/functional/apps/dashboard/group6/dashboard_saved_query.ts index 1dad54234e8a3..5b00fe2caa01b 100644 --- a/test/functional/apps/dashboard/group6/dashboard_saved_query.ts +++ b/test/functional/apps/dashboard/group6/dashboard_saved_query.ts @@ -27,7 +27,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); after(async () => { diff --git a/test/functional/apps/dashboard/group6/dashboard_snapshots.ts b/test/functional/apps/dashboard/group6/dashboard_snapshots.ts index 99f7a7fe2654a..401c1fa649006 100644 --- a/test/functional/apps/dashboard/group6/dashboard_snapshots.ts +++ b/test/functional/apps/dashboard/group6/dashboard_snapshots.ts @@ -43,7 +43,7 @@ export default function ({ await browser.setScreenshotSize(1000, 500); // adding this navigate adds the timestamp hash to the url which invalidates previous // session. If we don't do this, the colors on the visualizations are different and the screenshots won't match. - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); after(async function () { diff --git a/test/functional/apps/dashboard/group6/embeddable_library.ts b/test/functional/apps/dashboard/group6/embeddable_library.ts index 472a2a890c978..55e7ae7cee13a 100644 --- a/test/functional/apps/dashboard/group6/embeddable_library.ts +++ b/test/functional/apps/dashboard/group6/embeddable_library.ts @@ -28,7 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); }); diff --git a/test/functional/apps/dashboard/group6/view_edit.ts b/test/functional/apps/dashboard/group6/view_edit.ts index dfd62eeaa6cb3..a2ef56700357f 100644 --- a/test/functional/apps/dashboard/group6/view_edit.ts +++ b/test/functional/apps/dashboard/group6/view_edit.ts @@ -29,7 +29,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); }); diff --git a/test/functional/apps/dashboard_elements/controls/common/control_group_chaining.ts b/test/functional/apps/dashboard_elements/controls/common/control_group_chaining.ts index 55d4e160a2e9c..7696b6a6f4762 100644 --- a/test/functional/apps/dashboard_elements/controls/common/control_group_chaining.ts +++ b/test/functional/apps/dashboard_elements/controls/common/control_group_chaining.ts @@ -55,7 +55,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); /* then, create our testing dashboard */ - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.gotoDashboardLandingPage(); await dashboard.clickNewDashboard(); await timePicker.setDefaultDataRange(); diff --git a/test/functional/apps/dashboard_elements/controls/common/control_group_settings.ts b/test/functional/apps/dashboard_elements/controls/common/control_group_settings.ts index e07d335236f79..aa3ae89015c5e 100644 --- a/test/functional/apps/dashboard_elements/controls/common/control_group_settings.ts +++ b/test/functional/apps/dashboard_elements/controls/common/control_group_settings.ts @@ -14,15 +14,11 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const find = getService('find'); - const { dashboardControls, common, dashboard } = getPageObjects([ - 'dashboardControls', - 'dashboard', - 'common', - ]); + const { dashboardControls, dashboard } = getPageObjects(['dashboardControls', 'dashboard']); describe('Dashboard control group settings', () => { before(async () => { - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.gotoDashboardLandingPage(); await dashboard.clickNewDashboard(); await dashboard.saveDashboard('Test Control Group Settings'); diff --git a/test/functional/apps/dashboard_elements/controls/common/index.ts b/test/functional/apps/dashboard_elements/controls/common/index.ts index 99bd616de4607..8a9a7b8a54834 100644 --- a/test/functional/apps/dashboard_elements/controls/common/index.ts +++ b/test/functional/apps/dashboard_elements/controls/common/index.ts @@ -13,11 +13,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid const kibanaServer = getService('kibanaServer'); const security = getService('security'); - const { dashboardControls, common, dashboard } = getPageObjects([ - 'dashboardControls', - 'dashboard', - 'common', - ]); + const { dashboardControls, dashboard } = getPageObjects(['dashboardControls', 'dashboard']); async function setup() { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/dashboard/current/data'); @@ -31,9 +27,9 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid }); // enable the controls lab and navigate to the dashboard listing page to start - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboardControls.enableControlsLab(); - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.preserveCrossAppState(); } diff --git a/test/functional/apps/dashboard_elements/controls/common/range_slider.ts b/test/functional/apps/dashboard_elements/controls/common/range_slider.ts index 21bdb4f897603..b97acde63f40b 100644 --- a/test/functional/apps/dashboard_elements/controls/common/range_slider.ts +++ b/test/functional/apps/dashboard_elements/controls/common/range_slider.ts @@ -49,9 +49,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { from: 'Oct 22, 2018 @ 00:00:00.000', to: 'Dec 3, 2018 @ 00:00:00.000', }); - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboardControls.enableControlsLab(); - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.preserveCrossAppState(); await dashboard.gotoDashboardLandingPage(); await dashboard.clickNewDashboard(); diff --git a/test/functional/apps/dashboard_elements/controls/common/replace_controls.ts b/test/functional/apps/dashboard_elements/controls/common/replace_controls.ts index dbc8682caf63e..5c065f7f000f5 100644 --- a/test/functional/apps/dashboard_elements/controls/common/replace_controls.ts +++ b/test/functional/apps/dashboard_elements/controls/common/replace_controls.ts @@ -50,7 +50,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { let controlId: string; before(async () => { - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader', 'animals']); await dashboard.gotoDashboardLandingPage(); await dashboard.clickNewDashboard(); diff --git a/test/functional/apps/dashboard_elements/controls/common/time_slider.ts b/test/functional/apps/dashboard_elements/controls/common/time_slider.ts index 7e266376f8e74..520ef6560735f 100644 --- a/test/functional/apps/dashboard_elements/controls/common/time_slider.ts +++ b/test/functional/apps/dashboard_elements/controls/common/time_slider.ts @@ -17,12 +17,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); - const { dashboardControls, discover, timePicker, common, dashboard } = getPageObjects([ + const { dashboardControls, discover, timePicker, dashboard } = getPageObjects([ 'dashboardControls', 'discover', 'timePicker', 'dashboard', - 'common', ]); describe('Time Slider Control', async () => { @@ -55,7 +54,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('create, edit, and delete', async () => { before(async () => { - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.preserveCrossAppState(); await dashboard.gotoDashboardLandingPage(); await dashboard.clickNewDashboard(); @@ -132,7 +131,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('panel interactions', async () => { describe('saved search', async () => { before(async () => { - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.loadSavedDashboard('timeslider and saved search'); await dashboard.waitForRenderComplete(); }); diff --git a/test/functional/apps/dashboard_elements/controls/options_list/index.ts b/test/functional/apps/dashboard_elements/controls/options_list/index.ts index 2e1d803349936..966dbd91b7705 100644 --- a/test/functional/apps/dashboard_elements/controls/options_list/index.ts +++ b/test/functional/apps/dashboard_elements/controls/options_list/index.ts @@ -16,7 +16,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid const kibanaServer = getService('kibanaServer'); const security = getService('security'); - const { timePicker, dashboard, common } = getPageObjects(['timePicker', 'dashboard', 'common']); + const { timePicker, dashboard } = getPageObjects(['timePicker', 'dashboard']); const setup = async () => { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/dashboard/current/data'); @@ -29,7 +29,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.gotoDashboardLandingPage(); await dashboard.clickNewDashboard(); await timePicker.setDefaultDataRange(); diff --git a/test/functional/apps/dashboard_elements/controls/options_list/options_list_allow_expensive_queries_off.ts b/test/functional/apps/dashboard_elements/controls/options_list/options_list_allow_expensive_queries_off.ts index 84af82f349713..91774aee02f2d 100644 --- a/test/functional/apps/dashboard_elements/controls/options_list/options_list_allow_expensive_queries_off.ts +++ b/test/functional/apps/dashboard_elements/controls/options_list/options_list_allow_expensive_queries_off.ts @@ -42,7 +42,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await setAllowExpensiveQueries(false); - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.clickNewDashboard(); await dashboard.ensureDashboardIsInEditMode(); await timePicker.setDefaultDataRange(); diff --git a/test/functional/apps/dashboard_elements/controls/options_list/options_list_dashboard_interaction.ts b/test/functional/apps/dashboard_elements/controls/options_list/options_list_dashboard_interaction.ts index fd506429ba54f..16d0b2cd5fc2d 100644 --- a/test/functional/apps/dashboard_elements/controls/options_list/options_list_dashboard_interaction.ts +++ b/test/functional/apps/dashboard_elements/controls/options_list/options_list_dashboard_interaction.ts @@ -39,7 +39,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { let controlId: string; const returnToDashboard = async () => { - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await header.waitUntilLoadingHasFinished(); await elasticChart.setNewChartUiDebugFlag(); await dashboard.loadSavedDashboard(OPTIONS_LIST_DASHBOARD_NAME); diff --git a/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts b/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts index caf229e8335bb..6fc586fb35bba 100644 --- a/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts +++ b/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts @@ -30,7 +30,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: '0bf35f60-3dc9-11e8-8660-4d65aa086b3c', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.switchToEditMode(); }); diff --git a/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts b/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts index 8961af57a4ad2..2fb99d9ebb43f 100644 --- a/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts +++ b/test/functional/apps/discover/embeddable/_saved_search_embeddable.ts @@ -44,7 +44,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/test/functional/apps/discover/group1/_discover_histogram.ts b/test/functional/apps/discover/group1/_discover_histogram.ts index db83f764ce6f5..6e30f75f90a10 100644 --- a/test/functional/apps/discover/group1/_discover_histogram.ts +++ b/test/functional/apps/discover/group1/_discover_histogram.ts @@ -15,7 +15,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const elasticChart = getService('elasticChart'); const kibanaServer = getService('kibanaServer'); const security = getService('security'); - const PageObjects = getPageObjects(['settings', 'common', 'discover', 'header', 'timePicker']); + const PageObjects = getPageObjects([ + 'timePicker', + 'dashboard', + 'settings', + 'discover', + 'common', + 'header', + ]); const defaultSettings = { defaultIndex: 'long-window-logstash-*', 'dateFormat:tz': 'Europe/Berlin', @@ -253,7 +260,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); // go to dashboard - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.header.waitUntilLoadingHasFinished(); // go to discover diff --git a/test/functional/apps/discover/group2/_adhoc_data_views.ts b/test/functional/apps/discover/group2/_adhoc_data_views.ts index 299efefc12fb8..04880c1cfbc72 100644 --- a/test/functional/apps/discover/group2/_adhoc_data_views.ts +++ b/test/functional/apps/discover/group2/_adhoc_data_views.ts @@ -170,7 +170,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.header.waitUntilLoadingHasFinished(); // open searches on dashboard - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/test/functional/apps/discover/group2/_chart_hidden.ts b/test/functional/apps/discover/group2/_chart_hidden.ts index 40f50a73ac4df..6bee290df896d 100644 --- a/test/functional/apps/discover/group2/_chart_hidden.ts +++ b/test/functional/apps/discover/group2/_chart_hidden.ts @@ -14,7 +14,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const security = getService('security'); - const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker']); + const PageObjects = getPageObjects(['common', 'discover', 'header', 'timePicker', 'dashboard']); const defaultSettings = { defaultIndex: 'logstash-*', @@ -46,7 +46,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.toggleChartVisibility(); expect(await PageObjects.discover.isChartVisible()).to.be(false); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.common.navigateToApp('discover'); await PageObjects.timePicker.setDefaultAbsoluteRange(); await PageObjects.header.waitUntilLoadingHasFinished(); diff --git a/test/functional/apps/discover/group2/_data_grid_context.ts b/test/functional/apps/discover/group2/_data_grid_context.ts index 4d90acab5eebb..ae5030f226b82 100644 --- a/test/functional/apps/discover/group2/_data_grid_context.ts +++ b/test/functional/apps/discover/group2/_data_grid_context.ts @@ -102,7 +102,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.saveSearch('my search'); await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/test/functional/apps/discover/group2/_data_grid_doc_table.ts b/test/functional/apps/discover/group2/_data_grid_doc_table.ts index 5a60d6cf1f98c..5aedb67b6d5e7 100644 --- a/test/functional/apps/discover/group2/_data_grid_doc_table.ts +++ b/test/functional/apps/discover/group2/_data_grid_doc_table.ts @@ -120,7 +120,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.discover.saveSearch('expand-cell-search'); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.header.waitUntilLoadingHasFinished(); diff --git a/test/functional/apps/kibana_overview/_analytics.ts b/test/functional/apps/kibana_overview/_analytics.ts index 7b9d352e60e31..1c4897d5830ac 100644 --- a/test/functional/apps/kibana_overview/_analytics.ts +++ b/test/functional/apps/kibana_overview/_analytics.ts @@ -33,7 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); }); - const apps = ['dashboard', 'discover', 'canvas', 'maps', 'ml']; + const apps = ['dashboards', 'discover', 'canvas', 'maps', 'ml']; it('should display Analytics apps cards', async () => { const kbnOverviewAppsCards = await find.allByCssSelector('.kbnOverviewApps__item'); diff --git a/test/functional/apps/management/_kibana_settings.ts b/test/functional/apps/management/_kibana_settings.ts index d459643849fbc..875635cbd6a09 100644 --- a/test/functional/apps/management/_kibana_settings.ts +++ b/test/functional/apps/management/_kibana_settings.ts @@ -52,7 +52,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('when false, dashboard state is unhashed', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.timePicker.setDefaultAbsoluteRange(); const globalState = await getStateFromUrl(); @@ -73,7 +73,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('when true, dashboard state is hashed', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.timePicker.setDefaultAbsoluteRange(); const globalState = await getStateFromUrl(); diff --git a/test/functional/apps/visualize/group1/_data_table_notimeindex_filters.ts b/test/functional/apps/visualize/group1/_data_table_notimeindex_filters.ts index d62bdd86ecf9b..50f855056c6cd 100644 --- a/test/functional/apps/visualize/group1/_data_table_notimeindex_filters.ts +++ b/test/functional/apps/visualize/group1/_data_table_notimeindex_filters.ts @@ -64,7 +64,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // test to cover bug #54548 - add this visualization to a dashboard and filter it('should add to dashboard and allow filtering', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.addVisualization(vizName1); diff --git a/test/functional/apps/visualize/group3/_add_to_dashboard.ts b/test/functional/apps/visualize/group3/_add_to_dashboard.ts index 896826c2caa07..ad14c89b1e830 100644 --- a/test/functional/apps/visualize/group3/_add_to_dashboard.ts +++ b/test/functional/apps/visualize/group3/_add_to_dashboard.ts @@ -158,7 +158,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('adding a new metric to an existing dashboard by value', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.addVisualizations(['Visualization AreaChart']); @@ -188,7 +188,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('adding a new metric to an existing dashboard by reference', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.addVisualizations(['Visualization AreaChart']); @@ -220,7 +220,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('adding a existing metric to an existing dashboard by value', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.addVisualizations(['Visualization AreaChart']); @@ -265,7 +265,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('adding a existing metric to an existing dashboard by reference', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.addVisualizations(['Visualization AreaChart']); diff --git a/test/functional/apps/visualize/group5/_tsvb_time_series.ts b/test/functional/apps/visualize/group5/_tsvb_time_series.ts index eec30c52018a7..dbddadbe4a746 100644 --- a/test/functional/apps/visualize/group5/_tsvb_time_series.ts +++ b/test/functional/apps/visualize/group5/_tsvb_time_series.ts @@ -195,7 +195,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const cleanup = async () => { const discardDashboardPromptButton = 'discardDashboardPromptButton'; - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); if (await testSubjects.exists(discardDashboardPromptButton)) { await dashboard.clickUnsavedChangesDiscard(discardDashboardPromptButton, true); } diff --git a/test/functional/page_objects/common_page.ts b/test/functional/page_objects/common_page.ts index 1424d952653cd..4218d19712aa0 100644 --- a/test/functional/page_objects/common_page.ts +++ b/test/functional/page_objects/common_page.ts @@ -299,7 +299,7 @@ export class CommonPageObject extends FtrService { const navSuccessful = currentUrl .replace(':80/', '/') .replace(':443/', '/') - .startsWith(appUrl); + .startsWith(appUrl.replace(':80/', '/').replace(':443/', '/')); if (!navSuccessful) { const msg = `App failed to load: ${appName} in ${this.defaultFindTimeout}ms appUrl=${appUrl} currentUrl=${currentUrl}`; diff --git a/test/functional/page_objects/dashboard_page.ts b/test/functional/page_objects/dashboard_page.ts index 36da398b59d1f..6ff48c6b0cfbe 100644 --- a/test/functional/page_objects/dashboard_page.ts +++ b/test/functional/page_objects/dashboard_page.ts @@ -51,12 +51,18 @@ export class DashboardPageObject extends FtrService { ? 'test/functional/fixtures/kbn_archiver/ccs/dashboard/legacy/legacy.json' : 'test/functional/fixtures/kbn_archiver/dashboard/legacy/legacy.json'; + public readonly APP_ID = 'dashboards'; + async initTests({ kibanaIndex = this.kibanaIndex, defaultIndex = this.logstashIndex } = {}) { this.log.debug('load kibana index with visualizations and log data'); await this.kibanaServer.savedObjects.cleanStandardList(); await this.kibanaServer.importExport.load(kibanaIndex); await this.kibanaServer.uiSettings.replace({ defaultIndex }); - await this.common.navigateToApp('dashboard'); + await this.navigateToApp(); + } + + public async navigateToApp() { + await this.common.navigateToApp(this.APP_ID); } public async expectAppStateRemovedFromURL() { diff --git a/test/functional/page_objects/time_to_visualize_page.ts b/test/functional/page_objects/time_to_visualize_page.ts index 91864a7995779..280a02354424c 100644 --- a/test/functional/page_objects/time_to_visualize_page.ts +++ b/test/functional/page_objects/time_to_visualize_page.ts @@ -42,7 +42,7 @@ export class TimeToVisualizePageObject extends FtrService { } public async resetNewDashboard() { - await this.common.navigateToApp('dashboard'); + await this.dashboard.navigateToApp(); await this.dashboard.gotoDashboardLandingPage(); await this.dashboard.clickNewDashboard(false); } diff --git a/test/tsconfig.json b/test/tsconfig.json index 56d4f185930e7..d71c7f9c8ffb1 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -68,6 +68,7 @@ "@kbn/core-saved-objects-server", "@kbn/discover-plugin", "@kbn/core-http-common", - "@kbn/event-annotation-plugin" + "@kbn/event-annotation-plugin", + "@kbn/event-annotation-common" ] } diff --git a/tsconfig.base.json b/tsconfig.base.json index 918abf4453e65..3b3d315a1b15f 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1438,6 +1438,8 @@ "@kbn/stdio-dev-helpers/*": ["packages/kbn-stdio-dev-helpers/*"], "@kbn/storybook": ["packages/kbn-storybook"], "@kbn/storybook/*": ["packages/kbn-storybook/*"], + "@kbn/subscription-tracking": ["packages/kbn-subscription-tracking"], + "@kbn/subscription-tracking/*": ["packages/kbn-subscription-tracking/*"], "@kbn/synthetics-plugin": ["x-pack/plugins/synthetics"], "@kbn/synthetics-plugin/*": ["x-pack/plugins/synthetics/*"], "@kbn/task-manager-fixture-plugin": ["x-pack/test/alerting_api_integration/common/plugins/task_manager_fixture"], diff --git a/versions.json b/versions.json index 60225e16760f9..d9f23122bbb0f 100644 --- a/versions.json +++ b/versions.json @@ -8,7 +8,7 @@ "currentMinor": true }, { - "version": "8.10.1", + "version": "8.10.2", "branch": "8.10", "currentMajor": true, "previousMinor": true diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.test.tsx index ff96f8b66c92b..972d3d9099cd0 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.test.tsx @@ -23,7 +23,7 @@ describe('AssistantOverlay', () => { it('renders when isAssistantEnabled prop is true and keyboard shortcut is pressed', () => { const { getByTestId } = render( - + ); fireEvent.keyDown(document, { key: ';', ctrlKey: true }); @@ -34,7 +34,7 @@ describe('AssistantOverlay', () => { it('modal closes when close button is clicked', () => { const { getByLabelText, queryByTestId } = render( - + ); fireEvent.keyDown(document, { key: ';', ctrlKey: true }); @@ -47,7 +47,7 @@ describe('AssistantOverlay', () => { it('Assistant invoked from shortcut tracking happens on modal open only (not close)', () => { render( - + ); fireEvent.keyDown(document, { key: ';', ctrlKey: true }); @@ -63,7 +63,7 @@ describe('AssistantOverlay', () => { it('modal closes when shortcut is pressed and modal is already open', () => { const { queryByTestId } = render( - + ); fireEvent.keyDown(document, { key: ';', ctrlKey: true }); @@ -75,7 +75,7 @@ describe('AssistantOverlay', () => { it('modal does not open when incorrect shortcut is pressed', () => { const { queryByTestId } = render( - + ); fireEvent.keyDown(document, { key: 'a', ctrlKey: true }); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.tsx index 43635fba95df5..ac72fc27dd891 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/index.tsx @@ -22,15 +22,12 @@ const StyledEuiModal = styled(EuiModal)` min-width: 95vw; min-height: 25vh; `; -interface Props { - isAssistantEnabled: boolean; -} /** * Modal container for Elastic AI Assistant conversations, receiving the page contents as context, plus whatever * component currently has focus and any specific context it may provide through the SAssInterface. */ -export const AssistantOverlay = React.memo(({ isAssistantEnabled }) => { +export const AssistantOverlay = React.memo(() => { const [isModalVisible, setIsModalVisible] = useState(false); const [conversationId, setConversationId] = useState( WELCOME_CONVERSATION_TITLE @@ -103,11 +100,7 @@ export const AssistantOverlay = React.memo(({ isAssistantEnabled }) => { <> {isModalVisible && ( - + )} diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.test.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.test.tsx index fcd203ce0cd97..acb41a9575581 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.test.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.test.tsx @@ -22,7 +22,7 @@ import { WELCOME_CONVERSATION_TITLE } from './use_conversation/translations'; import { useLocalStorage } from 'react-use'; import { PromptEditor } from './prompt_editor'; import { QuickPrompts } from './quick_prompts/quick_prompts'; -import { TestProviders } from '../mock/test_providers/test_providers'; +import { mockAssistantAvailability, TestProviders } from '../mock/test_providers/test_providers'; jest.mock('../connectorland/use_load_connectors'); jest.mock('../connectorland/connector_setup'); @@ -46,10 +46,10 @@ const getInitialConversations = (): Record => ({ }, }); -const renderAssistant = (extraProps = {}) => +const renderAssistant = (extraProps = {}, providerProps = {}) => render( - - + + ); @@ -110,9 +110,10 @@ describe('Assistant', () => { data: connectors, } as unknown as UseQueryResult); - const { getByLabelText } = render( - ({ + const { getByLabelText } = renderAssistant( + {}, + { + getInitialConversations: () => ({ [WELCOME_CONVERSATION_TITLE]: { id: WELCOME_CONVERSATION_TITLE, messages: [], @@ -124,10 +125,8 @@ describe('Assistant', () => { apiConfig: {}, excludeFromLastConversationStorage: true, }, - })} - > - - + }), + } ); expect(persistToLocalStorage).toHaveBeenCalled(); @@ -176,4 +175,16 @@ describe('Assistant', () => { expect(persistToLocalStorage).toHaveBeenLastCalledWith(WELCOME_CONVERSATION_TITLE); }); }); + + describe('when not authorized', () => { + it('should be disabled', async () => { + const { queryByTestId } = renderAssistant( + {}, + { + assistantAvailability: { ...mockAssistantAvailability, isAssistantEnabled: false }, + } + ); + expect(queryByTestId('prompt-textarea')).toHaveProperty('disabled'); + }); + }); }); diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx index 4ea1ed240870d..d119526a198c5 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx @@ -51,7 +51,6 @@ import { ConnectorMissingCallout } from '../connectorland/connector_missing_call export interface Props { conversationId?: string; - isAssistantEnabled: boolean; promptContextId?: string; shouldRefocusPrompt?: boolean; showTitle?: boolean; @@ -64,7 +63,6 @@ export interface Props { */ const AssistantComponent: React.FC = ({ conversationId, - isAssistantEnabled, promptContextId = '', shouldRefocusPrompt = false, showTitle = true, @@ -73,6 +71,7 @@ const AssistantComponent: React.FC = ({ const { assistantTelemetry, augmentMessageCodeBlocks, + assistantAvailability: { isAssistantEnabled }, conversations, defaultAllow, defaultAllowReplacement, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx b/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx index 484dd316cc0ac..057db39f66ba2 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/mock/test_providers/test_providers.tsx @@ -29,7 +29,7 @@ window.HTMLElement.prototype.scrollIntoView = jest.fn(); const mockGetInitialConversations = () => ({}); -const mockAssistantAvailability: AssistantAvailability = { +export const mockAssistantAvailability: AssistantAvailability = { hasAssistantPrivilege: false, hasConnectorsAllPrivilege: true, hasConnectorsReadPrivilege: true, diff --git a/x-pack/packages/kbn-elastic-assistant/index.ts b/x-pack/packages/kbn-elastic-assistant/index.ts index 1353db4908006..8ec14b143ba13 100644 --- a/x-pack/packages/kbn-elastic-assistant/index.ts +++ b/x-pack/packages/kbn-elastic-assistant/index.ts @@ -11,7 +11,7 @@ // happens in the root of your app. Optionally provide a custom title for the assistant: /** provides context (from the app) to the assistant, and injects Kibana services, like `http` */ -export { AssistantProvider } from './impl/assistant_context'; +export { AssistantProvider, useAssistantContext } from './impl/assistant_context'; // Step 2: Add the `AssistantOverlay` component to your app. This component displays the assistant // overlay in a modal, bound to a shortcut key: diff --git a/x-pack/packages/security-solution/navigation/src/navigation.test.ts b/x-pack/packages/security-solution/navigation/src/navigation.test.ts index 2875f79956332..ab9ab891aaef8 100644 --- a/x-pack/packages/security-solution/navigation/src/navigation.test.ts +++ b/x-pack/packages/security-solution/navigation/src/navigation.test.ts @@ -7,6 +7,7 @@ import { useGetAppUrl, useNavigateTo } from './navigation'; import { mockGetUrlForApp, mockNavigateToApp, mockNavigateToUrl } from '../mocks/context'; import { renderHook } from '@testing-library/react-hooks'; +import { fireEvent } from '@testing-library/dom'; jest.mock('./context'); @@ -61,5 +62,22 @@ describe('yourFile', () => { expect(mockNavigateToApp).not.toHaveBeenCalled(); expect(mockNavigateToUrl).toHaveBeenCalledWith(URL); }); + + it('navigates restoring the scroll', async () => { + const { result } = renderHook(useNavigateTo); + const { navigateTo } = result.current; + + const currentScrollY = 100; + window.scrollY = currentScrollY; + window.scrollTo = jest.fn(); + + navigateTo({ url: URL, restoreScroll: true }); + + // Simulates the browser scroll reset event + fireEvent(window, new Event('scroll')); + + expect(window.scrollTo).toHaveBeenCalledTimes(1); + expect(window.scrollTo).toHaveBeenCalledWith(0, currentScrollY); + }); }); }); diff --git a/x-pack/packages/security-solution/navigation/src/navigation.ts b/x-pack/packages/security-solution/navigation/src/navigation.ts index bb8e6ae5a6e4e..7474baf1fd3ba 100644 --- a/x-pack/packages/security-solution/navigation/src/navigation.ts +++ b/x-pack/packages/security-solution/navigation/src/navigation.ts @@ -34,6 +34,11 @@ export type NavigateTo = ( param: { url?: string; appId?: string; + /** + * Browsers will reset the scroll position to 0 when navigating to a new page. + * This option will prevent that from happening. + */ + restoreScroll?: boolean; } & NavigateToAppOptions ) => void; /** @@ -44,7 +49,10 @@ export const useNavigateTo = () => { const { navigateToApp, navigateToUrl } = useNavigationContext().application; const navigateTo = useCallback( - ({ url, appId = SECURITY_UI_APP_ID, ...options }) => { + ({ url, appId = SECURITY_UI_APP_ID, restoreScroll, ...options }) => { + if (restoreScroll) { + addScrollRestoration(); + } if (url) { navigateToUrl(url); } else { @@ -56,6 +64,16 @@ export const useNavigateTo = () => { return { navigateTo }; }; +/** + * Expects the browser scroll reset event to be fired after the navigation, + * then restores the previous scroll position. + */ +const addScrollRestoration = () => { + const scrollY = window.scrollY; + const handler = () => window.scrollTo(0, scrollY); + window.addEventListener('scroll', handler, { once: true }); +}; + /** * Returns `navigateTo` and `getAppUrl` navigation hooks */ diff --git a/x-pack/plugins/apm/dev_docs/testing.md b/x-pack/plugins/apm/dev_docs/testing.md index 533ad5f474fd8..362ae0027d6d4 100644 --- a/x-pack/plugins/apm/dev_docs/testing.md +++ b/x-pack/plugins/apm/dev_docs/testing.md @@ -31,7 +31,7 @@ open target/coverage/jest/index.html The API tests are located in [`x-pack/test/apm_api_integration/`](/x-pack/test/apm_api_integration/). -### Start server and run test in a single process +#### Start server and run test (single process) ``` node x-pack/plugins/apm/scripts/test/api [--trial/--basic] [--help] @@ -40,7 +40,7 @@ node x-pack/plugins/apm/scripts/test/api [--trial/--basic] [--help] The above command will start an ES instance on http://localhost:9220, a Kibana instance on http://localhost:5620 and run the api tests. Once the tests finish, the instances will be terminated. -### Start server and run test in separate processes +#### Start server and run test (separate processes) ```sh @@ -61,7 +61,7 @@ node x-pack/plugins/apm/scripts/test/api --runner --basic --updateSnapshots (The test server needs to be running) -**API Test tips** +#### API Test tips - For data generation in API tests have a look at the [kbn-apm-synthtrace](../../../../packages/kbn-apm-synthtrace/README.md) package - For debugging access Elasticsearch on http://localhost:9220 and Kibana on http://localhost:5620 (`elastic` / `changeme`) @@ -85,19 +85,19 @@ Tests run on buildkite PR pipeline are parallelized (4 parallel jobs) and are or [Test tips and best practices](../ftr_e2e/README.md) -### Start test server +#### Start test server ``` node x-pack/plugins/apm/scripts/test/e2e --server ``` -### Run tests +#### Run tests ``` node x-pack/plugins/apm/scripts/test/e2e --runner --open ``` -### Rum tests multiple times to check for flakiness +### Run tests multiple times to check for flakiness ``` node x-pack/plugins/apm/scripts/test/e2e --runner --times [--spec ] @@ -111,17 +111,11 @@ Accessibility tests are added on the e2e with `checkA11y()`, they will run toget ## Functional tests (Security and Correlations tests) -TODO: We could try moving this tests to the new e2e tests located at `x-pack/plugins/apm/ftr_e2e`. - -**Start server** - -``` +```sh +# Start server node scripts/functional_tests_server --config x-pack/test/functional/apps/apm/config.ts -``` - -**Run tests** -``` +# Run tests node scripts/functional_test_runner --config x-pack/test/functional/apps/apm/config.ts --grep='APM specs' ``` @@ -129,6 +123,22 @@ APM tests are located in `x-pack/test/functional/apps/apm`. For debugging access Elasticsearch on http://localhost:9220` (elastic/changeme) diff --git a/x-pack/plugins/apm/scripts/test/README.md b/x-pack/plugins/apm/scripts/test/README.md +## Serverless API tests + +#### Start server and run tests (single process) +``` +node scripts/functional_tests.js --config x-pack/test_serverless/api_integration/test_suites/observability/config.ts +``` + +#### Start server and run tests (separate processes) +```sh +# Start server +node scripts/functional_tests_server.js --config x-pack/test_serverless/api_integration/test_suites/observability/config.ts + +# Run tests +node scripts/functional_test_runner --config=x-pack/test_serverless/api_integration/test_suites/observability/config.ts +``` + ## Storybook ### Start diff --git a/x-pack/plugins/apm/public/components/app/mobile/service_overview/stats/location_stats.tsx b/x-pack/plugins/apm/public/components/app/mobile/service_overview/stats/location_stats.tsx index 731205c4715a9..22e95e54817dd 100644 --- a/x-pack/plugins/apm/public/components/app/mobile/service_overview/stats/location_stats.tsx +++ b/x-pack/plugins/apm/public/components/app/mobile/service_overview/stats/location_stats.tsx @@ -133,17 +133,18 @@ export function MobileLocationStats({ trendShape: MetricTrendShape.Area, }, { - color: euiTheme.eui.euiColorDisabled, + color: euiTheme.eui.euiColorLightestShade, title: i18n.translate('xpack.apm.mobile.location.metrics.crashes', { defaultMessage: 'Most crashes', }), - subtitle: i18n.translate('xpack.apm.mobile.coming.soon', { - defaultMessage: 'Coming Soon', + extra: getComparisonValueFormatter({ + currentPeriodValue: currentPeriod?.mostCrashes.value, + previousPeriodValue: previousPeriod?.mostCrashes.value, }), icon: getIcon('bug'), - value: NOT_AVAILABLE_LABEL, + value: currentPeriod?.mostCrashes.location ?? NOT_AVAILABLE_LABEL, valueFormatter: (value) => `${value}`, - trend: [], + trend: currentPeriod?.mostCrashes.timeseries, trendShape: MetricTrendShape.Area, }, { diff --git a/x-pack/plugins/apm/public/components/app/mobile/service_overview/stats/stats.tsx b/x-pack/plugins/apm/public/components/app/mobile/service_overview/stats/stats.tsx index 707b759631d89..3e8d42d5a2a3c 100644 --- a/x-pack/plugins/apm/public/components/app/mobile/service_overview/stats/stats.tsx +++ b/x-pack/plugins/apm/public/components/app/mobile/service_overview/stats/stats.tsx @@ -14,6 +14,7 @@ import { } from '@elastic/eui'; import React, { useCallback } from 'react'; import { useTheme } from '@kbn/observability-shared-plugin/public'; +import { NOT_AVAILABLE_LABEL } from '../../../../../../common/i18n'; import { useAnyOfApmParams } from '../../../../../hooks/use_apm_params'; import { useFetcher, @@ -104,17 +105,16 @@ export function MobileStats({ const metrics: MetricDatum[] = [ { - color: euiTheme.eui.euiColorDisabled, + color: euiTheme.eui.euiColorLightestShade, title: i18n.translate('xpack.apm.mobile.metrics.crash.rate', { - defaultMessage: 'Crash Rate (Crash per minute)', - }), - subtitle: i18n.translate('xpack.apm.mobile.coming.soon', { - defaultMessage: 'Coming Soon', + defaultMessage: 'Crash rate', }), icon: getIcon('bug'), - value: 'N/A', - valueFormatter: (value: number) => valueFormatter(value), - trend: [], + value: data?.currentPeriod?.crashRate?.value ?? NOT_AVAILABLE_LABEL, + valueFormatter: (value: number) => + valueFormatter(Number((value * 100).toPrecision(2)), '%'), + trend: data?.currentPeriod?.crashRate?.timeseries, + extra: getComparisonValueFormatter(data?.previousPeriod.crashRate?.value), trendShape: MetricTrendShape.Area, }, { @@ -137,7 +137,7 @@ export function MobileStats({ defaultMessage: 'Sessions', }), icon: getIcon('timeslider'), - value: data?.currentPeriod?.sessions?.value ?? NaN, + value: data?.currentPeriod?.sessions?.value ?? NOT_AVAILABLE_LABEL, valueFormatter: (value: number) => valueFormatter(value), trend: data?.currentPeriod?.sessions?.timeseries, extra: getComparisonValueFormatter(data?.previousPeriod.sessions?.value), @@ -149,7 +149,7 @@ export function MobileStats({ defaultMessage: 'HTTP requests', }), icon: getIcon('kubernetesPod'), - value: data?.currentPeriod?.requests?.value ?? NaN, + value: data?.currentPeriod?.requests?.value ?? NOT_AVAILABLE_LABEL, extra: getComparisonValueFormatter(data?.previousPeriod.requests?.value), valueFormatter: (value: number) => valueFormatter(value), trend: data?.currentPeriod?.requests?.timeseries, diff --git a/x-pack/plugins/apm/server/routes/mobile/get_mobile_crash_rate.ts b/x-pack/plugins/apm/server/routes/mobile/get_mobile_crash_rate.ts new file mode 100644 index 0000000000000..bf498bf704607 --- /dev/null +++ b/x-pack/plugins/apm/server/routes/mobile/get_mobile_crash_rate.ts @@ -0,0 +1,165 @@ +/* + * 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 { ProcessorEvent } from '@kbn/observability-plugin/common'; +import { + kqlQuery, + rangeQuery, + termQuery, +} from '@kbn/observability-plugin/server'; +import { Coordinate } from '../../../typings/timeseries'; +import { Maybe } from '../../../typings/common'; +import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; +import { getBucketSize } from '../../../common/utils/get_bucket_size'; +import { + ERROR_TYPE, + ERROR_ID, + SERVICE_NAME, +} from '../../../common/es_fields/apm'; +import { environmentQuery } from '../../../common/utils/environment_query'; +import { getOffsetInMs } from '../../../common/utils/get_offset_in_ms'; +import { offsetPreviousPeriodCoordinates } from '../../../common/utils/offset_previous_period_coordinate'; + +export interface CrashRateTimeseries { + currentPeriod: { timeseries: Coordinate[]; value: Maybe }; + previousPeriod: { timeseries: Coordinate[]; value: Maybe }; +} + +interface Props { + apmEventClient: APMEventClient; + serviceName: string; + transactionName?: string; + environment: string; + start: number; + end: number; + kuery: string; + offset?: string; +} + +async function getMobileCrashTimeseries({ + apmEventClient, + serviceName, + transactionName, + environment, + start, + end, + kuery, + offset, +}: Props) { + const { startWithOffset, endWithOffset } = getOffsetInMs({ + start, + end, + offset, + }); + + const { intervalString } = getBucketSize({ + start: startWithOffset, + end: endWithOffset, + minBucketSize: 60, + }); + + const aggs = { + crashes: { + cardinality: { field: ERROR_ID }, + }, + }; + + const response = await apmEventClient.search('get_mobile_crash_rate', { + apm: { + events: [ProcessorEvent.error], + }, + body: { + track_total_hits: false, + size: 0, + query: { + bool: { + filter: [ + ...termQuery(ERROR_TYPE, 'crash'), + ...termQuery(SERVICE_NAME, serviceName), + ...rangeQuery(startWithOffset, endWithOffset), + ...environmentQuery(environment), + ...kqlQuery(kuery), + ], + }, + }, + aggs: { + timeseries: { + date_histogram: { + field: '@timestamp', + fixed_interval: intervalString, + min_doc_count: 0, + extended_bounds: { min: startWithOffset, max: endWithOffset }, + }, + aggs, + }, + ...aggs, + }, + }, + }); + + const timeseries = + response?.aggregations?.timeseries.buckets.map((bucket) => { + return { + x: bucket.key, + y: bucket.crashes.value, + }; + }) ?? []; + + return { + timeseries, + value: response.aggregations?.crashes?.value, + }; +} + +export async function getMobileCrashRate({ + kuery, + apmEventClient, + serviceName, + transactionName, + environment, + start, + end, + offset, +}: Props): Promise { + const options = { + serviceName, + transactionName, + apmEventClient, + kuery, + environment, + }; + + const currentPeriodPromise = getMobileCrashTimeseries({ + ...options, + start, + end, + }); + + const previousPeriodPromise = offset + ? getMobileCrashTimeseries({ + ...options, + start, + end, + offset, + }) + : { timeseries: [], value: null }; + + const [currentPeriod, previousPeriod] = await Promise.all([ + currentPeriodPromise, + previousPeriodPromise, + ]); + return { + currentPeriod, + previousPeriod: { + timeseries: offsetPreviousPeriodCoordinates({ + currentPeriodTimeseries: currentPeriod.timeseries, + previousPeriodTimeseries: previousPeriod.timeseries, + }), + value: previousPeriod?.value, + }, + }; +} diff --git a/x-pack/plugins/apm/server/routes/mobile/get_mobile_crashes_by_location.ts b/x-pack/plugins/apm/server/routes/mobile/get_mobile_crashes_by_location.ts new file mode 100644 index 0000000000000..4117e6a220bd4 --- /dev/null +++ b/x-pack/plugins/apm/server/routes/mobile/get_mobile_crashes_by_location.ts @@ -0,0 +1,109 @@ +/* + * 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 { ProcessorEvent } from '@kbn/observability-plugin/common'; +import { + kqlQuery, + rangeQuery, + termQuery, +} from '@kbn/observability-plugin/server'; +import { SERVICE_NAME, ERROR_TYPE } from '../../../common/es_fields/apm'; +import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; +import { getOffsetInMs } from '../../../common/utils/get_offset_in_ms'; +import { getBucketSize } from '../../../common/utils/get_bucket_size'; +import { environmentQuery } from '../../../common/utils/environment_query'; + +interface Props { + kuery: string; + apmEventClient: APMEventClient; + serviceName: string; + environment: string; + start: number; + end: number; + locationField?: string; + offset?: string; +} + +export async function getCrashesByLocation({ + kuery, + apmEventClient, + serviceName, + environment, + start, + end, + locationField, + offset, +}: Props) { + const { startWithOffset, endWithOffset } = getOffsetInMs({ + start, + end, + offset, + }); + + const { intervalString } = getBucketSize({ + start: startWithOffset, + end: endWithOffset, + minBucketSize: 60, + }); + + const aggs = { + crashes: { + filter: { term: { [ERROR_TYPE]: 'crash' } }, + aggs: { + crashesByLocation: { + terms: { + field: locationField, + }, + }, + }, + }, + }; + const response = await apmEventClient.search('get_mobile_location_crashes', { + apm: { + events: [ProcessorEvent.error], + }, + body: { + track_total_hits: false, + size: 0, + query: { + bool: { + filter: [ + ...termQuery(SERVICE_NAME, serviceName), + ...rangeQuery(startWithOffset, endWithOffset), + ...environmentQuery(environment), + ...kqlQuery(kuery), + ], + }, + }, + aggs: { + timeseries: { + date_histogram: { + field: '@timestamp', + fixed_interval: intervalString, + min_doc_count: 0, + }, + aggs, + }, + ...aggs, + }, + }, + }); + return { + location: response.aggregations?.crashes?.crashesByLocation?.buckets[0] + ?.key as string, + value: + response.aggregations?.crashes?.crashesByLocation?.buckets[0] + ?.doc_count ?? 0, + timeseries: + response.aggregations?.timeseries?.buckets.map((bucket) => ({ + x: bucket.key, + y: + response.aggregations?.crashes?.crashesByLocation?.buckets[0] + ?.doc_count ?? 0, + })) ?? [], + }; +} diff --git a/x-pack/plugins/apm/server/routes/mobile/get_mobile_location_stats.ts b/x-pack/plugins/apm/server/routes/mobile/get_mobile_location_stats.ts index 6a43a9965a03f..ccc777e3cfe31 100644 --- a/x-pack/plugins/apm/server/routes/mobile/get_mobile_location_stats.ts +++ b/x-pack/plugins/apm/server/routes/mobile/get_mobile_location_stats.ts @@ -9,6 +9,7 @@ import { CLIENT_GEO_COUNTRY_NAME } from '../../../common/es_fields/apm'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; import { getSessionsByLocation } from './get_mobile_sessions_by_location'; import { getHttpRequestsByLocation } from './get_mobile_http_requests_by_location'; +import { getCrashesByLocation } from './get_mobile_crashes_by_location'; import { Maybe } from '../../../typings/common'; export type Timeseries = Array<{ x: number; y: number }>; @@ -24,6 +25,11 @@ interface LocationStats { value: Maybe; timeseries: Timeseries; }; + mostCrashes: { + location?: string; + value: Maybe; + timeseries: Timeseries; + }; } export interface MobileLocationStats { @@ -63,14 +69,16 @@ async function getMobileLocationStats({ offset, }; - const [mostSessions, mostRequests] = await Promise.all([ + const [mostSessions, mostRequests, mostCrashes] = await Promise.all([ getSessionsByLocation({ ...commonProps }), getHttpRequestsByLocation({ ...commonProps }), + getCrashesByLocation({ ...commonProps }), ]); return { mostSessions, mostRequests, + mostCrashes, }; } @@ -108,6 +116,7 @@ export async function getMobileLocationStatsPeriods({ : { mostSessions: { value: null, timeseries: [] }, mostRequests: { value: null, timeseries: [] }, + mostCrashes: { value: null, timeseries: [] }, }; const [currentPeriod, previousPeriod] = await Promise.all([ diff --git a/x-pack/plugins/apm/server/routes/mobile/get_mobile_stats.ts b/x-pack/plugins/apm/server/routes/mobile/get_mobile_stats.ts index 70d51360ff89d..071487298ab7a 100644 --- a/x-pack/plugins/apm/server/routes/mobile/get_mobile_stats.ts +++ b/x-pack/plugins/apm/server/routes/mobile/get_mobile_stats.ts @@ -9,6 +9,7 @@ import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_ev import { getOffsetInMs } from '../../../common/utils/get_offset_in_ms'; import { getMobileSessions } from './get_mobile_sessions'; import { getMobileHttpRequests } from './get_mobile_http_requests'; +import { getMobileCrashRate } from './get_mobile_crash_rate'; import { Maybe } from '../../../typings/common'; export interface Timeseries { @@ -18,6 +19,7 @@ export interface Timeseries { interface MobileStats { sessions: { timeseries: Timeseries[]; value: Maybe }; requests: { timeseries: Timeseries[]; value: Maybe }; + crashRate: { timeseries: Timeseries[]; value: Maybe }; } export interface MobilePeriodStats { @@ -60,9 +62,10 @@ async function getMobileStats({ offset, }; - const [sessions, httpRequests] = await Promise.all([ + const [sessions, httpRequests, crashes] = await Promise.all([ getMobileSessions({ ...commonProps }), getMobileHttpRequests({ ...commonProps }), + getMobileCrashRate({ ...commonProps }), ]); return { @@ -74,6 +77,18 @@ async function getMobileStats({ value: httpRequests.currentPeriod.value, timeseries: httpRequests.currentPeriod.timeseries as Timeseries[], }, + crashRate: { + value: sessions.currentPeriod.value + ? (crashes.currentPeriod.value ?? 0) / sessions.currentPeriod.value + : 0, + timeseries: crashes.currentPeriod.timeseries.map((bucket, i) => { + const sessionValue = sessions.currentPeriod.timeseries[i].y; + return { + x: bucket.x, + y: sessionValue ? (bucket.y ?? 0) / sessionValue : 0, + }; + }) as Timeseries[], + }, }; } @@ -107,6 +122,7 @@ export async function getMobileStatsPeriods({ : { sessions: { timeseries: [], value: null }, requests: { timeseries: [], value: null }, + crashRate: { timeseries: [], value: null }, }; const [currentPeriod, previousPeriod] = await Promise.all([ diff --git a/x-pack/plugins/cases/public/components/configure_cases/connectors_dropdown.test.tsx b/x-pack/plugins/cases/public/components/configure_cases/connectors_dropdown.test.tsx index d36ba676357cf..1747f7b397774 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/connectors_dropdown.test.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/connectors_dropdown.test.tsx @@ -15,6 +15,13 @@ import type { Props } from './connectors_dropdown'; import { ConnectorsDropdown } from './connectors_dropdown'; import { TestProviders } from '../../common/mock'; import { connectors } from './__mock__'; +import userEvent from '@testing-library/user-event'; +import { useApplicationCapabilities } from '../../common/lib/kibana'; + +const useApplicationCapabilitiesMock = useApplicationCapabilities as jest.Mocked< + typeof useApplicationCapabilities +>; +jest.mock('../../common/lib/kibana'); describe('ConnectorsDropdown', () => { let wrapper: ReactWrapper; @@ -295,4 +302,23 @@ describe('ConnectorsDropdown', () => { ); expect(tooltips[0]).toBeInTheDocument(); }); + + test('it should hide the "Add New Connector" button when the user lacks the capability to add a new connector', async () => { + const selectedConnector = 'none'; + useApplicationCapabilitiesMock().actions = { crud: false, read: true }; + render( + {}} + />, + { wrapper: ({ children }) => {children} } + ); + + userEvent.click(screen.getByTestId('dropdown-connectors')); + expect(screen.queryByTestId('dropdown-connector-add-connector')).not.toBeInTheDocument(); + }); }); diff --git a/x-pack/plugins/cases/public/components/configure_cases/connectors_dropdown.tsx b/x-pack/plugins/cases/public/components/configure_cases/connectors_dropdown.tsx index db4ea027a087f..d75b29d2ce858 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/connectors_dropdown.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/connectors_dropdown.tsx @@ -12,7 +12,7 @@ import styled from 'styled-components'; import { euiStyled } from '@kbn/kibana-react-plugin/common'; import type { ActionConnector } from '../../containers/configure/types'; import * as i18n from './translations'; -import { useKibana } from '../../common/lib/kibana'; +import { useApplicationCapabilities, useKibana } from '../../common/lib/kibana'; import { getConnectorIcon, isDeprecatedConnector } from '../utils'; export interface Props { @@ -76,6 +76,8 @@ const ConnectorsDropdownComponent: React.FC = ({ appendAddConnectorButton = false, }) => { const { triggersActionsUi } = useKibana().services; + const { actions } = useApplicationCapabilities(); + const canSave = actions.crud; const connectorsAsOptions = useMemo(() => { const connectorsFormatted = connectors.reduce( (acc, connector) => { @@ -117,7 +119,7 @@ const ConnectorsDropdownComponent: React.FC = ({ [noConnectorOption] ); - if (appendAddConnectorButton) { + if (appendAddConnectorButton && canSave) { return [...connectorsFormatted, addNewConnector]; } diff --git a/x-pack/plugins/cloud/common/register_cloud_deployment_id_analytics_context.test.ts b/x-pack/plugins/cloud/common/register_cloud_deployment_id_analytics_context.test.ts index 26f4acb9ae576..a3413933a8e15 100644 --- a/x-pack/plugins/cloud/common/register_cloud_deployment_id_analytics_context.test.ts +++ b/x-pack/plugins/cloud/common/register_cloud_deployment_id_analytics_context.test.ts @@ -42,4 +42,19 @@ describe('registerCloudDeploymentIdAnalyticsContext', () => { deploymentId: 'uuid-of-my-deployment', }); }); + + test('it registers the context provider and emits the cloudId and projectId', async () => { + registerCloudDeploymentMetadataAnalyticsContext(analytics, { + id: 'cloud_id', + serverless: { + project_id: 'a-project-id', + }, + }); + expect(analytics.registerContextProvider).toHaveBeenCalledTimes(1); + const [{ context$ }] = analytics.registerContextProvider.mock.calls[0]; + await expect(firstValueFrom(context$)).resolves.toEqual({ + cloudId: 'cloud_id', + projectId: 'a-project-id', + }); + }); }); diff --git a/x-pack/plugins/cloud/common/register_cloud_deployment_id_analytics_context.ts b/x-pack/plugins/cloud/common/register_cloud_deployment_id_analytics_context.ts index d3c8d0df8e553..ffc347a5971a5 100644 --- a/x-pack/plugins/cloud/common/register_cloud_deployment_id_analytics_context.ts +++ b/x-pack/plugins/cloud/common/register_cloud_deployment_id_analytics_context.ts @@ -14,6 +14,9 @@ export interface CloudDeploymentMetadata { trial_end_date?: string; is_elastic_staff_owned?: boolean; deployment_url?: string; + serverless?: { + project_id?: string; + }; } export function registerCloudDeploymentMetadataAnalyticsContext( @@ -27,6 +30,7 @@ export function registerCloudDeploymentMetadataAnalyticsContext( id: cloudId, trial_end_date: cloudTrialEndDate, is_elastic_staff_owned: cloudIsElasticStaffOwned, + serverless: { project_id: projectId } = {}, } = cloudMetadata; analytics.registerContextProvider({ @@ -36,6 +40,7 @@ export function registerCloudDeploymentMetadataAnalyticsContext( deploymentId: parseDeploymentIdFromDeploymentUrl(cloudMetadata.deployment_url), cloudTrialEndDate, cloudIsElasticStaffOwned, + projectId, }), schema: { cloudId: { @@ -57,6 +62,10 @@ export function registerCloudDeploymentMetadataAnalyticsContext( optional: true, }, }, + projectId: { + type: 'keyword', + _meta: { description: 'The Serverless Project ID', optional: true }, + }, }, }); } diff --git a/x-pack/plugins/cloud/server/collectors/cloud_usage_collector.test.ts b/x-pack/plugins/cloud/server/collectors/cloud_usage_collector.test.ts index 612b75e5d68d3..b10662fd5421a 100644 --- a/x-pack/plugins/cloud/server/collectors/cloud_usage_collector.test.ts +++ b/x-pack/plugins/cloud/server/collectors/cloud_usage_collector.test.ts @@ -35,6 +35,8 @@ describe('createCloudUsageCollector', () => { isCloudEnabled: true, isElasticStaffOwned: undefined, trialEndDate: undefined, + deploymentId: undefined, + projectId: undefined, }); }); @@ -49,6 +51,27 @@ describe('createCloudUsageCollector', () => { isElasticStaffOwned: undefined, trialEndDate: '2020-10-01T14:30:16Z', inTrial: false, + deploymentId: undefined, + projectId: undefined, + }); + }); + + it('pass-through properties are copied as expected', async () => { + const collector = createCloudUsageCollector(usageCollection, { + isCloudEnabled: true, + trialEndDate: '2020-10-01T14:30:16Z', + isElasticStaffOwned: true, + deploymentId: 'a-deployment-id', + projectId: 'a-project-id', + }); + + expect(await collector.fetch(collectorFetchContext)).toStrictEqual({ + isCloudEnabled: true, + trialEndDate: '2020-10-01T14:30:16Z', + inTrial: false, + isElasticStaffOwned: true, + deploymentId: 'a-deployment-id', + projectId: 'a-project-id', }); }); }); diff --git a/x-pack/plugins/cloud/server/collectors/cloud_usage_collector.ts b/x-pack/plugins/cloud/server/collectors/cloud_usage_collector.ts index 147f61a57312b..ae777f692e98f 100644 --- a/x-pack/plugins/cloud/server/collectors/cloud_usage_collector.ts +++ b/x-pack/plugins/cloud/server/collectors/cloud_usage_collector.ts @@ -11,6 +11,8 @@ interface Config { isCloudEnabled: boolean; trialEndDate?: string; isElasticStaffOwned?: boolean; + deploymentId?: string; + projectId?: string; } interface CloudUsage { @@ -18,10 +20,12 @@ interface CloudUsage { trialEndDate?: string; inTrial?: boolean; isElasticStaffOwned?: boolean; + deploymentId?: string; + projectId?: string; } export function createCloudUsageCollector(usageCollection: UsageCollectionSetup, config: Config) { - const { isCloudEnabled, trialEndDate, isElasticStaffOwned } = config; + const { isCloudEnabled, trialEndDate, isElasticStaffOwned, deploymentId, projectId } = config; const trialEndDateMs = trialEndDate ? new Date(trialEndDate).getTime() : undefined; return usageCollection.makeUsageCollector({ type: 'cloud', @@ -31,6 +35,14 @@ export function createCloudUsageCollector(usageCollection: UsageCollectionSetup, trialEndDate: { type: 'date' }, inTrial: { type: 'boolean' }, isElasticStaffOwned: { type: 'boolean' }, + deploymentId: { + type: 'keyword', + _meta: { description: 'The ESS Deployment ID' }, + }, + projectId: { + type: 'keyword', + _meta: { description: 'The Serverless Project ID' }, + }, }, fetch: () => { return { @@ -38,6 +50,8 @@ export function createCloudUsageCollector(usageCollection: UsageCollectionSetup, isElasticStaffOwned, trialEndDate, ...(trialEndDateMs ? { inTrial: Date.now() <= trialEndDateMs } : {}), + deploymentId, + projectId, }; }, }); diff --git a/x-pack/plugins/cloud/server/plugin.ts b/x-pack/plugins/cloud/server/plugin.ts index efdcf9ebbe216..2239056b7f2ba 100644 --- a/x-pack/plugins/cloud/server/plugin.ts +++ b/x-pack/plugins/cloud/server/plugin.ts @@ -147,13 +147,17 @@ export class CloudPlugin implements Plugin { public setup(core: CoreSetup, { usageCollection }: PluginsSetup): CloudSetup { const isCloudEnabled = getIsCloudEnabled(this.config.id); - const isServerlessEnabled = !!this.config.serverless?.project_id; + const projectId = this.config.serverless?.project_id; + const isServerlessEnabled = !!projectId; + const deploymentId = parseDeploymentIdFromDeploymentUrl(this.config.deployment_url); registerCloudDeploymentMetadataAnalyticsContext(core.analytics, this.config); registerCloudUsageCollector(usageCollection, { isCloudEnabled, trialEndDate: this.config.trial_end_date, isElasticStaffOwned: this.config.is_elastic_staff_owned, + deploymentId, + projectId, }); let decodedId: DecodedCloudId | undefined; @@ -165,7 +169,7 @@ export class CloudPlugin implements Plugin { ...this.getCloudUrls(), cloudId: this.config.id, instanceSizeMb: readInstanceSizeMb(), - deploymentId: parseDeploymentIdFromDeploymentUrl(this.config.deployment_url), + deploymentId, elasticsearchUrl: decodedId?.elasticsearchUrl, kibanaUrl: decodedId?.kibanaUrl, cloudHost: decodedId?.host, @@ -179,7 +183,7 @@ export class CloudPlugin implements Plugin { }, isServerlessEnabled, serverless: { - projectId: this.config.serverless?.project_id, + projectId, projectName: this.config.serverless?.project_name, }, }; diff --git a/x-pack/plugins/cloud_security_posture/common/constants.ts b/x-pack/plugins/cloud_security_posture/common/constants.ts index 587fbdce8cc86..e1bcdc1f9a95f 100644 --- a/x-pack/plugins/cloud_security_posture/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/common/constants.ts @@ -80,7 +80,7 @@ export const POSTURE_TYPE_ALL = 'all'; // activated via a simple code change in a single location. export const INTERNAL_FEATURE_FLAGS = { showManageRulesMock: false, - showFindingFlyoutEvidence: false, + showFindingFlyoutEvidence: true, } as const; export const CSP_RULE_TEMPLATE_SAVED_OBJECT_TYPE = 'csp-rule-template'; diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/custom_assets_extension.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/custom_assets_extension.tsx index 0536c69a94701..774acadbd03ba 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/custom_assets_extension.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/custom_assets_extension.tsx @@ -23,6 +23,16 @@ export const CspCustomAssetsExtension = () => { .integration; const viewsCNVM: CustomAssetsAccordionProps['views'] = [ + { + name: cloudPosturePages.vulnerability_dashboard.name, + url: application.getUrlForApp(SECURITY_APP_NAME, { + path: cloudPosturePages.vulnerability_dashboard.path, + }), + description: i18n.translate( + 'xpack.csp.createPackagePolicy.customAssetsTab.vulnerabilityDashboardViewLabel', + { defaultMessage: 'View CNVM Dashboard' } + ), + }, { name: cloudPosturePages.findings.name, url: application.getUrlForApp(SECURITY_APP_NAME, { diff --git a/x-pack/plugins/cloud_security_posture/public/components/subscription_not_allowed.tsx b/x-pack/plugins/cloud_security_posture/public/components/subscription_not_allowed.tsx index 282ea71125655..644455e5a2a68 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/subscription_not_allowed.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/subscription_not_allowed.tsx @@ -5,9 +5,16 @@ * 2.0. */ -import { EuiEmptyPrompt, EuiPageSection, EuiLink } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; +import { EuiEmptyPrompt, EuiPageSection } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { SubscriptionLink } from '@kbn/subscription-tracking'; +import type { SubscriptionContextData } from '@kbn/subscription-tracking'; + +const subscriptionContext: SubscriptionContextData = { + feature: 'cloud-security-posture', + source: 'security__cloud-security-posture', +}; export const SubscriptionNotAllowed = ({ licenseManagementLocator, @@ -34,12 +41,12 @@ export const SubscriptionNotAllowed = ({ defaultMessage="To use these cloud security features, you must {link}." values={{ link: ( - + - + ), }} /> diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/overview_tab.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/overview_tab.tsx index cb906b99ef21b..e6e5b1386652d 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/overview_tab.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/findings_flyout/overview_tab.tsx @@ -18,6 +18,8 @@ import React, { useMemo } from 'react'; import moment from 'moment'; import type { EuiDescriptionListProps, EuiAccordionProps } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { isEmpty } from 'lodash'; import { truthy } from '../../../../common/utils/helpers'; import { CSP_MOMENT_FORMAT } from '../../../common/constants'; import { @@ -28,7 +30,7 @@ import { import { useLatestFindingsDataView } from '../../../common/api/use_latest_findings_data_view'; import { useKibana } from '../../../common/hooks/use_kibana'; import { CspFinding } from '../../../../common/schemas/csp_finding'; -import { CisKubernetesIcons, CspFlyoutMarkdown, CodeBlock } from './findings_flyout'; +import { CisKubernetesIcons, CodeBlock, CspFlyoutMarkdown } from './findings_flyout'; import { FindingsDetectionRuleCounter } from './findings_detection_rule_counter'; type Accordion = Pick & @@ -141,17 +143,20 @@ export const getRemediationList = (rule: CspFinding['rule']) => [ const getEvidenceList = ({ result }: CspFinding) => [ - result.expected && { - title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.expectedTitle', { - defaultMessage: 'Expected', - }), - description: {JSON.stringify(result.expected, null, 2)}, - }, { - title: i18n.translate('xpack.csp.findings.findingsFlyout.overviewTab.actualTitle', { - defaultMessage: 'Actual', - }), - description: {JSON.stringify(result.evidence, null, 2)}, + title: '', + description: ( + <> + + + + + {JSON.stringify(result.evidence, null, 2)} + + ), }, ].filter(truthy); @@ -169,6 +174,8 @@ export const OverviewTab = ({ data }: { data: CspFinding }) => { [discover.locator, latestFindingsDataView.data?.id] ); + const hasEvidence = !isEmpty(data.result.evidence); + const accordions: Accordion[] = useMemo( () => [ @@ -188,17 +195,18 @@ export const OverviewTab = ({ data }: { data: CspFinding }) => { id: 'remediationAccordion', listItems: getRemediationList(data.rule), }, - INTERNAL_FEATURE_FLAGS.showFindingFlyoutEvidence && { - initialIsOpen: false, - title: i18n.translate( - 'xpack.csp.findings.findingsFlyout.overviewTab.evidenceSourcesTitle', - { defaultMessage: 'Evidence' } - ), - id: 'evidenceAccordion', - listItems: getEvidenceList(data), - }, + INTERNAL_FEATURE_FLAGS.showFindingFlyoutEvidence && + hasEvidence && { + initialIsOpen: true, + title: i18n.translate( + 'xpack.csp.findings.findingsFlyout.overviewTab.evidenceSourcesTitle', + { defaultMessage: 'Evidence' } + ), + id: 'evidenceAccordion', + listItems: getEvidenceList(data), + }, ].filter(truthy), - [data, discoverIndexLink] + [data, discoverIndexLink, hasEvidence] ); return ( diff --git a/x-pack/plugins/cloud_security_posture/public/plugin.tsx b/x-pack/plugins/cloud_security_posture/public/plugin.tsx index a941f1f770b13..32e5ee577e40e 100755 --- a/x-pack/plugins/cloud_security_posture/public/plugin.tsx +++ b/x-pack/plugins/cloud_security_posture/public/plugin.tsx @@ -8,6 +8,7 @@ import React, { lazy, Suspense } from 'react'; import type { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; +import { SubscriptionTrackingProvider } from '@kbn/subscription-tracking'; import { CspLoadingState } from './components/csp_loading_state'; import type { CspRouterProps } from './application/csp_router'; import type { @@ -71,11 +72,16 @@ export class CspPlugin const App = (props: CspRouterProps) => ( -
- - - -
+ +
+ + + +
+
); diff --git a/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx b/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx index b8a5a0e5c4ae7..57fc2935e5708 100755 --- a/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx +++ b/x-pack/plugins/cloud_security_posture/public/test/test_provider.tsx @@ -11,7 +11,7 @@ import { I18nProvider } from '@kbn/i18n-react'; // eslint-disable-next-line no-restricted-imports import { Router } from 'react-router-dom'; import { Route, Routes } from '@kbn/shared-ux-router'; - +import { MockSubscriptionTrackingProvider } from '@kbn/subscription-tracking/mocks'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { coreMock } from '@kbn/core/public/mocks'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; @@ -48,9 +48,11 @@ export const TestProvider: React.FC> = ({ - - <>{children}} /> - + + + <>{children}} /> + + diff --git a/x-pack/plugins/cloud_security_posture/tsconfig.json b/x-pack/plugins/cloud_security_posture/tsconfig.json index 07c86f24ea18a..307394e41d84b 100755 --- a/x-pack/plugins/cloud_security_posture/tsconfig.json +++ b/x-pack/plugins/cloud_security_posture/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "target/types", + "outDir": "target/types" }, "include": [ "common/**/*", @@ -49,9 +49,8 @@ "@kbn/core-saved-objects-server", "@kbn/share-plugin", "@kbn/core-http-server", - "@kbn/core-http-browser" + "@kbn/core-http-browser", + "@kbn/subscription-tracking" ], - "exclude": [ - "target/**/*", - ] + "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index f5c13ac7fc39c..334ef577c5fdf 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -1231,6 +1231,14 @@ "parameters": [ { "$ref": "#/components/parameters/kbn_xsrf" + }, + { + "schema": { + "type": "boolean" + }, + "name": "force", + "description": "delete package even if policies used by agents", + "in": "query" } ], "requestBody": { @@ -1238,6 +1246,7 @@ "application/json": { "schema": { "type": "object", + "deprecated": true, "properties": { "force": { "type": "boolean" diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index e1e199835c77a..6ba43b73ba643 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -772,11 +772,17 @@ paths: operationId: delete-package parameters: - $ref: '#/components/parameters/kbn_xsrf' + - schema: + type: boolean + name: force + description: delete package even if policies used by agents + in: query requestBody: content: application/json: schema: type: object + deprecated: true properties: force: type: boolean diff --git a/x-pack/plugins/fleet/common/openapi/paths/epm@packages@{pkg_name}@{pkg_version}.yaml b/x-pack/plugins/fleet/common/openapi/paths/epm@packages@{pkg_name}@{pkg_version}.yaml index 94428e4bbe2b0..bc97c46bd4cd2 100644 --- a/x-pack/plugins/fleet/common/openapi/paths/epm@packages@{pkg_name}@{pkg_version}.yaml +++ b/x-pack/plugins/fleet/common/openapi/paths/epm@packages@{pkg_name}@{pkg_version}.yaml @@ -194,11 +194,17 @@ delete: operationId: delete-package parameters: - $ref: ../components/headers/kbn_xsrf.yaml + - schema: + type: boolean + name: force + description: delete package even if policies used by agents + in: query requestBody: content: application/json: schema: type: object + deprecated: true properties: force: type: boolean diff --git a/x-pack/plugins/fleet/common/services/agent_status.ts b/x-pack/plugins/fleet/common/services/agent_status.ts index 2ea2bef9d69df..a7a5257c603b8 100644 --- a/x-pack/plugins/fleet/common/services/agent_status.ts +++ b/x-pack/plugins/fleet/common/services/agent_status.ts @@ -56,3 +56,15 @@ export function buildKueryForUpdatingAgents(): string { export function buildKueryForInactiveAgents() { return 'status:inactive'; } + +export const AGENT_UPDATING_TIMEOUT_HOURS = 2; + +export function isStuckInUpdating(agent: Agent): boolean { + return ( + agent.status === 'updating' && + !!agent.upgrade_started_at && + !agent.upgraded_at && + Date.now() - Date.parse(agent.upgrade_started_at) > + AGENT_UPDATING_TIMEOUT_HOURS * 60 * 60 * 1000 + ); +} diff --git a/x-pack/plugins/fleet/common/types/rest_spec/agent.ts b/x-pack/plugins/fleet/common/types/rest_spec/agent.ts index 07bb496434f1f..1e0e82d6c2ecd 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/agent.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/agent.ts @@ -101,6 +101,7 @@ export interface PostAgentUpgradeRequest { body: { source_uri?: string; version: string; + force?: boolean; }; } @@ -111,6 +112,7 @@ export interface PostBulkAgentUpgradeRequest { version: string; rollout_duration_seconds?: number; start_time?: string; + force?: boolean; }; } diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/action_menu.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/action_menu.test.tsx index b9ca2d64493e4..51c2250e0fe16 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/action_menu.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/action_menu.test.tsx @@ -163,3 +163,44 @@ describe('AgentDetailsActionMenu', () => { }); }); }); + +describe('Restart upgrade action', () => { + function renderAndGetRestartUpgradeButton({ + agent, + agentPolicy, + }: { + agent: Agent; + agentPolicy?: AgentPolicy; + }) { + const { utils } = renderActions({ + agent, + agentPolicy, + }); + + return utils.queryByTestId('restartUpgradeBtn'); + } + + it('should render an active button', async () => { + const res = renderAndGetRestartUpgradeButton({ + agent: { + status: 'updating', + upgrade_started_at: '2022-11-21T12:27:24Z', + } as any, + agentPolicy: {} as AgentPolicy, + }); + + expect(res).not.toBe(null); + expect(res).toBeEnabled(); + }); + + it('should not render action if agent is not stuck in updating', async () => { + const res = renderAndGetRestartUpgradeButton({ + agent: { + status: 'updating', + upgrade_started_at: new Date().toISOString(), + } as any, + agentPolicy: {} as AgentPolicy, + }); + expect(res).toBe(null); + }); +}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx index 80651ad5a4ab3..251a5407de045 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/actions_menu.tsx @@ -10,6 +10,7 @@ import { EuiPortal, EuiContextMenuItem } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { isAgentRequestDiagnosticsSupported } from '../../../../../../../common/services'; +import { isStuckInUpdating } from '../../../../../../../common/services/agent_status'; import type { Agent, AgentPolicy } from '../../../../types'; import { useAuthz, useKibanaVersion } from '../../../../hooks'; @@ -41,6 +42,7 @@ export const AgentDetailsActionMenu: React.FunctionComponent<{ const [isRequestDiagnosticsModalOpen, setIsRequestDiagnosticsModalOpen] = useState(false); const [isAgentDetailsJsonFlyoutOpen, setIsAgentDetailsJsonFlyoutOpen] = useState(false); const isUnenrolling = agent.status === 'unenrolling'; + const isAgentUpdating = isStuckInUpdating(agent); const [isContextMenuOpen, setIsContextMenuOpen] = useState(false); const onContextMenuChange = useCallback( @@ -114,6 +116,24 @@ export const AgentDetailsActionMenu: React.FunctionComponent<{ ); } + if (isAgentUpdating) { + menuItems.push( + { + setIsUpgradeModalOpen(true); + }} + key="restartUpgradeAgent" + data-test-subj="restartUpgradeBtn" + > + + + ); + } + menuItems.push( )} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx index 617ee8188c025..55a73c00d0688 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_details/agent_details_overview.tsx @@ -129,7 +129,7 @@ export const AgentDetailsOverviewSection: React.FunctionComponent<{ title: i18n.translate('xpack.fleet.agentDetails.statusLabel', { defaultMessage: 'Status', }), - description: , + description: , }, { title: i18n.translate('xpack.fleet.agentDetails.lastActivityLabel', { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx index 2d07cdb98f01d..37f67dd9e6a41 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx @@ -80,6 +80,7 @@ describe('AgentBulkActions', () => { expect(results.getByText('Upgrade 2 agents').closest('button')!).toBeDisabled(); expect(results.getByText('Schedule upgrade for 2 agents').closest('button')!).toBeDisabled(); expect(results.queryByText('Request diagnostics for 2 agents')).toBeNull(); + expect(results.getByText('Restart upgrade 2 agents').closest('button')!).toBeDisabled(); }); it('should show available actions for 2 selected agents if they are active', async () => { @@ -112,6 +113,7 @@ describe('AgentBulkActions', () => { expect(results.getByText('Unenroll 2 agents').closest('button')!).toBeEnabled(); expect(results.getByText('Upgrade 2 agents').closest('button')!).toBeEnabled(); expect(results.getByText('Schedule upgrade for 2 agents').closest('button')!).toBeDisabled(); + expect(results.getByText('Restart upgrade 2 agents').closest('button')!).toBeEnabled(); }); it('should add actions if mockedExperimentalFeaturesService is enabled', async () => { @@ -202,6 +204,7 @@ describe('AgentBulkActions', () => { expect( results.getByText('Request diagnostics for 10 agents').closest('button')! ).toBeEnabled(); + expect(results.getByText('Restart upgrade 10 agents').closest('button')!).toBeEnabled(); }); it('should show correct actions for the active agents and exclude the managed agents from the count', async () => { @@ -255,6 +258,7 @@ describe('AgentBulkActions', () => { expect( results.getByText('Request diagnostics for 8 agents').closest('button')! ).toBeEnabled(); + expect(results.getByText('Restart upgrade 8 agents').closest('button')!).toBeEnabled(); }); it('should show correct actions when no managed policies exist', async () => { @@ -292,6 +296,7 @@ describe('AgentBulkActions', () => { expect( results.getByText('Request diagnostics for 10 agents').closest('button')! ).toBeEnabled(); + expect(results.getByText('Restart upgrade 10 agents').closest('button')!).toBeEnabled(); }); it('should generate a correct kuery to select agents', async () => { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx index e5a33beba733b..03ffc5fd615ee 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx @@ -73,7 +73,11 @@ export const AgentBulkActions: React.FunctionComponent = ({ // Actions states const [isReassignFlyoutOpen, setIsReassignFlyoutOpen] = useState(false); const [isUnenrollModalOpen, setIsUnenrollModalOpen] = useState(false); - const [updateModalState, setUpgradeModalState] = useState({ isOpen: false, isScheduled: false }); + const [updateModalState, setUpgradeModalState] = useState({ + isOpen: false, + isScheduled: false, + isUpdating: false, + }); const [isTagAddVisible, setIsTagAddVisible] = useState(false); const [isRequestDiagnosticsModalOpen, setIsRequestDiagnosticsModalOpen] = useState(false); @@ -219,7 +223,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ disabled: !atLeastOneActiveAgentSelected, onClick: () => { closeMenu(); - setUpgradeModalState({ isOpen: true, isScheduled: false }); + setUpgradeModalState({ isOpen: true, isScheduled: false, isUpdating: false }); }, }, { @@ -237,11 +241,30 @@ export const AgentBulkActions: React.FunctionComponent = ({ disabled: !atLeastOneActiveAgentSelected || !isLicenceAllowingScheduleUpgrade, onClick: () => { closeMenu(); - setUpgradeModalState({ isOpen: true, isScheduled: true }); + setUpgradeModalState({ isOpen: true, isScheduled: true, isUpdating: false }); }, }, ]; + menuItems.push({ + name: ( + + ), + icon: , + disabled: !atLeastOneActiveAgentSelected, + onClick: () => { + closeMenu(); + setUpgradeModalState({ isOpen: true, isScheduled: false, isUpdating: true }); + }, + }); + if (diagnosticFileUploadEnabled) { menuItems.push({ name: ( @@ -306,8 +329,9 @@ export const AgentBulkActions: React.FunctionComponent = ({ agents={agents} agentCount={agentCount} isScheduled={updateModalState.isScheduled} + isUpdating={updateModalState.isUpdating} onClose={() => { - setUpgradeModalState({ isOpen: false, isScheduled: false }); + setUpgradeModalState({ isOpen: false, isScheduled: false, isUpdating: false }); refreshAgents(); }} /> diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.test.tsx index f58ebc3977c8b..17ebb6a6631f9 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.test.tsx @@ -132,4 +132,51 @@ describe('TableRowActions', () => { expect(res).not.toBeEnabled(); }); }); + + describe('Restart upgrade action', () => { + function renderAndGetRestartUpgradeButton({ + agent, + agentPolicy, + }: { + agent: Agent; + agentPolicy?: AgentPolicy; + }) { + const { utils } = renderTableRowActions({ + agent, + agentPolicy, + }); + + return utils.queryByTestId('restartUpgradeBtn'); + } + + it('should render an active button', async () => { + const res = renderAndGetRestartUpgradeButton({ + agent: { + active: true, + status: 'updating', + upgrade_started_at: '2022-11-21T12:27:24Z', + } as any, + agentPolicy: { + is_managed: false, + } as AgentPolicy, + }); + + expect(res).not.toBe(null); + expect(res).toBeEnabled(); + }); + + it('should not render action if agent is not stuck in updating', async () => { + const res = renderAndGetRestartUpgradeButton({ + agent: { + active: true, + status: 'updating', + upgrade_started_at: new Date().toISOString(), + } as any, + agentPolicy: { + is_managed: false, + } as AgentPolicy, + }); + expect(res).toBe(null); + }); + }); }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.tsx index 5f82d3b556897..6b36f0a29d587 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/table_row_actions.tsx @@ -11,6 +11,8 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { isAgentRequestDiagnosticsSupported } from '../../../../../../../common/services'; +import { isStuckInUpdating } from '../../../../../../../common/services/agent_status'; + import type { Agent, AgentPolicy } from '../../../../types'; import { useAuthz, useLink, useKibanaVersion } from '../../../../hooks'; import { ContextMenuActions } from '../../../../components'; @@ -117,6 +119,24 @@ export const TableRowActions: React.FunctionComponent<{ ); + if (isStuckInUpdating(agent)) { + menuItems.push( + { + onUpgradeClick(); + }} + data-test-subj="restartUpgradeBtn" + > + + + ); + } + if (agentTamperProtectionEnabled && agent.policy_id) { menuItems.push( = () => { setAgentToUpgrade(undefined); refreshAgents(); }} + isUpdating={Boolean(agentToUpgrade.upgrade_started_at && !agentToUpgrade.upgraded_at)} /> )} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx new file mode 100644 index 0000000000000..93646a544bebb --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.test.tsx @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { act, fireEvent } from '@testing-library/react'; + +import { createFleetTestRendererMock } from '../../../../../mock'; + +import type { Agent } from '../../../types'; + +import { AgentHealth } from './agent_health'; + +jest.mock('./agent_upgrade_modal', () => { + return { + AgentUpgradeAgentModal: () => <>Upgrade Modal, + }; +}); + +function renderAgentHealth(agent: Agent, fromDetails?: boolean) { + const renderer = createFleetTestRendererMock(); + + const utils = renderer.render(); + + return { utils }; +} + +describe('AgentHealth', () => { + it('should render agent health with callout when agent stuck updating', () => { + const { utils } = renderAgentHealth( + { + active: true, + status: 'updating', + upgrade_started_at: '2022-11-21T12:27:24Z', + } as any, + true + ); + + act(() => { + fireEvent.click(utils.getByTestId('restartUpgradeBtn')); + }); + + utils.findByText('Upgrade Modal'); + }); + + it('should not render agent health with callout when agent not stuck updating', () => { + const { utils } = renderAgentHealth( + { + active: true, + status: 'updating', + upgrade_started_at: new Date().toISOString(), + } as any, + true + ); + + expect(utils.queryByTestId('restartUpgradeBtn')).not.toBeInTheDocument(); + }); + + it('should not render agent health with callout when not from details', () => { + const { utils } = renderAgentHealth( + { + active: true, + status: 'updating', + upgrade_started_at: '2022-11-21T12:27:24Z', + } as any, + false + ); + + expect(utils.queryByTestId('restartUpgradeBtn')).not.toBeInTheDocument(); + expect(utils.container.querySelector('[data-euiicon-type="warning"]')).not.toBeNull(); + }); +}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx index 9674480ab8bfe..9aefdff0d0578 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_health.tsx @@ -5,19 +5,35 @@ * 2.0. */ -import React, { useMemo } from 'react'; +import React, { useMemo, useState } from 'react'; +import styled from 'styled-components'; import { FormattedMessage, FormattedRelative } from '@kbn/i18n-react'; -import { EuiBadge, EuiToolTip } from '@elastic/eui'; +import { + EuiBadge, + EuiButton, + EuiCallOut, + EuiIcon, + EuiPortal, + EuiSpacer, + EuiToolTip, +} from '@elastic/eui'; import { euiLightVars as euiVars } from '@kbn/ui-theme'; -import { getPreviousAgentStatusForOfflineAgents } from '../../../../../../common/services/agent_status'; +import { + getPreviousAgentStatusForOfflineAgents, + isStuckInUpdating, +} from '../../../../../../common/services/agent_status'; import type { Agent } from '../../../types'; +import { useAgentRefresh } from '../agent_details_page/hooks'; + +import { AgentUpgradeAgentModal } from './agent_upgrade_modal'; + interface Props { agent: Agent; - showOfflinePreviousStatus?: boolean; + fromDetails?: boolean; } const Status = { @@ -79,10 +95,11 @@ function getStatusComponent(status: Agent['status']): React.ReactElement { } } -export const AgentHealth: React.FunctionComponent = ({ - agent, - showOfflinePreviousStatus, -}) => { +const WrappedEuiCallOut = styled(EuiCallOut)` + white-space: wrap !important; +`; + +export const AgentHealth: React.FunctionComponent = ({ agent, fromDetails }) => { const { last_checkin: lastCheckIn, last_checkin_message: lastCheckInMessage } = agent; const msLastCheckIn = new Date(lastCheckIn || 0).getTime(); const lastCheckInMessageText = lastCheckInMessage ? ( @@ -112,27 +129,94 @@ export const AgentHealth: React.FunctionComponent = ({ ); const previousToOfflineStatus = useMemo(() => { - if (!showOfflinePreviousStatus || agent.status !== 'offline') { + if (!fromDetails || agent.status !== 'offline') { return; } return getPreviousAgentStatusForOfflineAgents(agent); - }, [showOfflinePreviousStatus, agent]); + }, [fromDetails, agent]); + + const [isUpgradeModalOpen, setIsUpgradeModalOpen] = useState(false); + const refreshAgent = useAgentRefresh(); return ( - + +

{lastCheckinText}

+

{lastCheckInMessageText}

+ {isStuckInUpdating(agent) ? ( +

+ +

+ ) : null} + + } + > + <> + {getStatusComponent(agent.status)} + {previousToOfflineStatus ? getStatusComponent(previousToOfflineStatus) : null} + {isStuckInUpdating(agent) && !fromDetails ? ( + <> +   + + + ) : null} + +
+ {fromDetails && isStuckInUpdating(agent) ? ( <> -

{lastCheckinText}

-

{lastCheckInMessageText}

+ + + } + > +

+ +

+ { + setIsUpgradeModalOpen(true); + }} + data-test-subj="restartUpgradeBtn" + > + + +
- } - > - <> - {getStatusComponent(agent.status)} - {previousToOfflineStatus ? getStatusComponent(previousToOfflineStatus) : null} - -
+ ) : null} + {isUpgradeModalOpen && ( + + { + setIsUpgradeModalOpen(false); + refreshAgent(); + }} + isUpdating={true} + /> + + )} + ); }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx index 78619b976c49f..a3c50e0b9aee7 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx @@ -7,20 +7,15 @@ import React from 'react'; -import { waitFor } from '@testing-library/react'; +import { act, fireEvent, waitFor } from '@testing-library/react'; import { createFleetTestRendererMock } from '../../../../../../mock'; +import { sendPostBulkAgentUpgrade } from '../../../../hooks'; + import { AgentUpgradeAgentModal } from '.'; import type { AgentUpgradeAgentModalProps } from '.'; -jest.mock('@elastic/eui', () => { - return { - ...jest.requireActual('@elastic/eui'), - EuiConfirmModal: ({ children }: any) => <>{children}, - }; -}); - jest.mock('../../../../hooks', () => { return { ...jest.requireActual('../../../../hooks'), @@ -29,9 +24,15 @@ jest.mock('../../../../hooks', () => { items: ['8.7.0'], }, }), + sendGetAgentStatus: jest.fn().mockResolvedValue({ + data: { results: { updating: 2 } }, + }), + sendPostBulkAgentUpgrade: jest.fn(), }; }); +const mockSendPostBulkAgentUpgrade = sendPostBulkAgentUpgrade as jest.Mock; + function renderAgentUpgradeAgentModal(props: Partial) { const renderer = createFleetTestRendererMock(); @@ -41,6 +42,7 @@ function renderAgentUpgradeAgentModal(props: Partial { it('should set the default to Immediately if there is less than 10 agents using kuery', async () => { const { utils } = renderAgentUpgradeAgentModal({ @@ -48,10 +50,7 @@ describe('AgentUpgradeAgentModal', () => { agentCount: 3, }); - const el = utils.container.querySelector( - '[data-test-subj="agentUpgradeModal.MaintenanceCombobox"]' - ); - expect(el).not.toBeNull(); + const el = utils.getByTestId('agentUpgradeModal.MaintenanceCombobox'); expect(el?.textContent).toBe('Immediately'); }); @@ -61,10 +60,7 @@ describe('AgentUpgradeAgentModal', () => { agentCount: 3, }); - const el = utils.container.querySelector( - '[data-test-subj="agentUpgradeModal.MaintenanceCombobox"]' - ); - expect(el).not.toBeNull(); + const el = utils.getByTestId('agentUpgradeModal.MaintenanceCombobox'); expect(el?.textContent).toBe('Immediately'); }); @@ -74,11 +70,7 @@ describe('AgentUpgradeAgentModal', () => { agentCount: 13, }); - const el = utils.container.querySelector( - '[data-test-subj="agentUpgradeModal.MaintenanceCombobox"]' - ); - - expect(el).not.toBeNull(); + const el = utils.getByTestId('agentUpgradeModal.MaintenanceCombobox'); expect(el?.textContent).toBe('1 hour'); }); @@ -93,4 +85,73 @@ describe('AgentUpgradeAgentModal', () => { expect(el.classList.contains('euiComboBox-isDisabled')).toBe(false); }); }); + + it('should restart uprade on updating agents if some agents in updating', async () => { + const { utils } = renderAgentUpgradeAgentModal({ + agents: [ + { status: 'updating', upgrade_started_at: '2022-11-21T12:27:24Z', id: 'agent1' }, + { id: 'agent2' }, + ] as any, + agentCount: 2, + isUpdating: true, + }); + + const el = utils.getByTestId('confirmModalTitleText'); + expect(el.textContent).toEqual('Restart upgrade on 1 out of 2 agents stuck in updating'); + + const btn = utils.getByTestId('confirmModalConfirmButton'); + await waitFor(() => { + expect(btn).toBeEnabled(); + }); + + act(() => { + fireEvent.click(btn); + }); + + expect(mockSendPostBulkAgentUpgrade.mock.calls.at(-1)[0]).toEqual( + expect.objectContaining({ agents: ['agent1'], force: true }) + ); + }); + + it('should restart upgrade on updating agents if kuery', async () => { + const { utils } = renderAgentUpgradeAgentModal({ + agents: '*', + agentCount: 3, + isUpdating: true, + }); + + const el = await utils.findByTestId('confirmModalTitleText'); + expect(el.textContent).toEqual('Restart upgrade on 2 out of 3 agents stuck in updating'); + + const btn = utils.getByTestId('confirmModalConfirmButton'); + await waitFor(() => { + expect(btn).toBeEnabled(); + }); + + act(() => { + fireEvent.click(btn); + }); + + expect(mockSendPostBulkAgentUpgrade.mock.calls.at(-1)[0]).toEqual( + expect.objectContaining({ + agents: + '(*) AND status:updating AND upgrade_started_at:* AND NOT upgraded_at:* AND upgrade_started_at < now-2h', + force: true, + }) + ); + }); + + it('should disable submit button if no agents stuck updating', () => { + const { utils } = renderAgentUpgradeAgentModal({ + agents: [ + { status: 'offline', upgrade_started_at: '2022-11-21T12:27:24Z', id: 'agent1' }, + { id: 'agent2' }, + ] as any, + agentCount: 2, + isUpdating: true, + }); + + const el = utils.getByTestId('confirmModalConfirmButton'); + expect(el).toBeDisabled(); + }); }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx index 014075b1f0241..c4342d7436e22 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx @@ -28,6 +28,11 @@ import semverGt from 'semver/functions/gt'; import semverLt from 'semver/functions/lt'; import { getMinVersion } from '../../../../../../../common/services/get_min_max_version'; +import { + AGENT_UPDATING_TIMEOUT_HOURS, + isStuckInUpdating, +} from '../../../../../../../common/services/agent_status'; + import type { Agent } from '../../../../types'; import { sendPostAgentUpgrade, @@ -35,6 +40,7 @@ import { useStartServices, useKibanaVersion, useConfig, + sendGetAgentStatus, } from '../../../../hooks'; import { sendGetAgentsAvailableVersions } from '../../../../hooks'; @@ -51,6 +57,7 @@ export interface AgentUpgradeAgentModalProps { agents: Agent[] | string; agentCount: number; isScheduled?: boolean; + isUpdating?: boolean; } const getVersion = (version: Array>) => version[0]?.value as string; @@ -68,6 +75,7 @@ export const AgentUpgradeAgentModal: React.FunctionComponent { const { notifications } = useStartServices(); const kibanaVersion = useKibanaVersion() || ''; @@ -80,6 +88,47 @@ export const AgentUpgradeAgentModal: React.FunctionComponent(0); + const [updatingQuery, setUpdatingQuery] = useState(''); + + const QUERY_STUCK_UPDATING = `status:updating AND upgrade_started_at:* AND NOT upgraded_at:* AND upgrade_started_at < now-${AGENT_UPDATING_TIMEOUT_HOURS}h`; + + useEffect(() => { + const getStuckUpdatingAgentCount = async (agentsOrQuery: Agent[] | string) => { + let newQuery; + // find updating agents from array + if (Array.isArray(agentsOrQuery) && agentsOrQuery.length > 0) { + if (agentsOrQuery.length === 0) { + return; + } + const newAgents = agentsOrQuery.filter((agent) => isStuckInUpdating(agent)); + const updatingCount = newAgents.length; + setUpdatingAgents(updatingCount); + setUpdatingQuery(newAgents); + return; + } else if (typeof agentsOrQuery === 'string' && agentsOrQuery !== '') { + newQuery = [`(${agentsOrQuery})`, QUERY_STUCK_UPDATING].join(' AND '); + } else { + newQuery = QUERY_STUCK_UPDATING; + } + setUpdatingQuery(newQuery); + + // if selection is a query, do an api call to get updating agents + try { + const res = await sendGetAgentStatus({ + kuery: newQuery, + }); + setUpdatingAgents(res?.data?.results?.updating ?? 0); + } catch (err) { + return; + } + }; + + if (!isUpdating) return; + + getStuckUpdatingAgentCount(agents); + }, [isUpdating, setUpdatingQuery, QUERY_STUCK_UPDATING, agents]); + useEffect(() => { const getVersions = async () => { try { @@ -166,14 +215,18 @@ export const AgentUpgradeAgentModal: React.FunctionComponent + Array.isArray(agentsOrQuery) ? agentsOrQuery.map((agent) => agent.id) : agentsOrQuery; const { error } = isSingleAgent && !isScheduled ? await sendPostAgentUpgrade((agents[0] as Agent).id, { version, + force: isUpdating, }) : await sendPostBulkAgentUpgrade({ version, - agents: Array.isArray(agents) ? agents.map((agent) => agent.id) : agents, + agents: getQuery(isUpdating ? updatingQuery : agents), + force: isUpdating, ...rolloutOptions, }); if (error) { @@ -219,16 +272,29 @@ export const AgentUpgradeAgentModal: React.FunctionComponent {isSingleAgent ? ( - + isUpdating ? ( + + ) : ( + + ) ) : isScheduled ? ( + ) : isUpdating ? ( + ) : ( } - confirmButtonDisabled={isSubmitting || noVersions} + confirmButtonDisabled={isSubmitting || noVersions || (isUpdating && updatingAgents === 0)} confirmButtonText={ isSingleAgent ? ( + ) : isUpdating ? ( + ) : ( { const { data, isLoading } = useGetSettings(); - const kibanaVersion = useKibanaVersion(); + const agentVersion = useAgentVersion(); let isError = false; let error: string | undefined; @@ -49,12 +49,12 @@ export const useCreateCloudFormationUrl = ({ } const cloudFormationUrl = - enrollmentAPIKey && fleetServerHost && cloudFormationProps?.templateUrl + enrollmentAPIKey && fleetServerHost && cloudFormationProps?.templateUrl && agentVersion ? createCloudFormationUrl( cloudFormationProps?.templateUrl, enrollmentAPIKey, fleetServerHost, - kibanaVersion, + agentVersion, cloudFormationProps?.awsAccountType ) : undefined; @@ -71,15 +71,18 @@ const createCloudFormationUrl = ( templateURL: string, enrollmentToken: string, fleetUrl: string, - kibanaVersion: string, + agentVersion: string, awsAccountType: CloudSecurityIntegrationAwsAccountType | undefined ) => { let cloudFormationUrl; + /* + template url has `¶m_ElasticAgentVersion=KIBANA_VERSION` part. KIBANA_VERSION is used for templating as agent version used to match Kibana version, but now it's not necessarily the case + */ cloudFormationUrl = templateURL .replace('FLEET_ENROLLMENT_TOKEN', enrollmentToken) .replace('FLEET_URL', fleetUrl) - .replace('KIBANA_VERSION', kibanaVersion); + .replace('KIBANA_VERSION', agentVersion); if (cloudFormationUrl.includes('ACCOUNT_TYPE')) { cloudFormationUrl = cloudFormationUrl.replace( diff --git a/x-pack/plugins/fleet/server/collectors/agents_per_output.test.ts b/x-pack/plugins/fleet/server/collectors/agents_per_output.test.ts new file mode 100644 index 0000000000000..3e91282891f2f --- /dev/null +++ b/x-pack/plugins/fleet/server/collectors/agents_per_output.test.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; + +import { getAgentsPerOutput } from './agents_per_output'; + +jest.mock('../services', () => { + return { + agentPolicyService: { + list: jest.fn().mockResolvedValue({ + items: [ + { agents: 0, data_output_id: 'logstash1', monitoring_output_id: 'kafka1' }, + { agents: 1 }, + { agents: 1, data_output_id: 'logstash1' }, + { agents: 1, monitoring_output_id: 'kafka1' }, + { agents: 1, data_output_id: 'elasticsearch2', monitoring_output_id: 'elasticsearch2' }, + ], + }), + }, + }; +}); + +describe('agents_per_output', () => { + const soClientMock = { + find: jest.fn().mockResolvedValue({ + saved_objects: [ + { + id: 'default-output', + attributes: { is_default: true, is_default_monitoring: true, type: 'elasticsearch' }, + }, + { id: 'logstash1', attributes: { type: 'logstash' } }, + { id: 'kafka1', attributes: { type: 'kafka' } }, + { id: 'elasticsearch2', attributes: { type: 'elasticsearch' } }, + ], + }), + } as unknown as SavedObjectsClientContract; + + it('should return agent count by output type', async () => { + const res = await getAgentsPerOutput(soClientMock, {} as unknown as ElasticsearchClient); + expect(res).toEqual([ + { output_type: 'elasticsearch', count_as_data: 3, count_as_monitoring: 3 }, + { output_type: 'logstash', count_as_data: 1, count_as_monitoring: 0 }, + { output_type: 'kafka', count_as_data: 0, count_as_monitoring: 1 }, + ]); + }); +}); diff --git a/x-pack/plugins/fleet/server/collectors/agents_per_output.ts b/x-pack/plugins/fleet/server/collectors/agents_per_output.ts new file mode 100644 index 0000000000000..54733dace2057 --- /dev/null +++ b/x-pack/plugins/fleet/server/collectors/agents_per_output.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 type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; +import _ from 'lodash'; + +import { OUTPUT_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../common'; +import type { OutputSOAttributes } from '../types'; +import { agentPolicyService } from '../services'; + +export interface AgentsPerOutputType { + output_type: string; + count_as_data: number; + count_as_monitoring: number; +} + +export async function getAgentsPerOutput( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient +): Promise { + const { saved_objects: outputs } = await soClient.find({ + type: OUTPUT_SAVED_OBJECT_TYPE, + page: 1, + perPage: SO_SEARCH_LIMIT, + }); + + const defaultOutputId = outputs.find((output) => output.attributes.is_default)?.id || ''; + const defaultMonitoringOutputId = + outputs.find((output) => output.attributes.is_default_monitoring)?.id || ''; + + const outputsById = _.keyBy(outputs, 'id'); + const getOutputTypeById = (outputId: string): string => outputsById[outputId]?.attributes.type; + + const { items } = await agentPolicyService.list(soClient, { + esClient, + withAgentCount: true, + page: 1, + perPage: SO_SEARCH_LIMIT, + }); + const outputTypes: { [key: string]: AgentsPerOutputType } = {}; + items + .filter((item) => (item.agents ?? 0) > 0) + .forEach((item) => { + const dataOutputType = getOutputTypeById(item.data_output_id || defaultOutputId); + if (!outputTypes[dataOutputType]) { + outputTypes[dataOutputType] = { + output_type: dataOutputType, + count_as_data: 0, + count_as_monitoring: 0, + }; + } + outputTypes[dataOutputType].count_as_data += item.agents ?? 0; + const monitoringOutputType = getOutputTypeById( + item.monitoring_output_id || defaultMonitoringOutputId + ); + if (!outputTypes[monitoringOutputType]) { + outputTypes[monitoringOutputType] = { + output_type: monitoringOutputType, + count_as_data: 0, + count_as_monitoring: 0, + }; + } + outputTypes[monitoringOutputType].count_as_monitoring += item.agents ?? 0; + }); + return Object.values(outputTypes); +} diff --git a/x-pack/plugins/fleet/server/collectors/register.ts b/x-pack/plugins/fleet/server/collectors/register.ts index d31548d330897..01d0a65f2cf08 100644 --- a/x-pack/plugins/fleet/server/collectors/register.ts +++ b/x-pack/plugins/fleet/server/collectors/register.ts @@ -22,6 +22,8 @@ import { getAgentPoliciesUsage } from './agent_policies'; import type { AgentPanicLogsData } from './agent_logs_panics'; import { getPanicLogsLastHour } from './agent_logs_panics'; import { getAgentLogsTopErrors } from './agent_logs_top_errors'; +import type { AgentsPerOutputType } from './agents_per_output'; +import { getAgentsPerOutput } from './agents_per_output'; export interface Usage { agents_enabled: boolean; @@ -36,6 +38,7 @@ export interface FleetUsage extends Usage, AgentData { agent_logs_panics_last_hour: AgentPanicLogsData['agent_logs_panics_last_hour']; agent_logs_top_errors?: string[]; fleet_server_logs_top_errors?: string[]; + agents_per_output_type: AgentsPerOutputType[]; } export const fetchFleetUsage = async ( @@ -57,6 +60,7 @@ export const fetchFleetUsage = async ( agent_policies: await getAgentPoliciesUsage(soClient), ...(await getPanicLogsLastHour(esClient)), ...(await getAgentLogsTopErrors(esClient)), + agents_per_output_type: await getAgentsPerOutput(soClient, esClient), }; return usage; }; diff --git a/x-pack/plugins/fleet/server/integration_tests/fleet_usage_telemetry.test.ts b/x-pack/plugins/fleet/server/integration_tests/fleet_usage_telemetry.test.ts index 2aeb7a0e1a963..046ac5dfe9fad 100644 --- a/x-pack/plugins/fleet/server/integration_tests/fleet_usage_telemetry.test.ts +++ b/x-pack/plugins/fleet/server/integration_tests/fleet_usage_telemetry.test.ts @@ -207,6 +207,20 @@ describe('fleet usage telemetry', () => { }, ], }, + { + create: { + _id: 'agent3', + }, + }, + { + agent: { + version: '8.6.0', + }, + last_checkin_status: 'online', + last_checkin: '2023-09-13T12:26:24Z', + active: true, + policy_id: 'policy2', + }, ], refresh: 'wait_for', }); @@ -348,20 +362,24 @@ describe('fleet usage telemetry', () => { { id: 'output3' } ); - await soClient.create('ingest-agent-policies', { - namespace: 'default', - monitoring_enabled: ['logs', 'metrics'], - name: 'Another policy', - description: 'Policy 2', - inactivity_timeout: 1209600, - status: 'active', - is_managed: false, - revision: 2, - updated_by: 'system', - schema_version: '1.0.0', - data_output_id: 'output2', - monitoring_output_id: 'output3', - }); + await soClient.create( + 'ingest-agent-policies', + { + namespace: 'default', + monitoring_enabled: ['logs', 'metrics'], + name: 'Another policy', + description: 'Policy 2', + inactivity_timeout: 1209600, + status: 'active', + is_managed: false, + revision: 2, + updated_by: 'system', + schema_version: '1.0.0', + data_output_id: 'output2', + monitoring_output_id: 'output3', + }, + { id: 'policy2' } + ); }); afterAll(async () => { @@ -379,13 +397,13 @@ describe('fleet usage telemetry', () => { expect.objectContaining({ agents_enabled: true, agents: { - total_enrolled: 2, + total_enrolled: 3, healthy: 0, unhealthy: 0, inactive: 0, unenrolled: 1, - offline: 2, - total_all_statuses: 3, + offline: 3, + total_all_statuses: 4, updating: 0, }, fleet_server: { @@ -400,28 +418,28 @@ describe('fleet usage telemetry', () => { packages: [], agents_per_version: [ { - version: '8.5.1', - count: 1, + version: '8.6.0', + count: 2, healthy: 0, inactive: 0, - offline: 1, - unenrolled: 1, + offline: 2, + unenrolled: 0, unhealthy: 0, updating: 0, }, { - version: '8.6.0', + version: '8.5.1', count: 1, healthy: 0, inactive: 0, offline: 1, - unenrolled: 0, + unenrolled: 1, unhealthy: 0, updating: 0, }, ], agent_checkin_status: { error: 1, degraded: 1 }, - agents_per_policy: [2], + agents_per_policy: [2, 1], agents_per_os: [ { name: 'Ubuntu', @@ -434,6 +452,18 @@ describe('fleet usage telemetry', () => { count: 1, }, ], + agents_per_output_type: [ + { + count_as_data: 1, + count_as_monitoring: 0, + output_type: 'third_type', + }, + { + count_as_data: 0, + count_as_monitoring: 1, + output_type: 'logstash', + }, + ], fleet_server_config: { policies: [ { diff --git a/x-pack/plugins/fleet/server/routes/epm/handlers.ts b/x-pack/plugins/fleet/server/routes/epm/handlers.ts index e3e04820899d4..c507d9e6732a7 100644 --- a/x-pack/plugins/fleet/server/routes/epm/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/epm/handlers.ts @@ -540,7 +540,7 @@ export const installPackageByUploadHandler: FleetRequestHandler< export const deletePackageHandler: FleetRequestHandler< TypeOf, - undefined, + TypeOf, TypeOf > = async (context, request, response) => { try { @@ -554,7 +554,7 @@ export const deletePackageHandler: FleetRequestHandler< pkgName, pkgVersion, esClient, - force: request.body?.force, + force: request.query?.force, }); const body: DeletePackageResponse = { items: res, diff --git a/x-pack/plugins/fleet/server/services/elastic_agent_manifest.ts b/x-pack/plugins/fleet/server/services/elastic_agent_manifest.ts index 578625d1a38ab..385b1095cb9f4 100644 --- a/x-pack/plugins/fleet/server/services/elastic_agent_manifest.ts +++ b/x-pack/plugins/fleet/server/services/elastic_agent_manifest.ts @@ -42,7 +42,7 @@ spec: # - -c # - >- # mkdir -p /etc/elastic-agent/inputs.d && - # wget -O - https://github.com/elastic/elastic-agent/archive/main.tar.gz | tar xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-main/deploy/kubernetes/elastic-agent-standalone/templates.d" + # wget -O - https://github.com/elastic/elastic-agent/archive/main.tar.gz | tar xz -C /etc/elastic-agent/inputs.d --strip=5 "elastic-agent-main/deploy/kubernetes/elastic-agent/templates.d" # volumeMounts: # - name: external-inputs # mountPath: /etc/elastic-agent/inputs.d @@ -71,7 +71,7 @@ spec: # The following ELASTIC_NETINFO:false variable will disable the netinfo.enabled option of add-host-metadata processor. This will remove fields host.ip and host.mac. # For more info: https://www.elastic.co/guide/en/beats/metricbeat/current/add-host-metadata.html - name: ELASTIC_NETINFO - value: "false" + value: "false" securityContext: runAsUser: 0 # The following capabilities are needed for 'Defend for containers' integration (cloud-defend) @@ -396,7 +396,7 @@ spec: # The following ELASTIC_NETINFO:false variable will disable the netinfo.enabled option of add-host-metadata processor. This will remove fields host.ip and host.mac. # For more info: https://www.elastic.co/guide/en/beats/metricbeat/current/add-host-metadata.html - name: ELASTIC_NETINFO - value: "false" + value: "false" securityContext: runAsUser: 0 # The following capabilities are needed for 'Defend for containers' integration (cloud-defend) diff --git a/x-pack/plugins/fleet/server/services/epm/packages/remove.test.ts b/x-pack/plugins/fleet/server/services/epm/packages/remove.test.ts index ff03dbf5fd422..f15043fe52923 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/remove.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/remove.test.ts @@ -21,13 +21,23 @@ jest.mock('../..', () => { }), }, packagePolicyService: { - list: jest.fn().mockResolvedValue({ total: 1, items: [{ id: 'system-1' }] }), + list: jest.fn().mockImplementation((soClient, params) => { + if (params.kuery.includes('system')) + return Promise.resolve({ total: 1, items: [{ id: 'system-1', agents: 1 }] }); + else + return Promise.resolve({ + total: 2, + items: [{ id: 'elastic_agent-1' }, { id: 'elastic_agent-2' }], + }); + }), delete: jest.fn(), }, }; }); jest.mock('../../audit_logging'); +jest.mock('../../package_policies/populate_package_policy_assigned_agents_count'); + const mockedAuditLoggingService = auditLoggingService as jest.Mocked; const mockPackagePolicyService = packagePolicyService as jest.Mocked; @@ -72,6 +82,17 @@ describe('removeInstallation', () => { ); }); + it('should remove package policies when not used by agents', async () => { + await removeInstallation({ + savedObjectsClient: soClientMock, + pkgName: 'elastic_agent', + pkgVersion: '1.0.0', + esClient: esClientMock, + force: false, + }); + expect(mockPackagePolicyService.delete).toHaveBeenCalledTimes(2); + }); + it('should call audit logger', async () => { await removeInstallation({ savedObjectsClient: soClientMock, diff --git a/x-pack/plugins/fleet/server/services/epm/packages/remove.ts b/x-pack/plugins/fleet/server/services/epm/packages/remove.ts index 0485662b584c7..c65a4d165cf7f 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/remove.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/remove.ts @@ -43,6 +43,8 @@ import { removeArchiveEntries } from '../archive/storage'; import { auditLoggingService } from '../../audit_logging'; +import { populatePackagePolicyAssignedAgentsCount } from '../../package_policies/populate_package_policy_assigned_agents_count'; + import { getInstallation, kibanaSavedObjectTypes } from '.'; export async function removeInstallation(options: { @@ -59,17 +61,21 @@ export async function removeInstallation(options: { const { total, items } = await packagePolicyService.list(savedObjectsClient, { kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:${pkgName}`, page: 1, - perPage: options.force ? SO_SEARCH_LIMIT : 0, + perPage: SO_SEARCH_LIMIT, }); + if (!options.force) { + await populatePackagePolicyAssignedAgentsCount(esClient, items); + } + if (total > 0) { - if (options.force) { + if (options.force || items.every((item) => (item.agents ?? 0) === 0)) { // delete package policies const ids = items.map((item) => item.id); appContextService .getLogger() .info( - `deleting package policies of ${pkgName} package because force flag was enabled: ${ids}` + `deleting package policies of ${pkgName} package because not used by agents or force flag was enabled: ${ids}` ); await packagePolicyService.delete(savedObjectsClient, esClient, ids, { force: options.force, diff --git a/x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts b/x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts index 102f34c280800..555223c7b5b1c 100644 --- a/x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts +++ b/x-pack/plugins/fleet/server/services/telemetry/fleet_usage_sender.ts @@ -24,7 +24,7 @@ const FLEET_AGENTS_EVENT_TYPE = 'fleet_agents'; export class FleetUsageSender { private taskManager?: TaskManagerStartContract; - private taskVersion = '1.1.1'; + private taskVersion = '1.1.2'; private taskType = 'Fleet-Usage-Sender'; private wasStarted: boolean = false; private interval = '1h'; @@ -80,7 +80,11 @@ export class FleetUsageSender { if (!usageData) { return; } - const { agents_per_version: agentsPerVersion, ...fleetUsageData } = usageData; + const { + agents_per_version: agentsPerVersion, + agents_per_output_type: agentsPerOutputType, + ...fleetUsageData + } = usageData; appContextService .getLogger() .debug('Fleet usage telemetry: ' + JSON.stringify(fleetUsageData)); @@ -93,6 +97,15 @@ export class FleetUsageSender { agentsPerVersion.forEach((byVersion) => { core.analytics.reportEvent(FLEET_AGENTS_EVENT_TYPE, { agents_per_version: byVersion }); }); + + appContextService + .getLogger() + .debug('Agents per output type telemetry: ' + JSON.stringify(agentsPerOutputType)); + agentsPerOutputType.forEach((byOutputType) => { + core.analytics.reportEvent(FLEET_AGENTS_EVENT_TYPE, { + agents_per_output_type: byOutputType, + }); + }); } catch (error) { appContextService .getLogger() diff --git a/x-pack/plugins/fleet/server/services/telemetry/fleet_usages_schema.ts b/x-pack/plugins/fleet/server/services/telemetry/fleet_usages_schema.ts index 616d30ad3d4b1..e59de684264bf 100644 --- a/x-pack/plugins/fleet/server/services/telemetry/fleet_usages_schema.ts +++ b/x-pack/plugins/fleet/server/services/telemetry/fleet_usages_schema.ts @@ -9,6 +9,10 @@ import type { RootSchema } from '@kbn/analytics-client'; export const fleetAgentsSchema: RootSchema = { agents_per_version: { + _meta: { + description: 'Agents per version telemetry', + optional: true, + }, properties: { version: { type: 'keyword', @@ -60,6 +64,32 @@ export const fleetAgentsSchema: RootSchema = { }, }, }, + agents_per_output_type: { + _meta: { + description: 'Agents per output type telemetry', + optional: true, + }, + properties: { + output_type: { + type: 'keyword', + _meta: { + description: 'Output type used by agent', + }, + }, + count_as_data: { + type: 'long', + _meta: { + description: 'Number of agents enrolled that use this output type as data output', + }, + }, + count_as_monitoring: { + type: 'long', + _meta: { + description: 'Number of agents enrolled that use this output type as monitoring output', + }, + }, + }, + }, }; export const fleetUsagesSchema: RootSchema = { diff --git a/x-pack/plugins/fleet/server/types/rest_spec/epm.ts b/x-pack/plugins/fleet/server/types/rest_spec/epm.ts index 6bc7bccf64e0c..c38a12b79b362 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/epm.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/epm.ts @@ -218,6 +218,10 @@ export const DeletePackageRequestSchema = { pkgName: schema.string(), pkgVersion: schema.string(), }), + query: schema.object({ + force: schema.maybe(schema.boolean()), + }), + // body is deprecated on delete request body: schema.nullable( schema.object({ force: schema.boolean(), diff --git a/x-pack/plugins/index_management/README.md b/x-pack/plugins/index_management/README.md index b50309ac36099..8ac2837a683b6 100644 --- a/x-pack/plugins/index_management/README.md +++ b/x-pack/plugins/index_management/README.md @@ -49,11 +49,34 @@ POST %25%7B%5B%40metadata%5D%5Bbeat%5D%7D-%25%7B%5B%40metadata%5D%5Bversion%5D%7 } ``` +Create a data stream configured with data stream lifecyle. + +``` +PUT _index_template/my-index-template +{ + "index_patterns": ["my-data-stream*"], + "data_stream": { }, + "priority": 500, + "template": { + "lifecycle": { + "data_retention": "7d" + } + }, + "_meta": { + "description": "Template with data stream lifecycle" + } +} +``` + +``` +PUT _data_stream/my-data-stream +``` + ## Index templates tab ### Quick steps for testing -**Legacy index templates** are only shown in the UI on stateful *and* if a user has existing legacy index templates. You can test this functionality by creating one in Console: +**Legacy index templates** are only shown in the UI on stateful _and_ if a user has existing legacy index templates. You can test this functionality by creating one in Console: ``` PUT _template/template_1 @@ -67,6 +90,7 @@ On serverless, Elasticsearch does not support legacy index templates and therefo To test **Cloud-managed templates**: 1. Add `cluster.metadata.managed_index_templates` setting via Dev Tools: + ``` PUT /_cluster/settings { @@ -77,6 +101,7 @@ PUT /_cluster/settings ``` 2. Create a template with the format: `.cloud-` via Dev Tools. + ``` PUT _template/.cloud-example { @@ -101,4 +126,4 @@ In 7.x, the UI supports types defined as part of the mappings for legacy index t } } } -``` \ No newline at end of file +``` diff --git a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.helpers.ts b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.helpers.ts index e38359a6d9f37..d9e6694d8ba8d 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.helpers.ts +++ b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.helpers.ts @@ -8,7 +8,6 @@ import { act } from 'react-dom/test-utils'; import { ReactWrapper } from 'enzyme'; -import { EuiDescriptionListDescription } from '@elastic/eui'; import { registerTestBed, TestBed, @@ -43,8 +42,9 @@ export interface DataStreamsTabTestBed extends TestBed { findDetailPanelTitle: () => string; findEmptyPromptIndexTemplateLink: () => ReactWrapper; findDetailPanelIlmPolicyLink: () => ReactWrapper; - findDetailPanelIlmPolicyName: () => ReactWrapper; + findDetailPanelIlmPolicyDetail: () => ReactWrapper; findDetailPanelIndexTemplateLink: () => ReactWrapper; + findDetailPanelDataRetentionDetail: () => ReactWrapper; } export const setup = async ( @@ -211,10 +211,14 @@ export const setup = async ( return find('indexTemplateLink'); }; - const findDetailPanelIlmPolicyName = () => { - const descriptionList = testBed.component.find(EuiDescriptionListDescription); - // ilm policy is the last in the details list - return descriptionList.last(); + const findDetailPanelIlmPolicyDetail = () => { + const { find } = testBed; + return find('ilmPolicyDetail'); + }; + + const findDetailPanelDataRetentionDetail = () => { + const { find } = testBed; + return find('dataRetentionDetail'); }; return { @@ -240,8 +244,9 @@ export const setup = async ( findDetailPanelTitle, findEmptyPromptIndexTemplateLink, findDetailPanelIlmPolicyLink, - findDetailPanelIlmPolicyName, + findDetailPanelIlmPolicyDetail, findDetailPanelIndexTemplateLink, + findDetailPanelDataRetentionDetail, }; }; @@ -264,6 +269,9 @@ export const createDataStreamPayload = (dataStream: Partial): DataSt delete_index: true, }, hidden: false, + lifecycle: { + data_retention: '7d', + }, ...dataStream, }); diff --git a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts index 208bec0a1d6e6..f4e8221be1093 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts +++ b/x-pack/plugins/index_management/__jest__/client_integration/home/data_streams_tab.test.ts @@ -170,8 +170,8 @@ describe('Data Streams tab', () => { const { tableCellsValues } = table.getMetaData('dataStreamTable'); expect(tableCellsValues).toEqual([ - ['', 'dataStream1', 'green', '1', 'Delete'], - ['', 'dataStream2', 'green', '1', 'Delete'], + ['', 'dataStream1', 'green', '1', '7d', 'Delete'], + ['', 'dataStream2', 'green', '1', '7d', 'Delete'], ]); }); @@ -209,8 +209,8 @@ describe('Data Streams tab', () => { // The table renders with the stats columns though. const { tableCellsValues } = table.getMetaData('dataStreamTable'); expect(tableCellsValues).toEqual([ - ['', 'dataStream1', 'green', 'December 31st, 1969 7:00:00 PM', '5b', '1', 'Delete'], - ['', 'dataStream2', 'green', 'December 31st, 1969 7:00:00 PM', '1kb', '1', 'Delete'], + ['', 'dataStream1', 'green', 'December 31st, 1969 7:00:00 PM', '5b', '1', '7d', 'Delete'], + ['', 'dataStream2', 'green', 'December 31st, 1969 7:00:00 PM', '1kb', '1', '7d', 'Delete'], ]); }); @@ -229,8 +229,8 @@ describe('Data Streams tab', () => { // the human-readable string values. const { tableCellsValues } = table.getMetaData('dataStreamTable'); expect(tableCellsValues).toEqual([ - ['', 'dataStream1', 'green', 'December 31st, 1969 7:00:00 PM', '5b', '1', 'Delete'], - ['', 'dataStream2', 'green', 'December 31st, 1969 7:00:00 PM', '1kb', '1', 'Delete'], + ['', 'dataStream1', 'green', 'December 31st, 1969 7:00:00 PM', '5b', '1', '7d', 'Delete'], + ['', 'dataStream2', 'green', 'December 31st, 1969 7:00:00 PM', '1kb', '1', '7d', 'Delete'], ]); }); @@ -335,6 +335,12 @@ describe('Data Streams tab', () => { expect(find('summaryTab').exists()).toBeTruthy(); expect(find('title').text().trim()).toBe('indexTemplate'); }); + + test('shows data retention detail when configured', async () => { + const { actions, findDetailPanelDataRetentionDetail } = testBed; + await actions.clickNameAt(0); + expect(findDetailPanelDataRetentionDetail().exists()).toBeTruthy(); + }); }); }); @@ -423,10 +429,10 @@ describe('Data Streams tab', () => { }); testBed.component.update(); - const { actions, findDetailPanelIlmPolicyLink, findDetailPanelIlmPolicyName } = testBed; + const { actions, findDetailPanelIlmPolicyLink, findDetailPanelIlmPolicyDetail } = testBed; await actions.clickNameAt(0); expect(findDetailPanelIlmPolicyLink().exists()).toBeFalsy(); - expect(findDetailPanelIlmPolicyName().contains('None')).toBeTruthy(); + expect(findDetailPanelIlmPolicyDetail().exists()).toBeFalsy(); }); test('without an ILM url locator and with an ILM policy', async () => { @@ -453,10 +459,10 @@ describe('Data Streams tab', () => { }); testBed.component.update(); - const { actions, findDetailPanelIlmPolicyLink, findDetailPanelIlmPolicyName } = testBed; + const { actions, findDetailPanelIlmPolicyLink, findDetailPanelIlmPolicyDetail } = testBed; await actions.clickNameAt(0); expect(findDetailPanelIlmPolicyLink().exists()).toBeFalsy(); - expect(findDetailPanelIlmPolicyName().contains('my_ilm_policy')).toBeTruthy(); + expect(findDetailPanelIlmPolicyDetail().contains('my_ilm_policy')).toBeTruthy(); }); }); @@ -489,8 +495,8 @@ describe('Data Streams tab', () => { const { tableCellsValues } = table.getMetaData('dataStreamTable'); expect(tableCellsValues).toEqual([ - ['', `managed-data-stream${nonBreakingSpace}Fleet-managed`, 'green', '1', 'Delete'], - ['', 'non-managed-data-stream', 'green', '1', 'Delete'], + ['', `managed-data-stream${nonBreakingSpace}Fleet-managed`, 'green', '1', '7d', 'Delete'], + ['', 'non-managed-data-stream', 'green', '1', '7d', 'Delete'], ]); }); @@ -499,14 +505,16 @@ describe('Data Streams tab', () => { let { tableCellsValues } = table.getMetaData('dataStreamTable'); expect(tableCellsValues).toEqual([ - ['', `managed-data-stream${nonBreakingSpace}Fleet-managed`, 'green', '1', 'Delete'], - ['', 'non-managed-data-stream', 'green', '1', 'Delete'], + ['', `managed-data-stream${nonBreakingSpace}Fleet-managed`, 'green', '1', '7d', 'Delete'], + ['', 'non-managed-data-stream', 'green', '1', '7d', 'Delete'], ]); actions.toggleViewFilterAt(0); ({ tableCellsValues } = table.getMetaData('dataStreamTable')); - expect(tableCellsValues).toEqual([['', 'non-managed-data-stream', 'green', '1', 'Delete']]); + expect(tableCellsValues).toEqual([ + ['', 'non-managed-data-stream', 'green', '1', '7d', 'Delete'], + ]); }); }); @@ -537,7 +545,7 @@ describe('Data Streams tab', () => { const { tableCellsValues } = table.getMetaData('dataStreamTable'); expect(tableCellsValues).toEqual([ - ['', `hidden-data-stream${nonBreakingSpace}Hidden`, 'green', '1', 'Delete'], + ['', `hidden-data-stream${nonBreakingSpace}Hidden`, 'green', '1', '7d', 'Delete'], ]); }); }); @@ -570,8 +578,8 @@ describe('Data Streams tab', () => { const { tableCellsValues } = table.getMetaData('dataStreamTable'); expect(tableCellsValues).toEqual([ - ['', 'dataStreamNoDelete', 'green', '1', ''], - ['', 'dataStreamWithDelete', 'green', '1', 'Delete'], + ['', 'dataStreamNoDelete', 'green', '1', '7d', ''], + ['', 'dataStreamWithDelete', 'green', '1', '7d', 'Delete'], ]); }); diff --git a/x-pack/plugins/index_management/common/lib/data_stream_serialization.ts b/x-pack/plugins/index_management/common/lib/data_stream_serialization.ts index 5c27c16946325..78593b40b5eaa 100644 --- a/x-pack/plugins/index_management/common/lib/data_stream_serialization.ts +++ b/x-pack/plugins/index_management/common/lib/data_stream_serialization.ts @@ -5,9 +5,9 @@ * 2.0. */ -import { DataStream, DataStreamFromEs, Health } from '../types'; +import { DataStream, EnhancedDataStreamFromEs, Health } from '../types'; -export function deserializeDataStream(dataStreamFromEs: DataStreamFromEs): DataStream { +export function deserializeDataStream(dataStreamFromEs: EnhancedDataStreamFromEs): DataStream { const { name, timestamp_field: timeStampField, @@ -22,6 +22,7 @@ export function deserializeDataStream(dataStreamFromEs: DataStreamFromEs): DataS _meta, privileges, hidden, + lifecycle, } = dataStreamFromEs; return { @@ -44,9 +45,12 @@ export function deserializeDataStream(dataStreamFromEs: DataStreamFromEs): DataS _meta, privileges, hidden, + lifecycle, }; } -export function deserializeDataStreamList(dataStreamsFromEs: DataStreamFromEs[]): DataStream[] { +export function deserializeDataStreamList( + dataStreamsFromEs: EnhancedDataStreamFromEs[] +): DataStream[] { return dataStreamsFromEs.map((dataStream) => deserializeDataStream(dataStream)); } diff --git a/x-pack/plugins/index_management/common/types/data_streams.ts b/x-pack/plugins/index_management/common/types/data_streams.ts index 7ac08f6684466..88e4bc237e819 100644 --- a/x-pack/plugins/index_management/common/types/data_streams.ts +++ b/x-pack/plugins/index_management/common/types/data_streams.ts @@ -5,20 +5,20 @@ * 2.0. */ +import { + ByteSize, + IndicesDataLifecycleWithRollover, + IndicesDataStream, + IndicesDataStreamsStatsDataStreamsStatsItem, + Metadata, +} from '@elastic/elasticsearch/lib/api/types'; + interface TimestampFieldFromEs { name: string; } type TimestampField = TimestampFieldFromEs; -interface MetaFromEs { - managed_by: string; - package: any; - managed: boolean; -} - -type Meta = MetaFromEs; - interface PrivilegesFromEs { delete_index: boolean; } @@ -27,20 +27,13 @@ type Privileges = PrivilegesFromEs; export type HealthFromEs = 'GREEN' | 'YELLOW' | 'RED'; -export interface DataStreamFromEs { - name: string; - timestamp_field: TimestampFieldFromEs; - indices: DataStreamIndexFromEs[]; - generation: number; - _meta?: MetaFromEs; - status: HealthFromEs; - template: string; - ilm_policy?: string; - store_size?: string; - store_size_bytes?: number; - maximum_timestamp?: number; - privileges: PrivilegesFromEs; - hidden: boolean; +export interface EnhancedDataStreamFromEs extends IndicesDataStream { + store_size?: IndicesDataStreamsStatsDataStreamsStatsItem['store_size']; + store_size_bytes?: IndicesDataStreamsStatsDataStreamsStatsItem['store_size_bytes']; + maximum_timestamp?: IndicesDataStreamsStatsDataStreamsStatsItem['maximum_timestamp']; + privileges: { + delete_index: boolean; + }; } export interface DataStreamIndexFromEs { @@ -58,12 +51,13 @@ export interface DataStream { health: Health; indexTemplateName: string; ilmPolicyName?: string; - storageSize?: string; + storageSize?: ByteSize; storageSizeBytes?: number; maxTimeStamp?: number; - _meta?: Meta; + _meta?: Metadata; privileges: Privileges; hidden: boolean; + lifecycle?: IndicesDataLifecycleWithRollover; } export interface DataStreamIndex { diff --git a/x-pack/plugins/index_management/common/types/index.ts b/x-pack/plugins/index_management/common/types/index.ts index ce5d96a842366..f3f2315cdd15b 100644 --- a/x-pack/plugins/index_management/common/types/index.ts +++ b/x-pack/plugins/index_management/common/types/index.ts @@ -13,7 +13,7 @@ export * from './mappings'; export * from './templates'; -export type { DataStreamFromEs, Health, DataStream, DataStreamIndex } from './data_streams'; +export type { EnhancedDataStreamFromEs, Health, DataStream, DataStreamIndex } from './data_streams'; export * from './component_templates'; diff --git a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_detail_panel/data_stream_detail_panel.tsx b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_detail_panel/data_stream_detail_panel.tsx index d3d8b0bc64baf..28fc4a5f15218 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_detail_panel/data_stream_detail_panel.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_detail_panel/data_stream_detail_panel.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useState } from 'react'; +import React, { useState, Fragment } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButton, @@ -41,24 +41,16 @@ interface DetailsListProps { name: string; toolTip: string; content: any; + dataTestSubj: string; }>; } const DetailsList: React.FunctionComponent = ({ details }) => { - const groups: any[] = []; - let items: any[]; + const descriptionListItems = details.map((detail, index) => { + const { name, toolTip, content, dataTestSubj } = detail; - details.forEach((detail, index) => { - const { name, toolTip, content } = detail; - - if (index % 2 === 0) { - items = []; - - groups.push({items}); - } - - items.push( - + return ( + {name} @@ -69,12 +61,27 @@ const DetailsList: React.FunctionComponent = ({ details }) => - {content} - + + {content} + + ); }); - return {groups}; + const midpoint = Math.ceil(descriptionListItems.length / 2); + const descriptionListColumnOne = descriptionListItems.slice(0, midpoint); + const descriptionListColumnTwo = descriptionListItems.slice(-midpoint); + + return ( + + + {descriptionListColumnOne} + + + {descriptionListColumnTwo} + + + ); }; interface Props { @@ -123,23 +130,64 @@ export const DataStreamDetailPanel: React.FunctionComponent = ({ ilmPolicyName, storageSize, maxTimeStamp, + lifecycle, } = dataStream; - const details = [ + + const getManagementDetails = () => { + const managementDetails = []; + + if (lifecycle?.data_retention) { + managementDetails.push({ + name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.dataRetentionTitle', { + defaultMessage: 'Data retention', + }), + toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.dataRetentionToolTip', { + defaultMessage: 'The amount of time to retain the data in the data stream.', + }), + content: lifecycle.data_retention, + dataTestSubj: 'dataRetentionDetail', + }); + } + + if (ilmPolicyName) { + managementDetails.push({ + name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyTitle', { + defaultMessage: 'Index lifecycle policy', + }), + toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyToolTip', { + defaultMessage: `The index lifecycle policy that manages the data in the data stream.`, + }), + content: ilmPolicyLink ? ( + + {ilmPolicyName} + + ) : ( + ilmPolicyName + ), + dataTestSubj: 'ilmPolicyDetail', + }); + } + + return managementDetails; + }; + + const defaultDetails = [ { name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.healthTitle', { defaultMessage: 'Health', }), toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.healthToolTip', { - defaultMessage: `The health of the data stream's current backing indices`, + defaultMessage: `The health of the data stream's current backing indices.`, }), content: , + dataTestSubj: 'healthDetail', }, { name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.maxTimeStampTitle', { defaultMessage: 'Last updated', }), toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.maxTimeStampToolTip', { - defaultMessage: 'The most recent document to be added to the data stream', + defaultMessage: 'The most recent document to be added to the data stream.', }), content: maxTimeStamp ? ( humanizeTimeStamp(maxTimeStamp) @@ -150,22 +198,24 @@ export const DataStreamDetailPanel: React.FunctionComponent = ({ })} ), + dataTestSubj: 'lastUpdatedDetail', }, { name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.storageSizeTitle', { defaultMessage: 'Storage size', }), toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.storageSizeToolTip', { - defaultMessage: `Total size of all shards in the data stream’s backing indices`, + defaultMessage: `The total size of all shards in the data stream’s backing indices.`, }), content: storageSize, + dataTestSubj: 'storageSizeDetail', }, { name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.indicesTitle', { defaultMessage: 'Indices', }), toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.indicesToolTip', { - defaultMessage: `The data stream's current backing indices`, + defaultMessage: `The data stream's current backing indices.`, }), content: ( = ({ {indices.length} ), + dataTestSubj: 'indicesDetail', }, { name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.timestampFieldTitle', { defaultMessage: 'Timestamp field', }), toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.timestampFieldToolTip', { - defaultMessage: 'Timestamp field shared by all documents in the data stream', + defaultMessage: 'The timestamp field shared by all documents in the data stream.', }), content: timeStampField.name, + dataTestSubj: 'timestampDetail', }, { name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.generationTitle', { defaultMessage: 'Generation', }), toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.generationToolTip', { - defaultMessage: 'Cumulative count of backing indices created for the data stream', + defaultMessage: 'The number of backing indices generated for the data stream.', }), content: generation, + dataTestSubj: 'generationDetail', }, { name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.indexTemplateTitle', { @@ -202,7 +255,7 @@ export const DataStreamDetailPanel: React.FunctionComponent = ({ }), toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.indexTemplateToolTip', { defaultMessage: - 'The index template that configured the data stream and configures its backing indices', + 'The index template that configured the data stream and configures its backing indices.', }), content: ( = ({ {indexTemplateName} ), - }, - { - name: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyTitle', { - defaultMessage: 'Index lifecycle policy', - }), - toolTip: i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyToolTip', { - defaultMessage: `The index lifecycle policy that manages the data stream's data`, - }), - content: - ilmPolicyName && ilmPolicyLink ? ( - - {ilmPolicyName} - - ) : ( - ilmPolicyName || ( - - {i18n.translate('xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyContentNoneMessage', { - defaultMessage: `None`, - })} - - ) - ), + dataTestSubj: 'indexTemplateDetail', }, ]; + const managementDetails = getManagementDetails(); + const details = [...defaultDetails, ...managementDetails]; + content = ; } diff --git a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx index 8e070ae7fe125..d67922f3cdcbc 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/data_stream_list/data_stream_table/data_stream_table.tsx @@ -8,7 +8,14 @@ import React, { useState, Fragment } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiInMemoryTable, EuiBasicTableColumn, EuiButton, EuiLink } from '@elastic/eui'; +import { + EuiInMemoryTable, + EuiBasicTableColumn, + EuiButton, + EuiLink, + EuiIcon, + EuiToolTip, +} from '@elastic/eui'; import { ScopedHistory } from '@kbn/core/public'; import { DataStream } from '../../../../../../common/types'; @@ -71,7 +78,6 @@ export const DataStreamTable: React.FunctionComponent = ({ render: (health: DataStream['health']) => { return ; }, - width: '100px', }); if (includeStats) { @@ -80,7 +86,6 @@ export const DataStreamTable: React.FunctionComponent = ({ name: i18n.translate('xpack.idxMgmt.dataStreamList.table.maxTimeStampColumnTitle', { defaultMessage: 'Last updated', }), - width: '300px', truncateText: true, sortable: true, render: (maxTimeStamp: DataStream['maxTimeStamp']) => @@ -120,6 +125,28 @@ export const DataStreamTable: React.FunctionComponent = ({ ), }); + columns.push({ + field: 'lifecycle', + name: ( + + + {i18n.translate('xpack.idxMgmt.dataStreamList.table.dataRetentionColumnTitle', { + defaultMessage: 'Data retention', + })}{' '} + + + + ), + truncateText: true, + sortable: true, + render: (lifecycle: DataStream['lifecycle']) => lifecycle?.data_retention, + }); + columns.push({ name: i18n.translate('xpack.idxMgmt.dataStreamList.table.actionColumnTitle', { defaultMessage: 'Actions', diff --git a/x-pack/plugins/index_management/server/routes/api/data_streams/register_get_route.ts b/x-pack/plugins/index_management/server/routes/api/data_streams/register_get_route.ts index a562cc5f4cc52..0b33fb2a2b5ad 100644 --- a/x-pack/plugins/index_management/server/routes/api/data_streams/register_get_route.ts +++ b/x-pack/plugins/index_management/server/routes/api/data_streams/register_get_route.ts @@ -8,55 +8,28 @@ import { schema, TypeOf } from '@kbn/config-schema'; import { IScopedClusterClient } from '@kbn/core/server'; +import { + IndicesDataStream, + IndicesDataStreamsStatsDataStreamsStatsItem, + SecurityHasPrivilegesResponse, +} from '@elastic/elasticsearch/lib/api/types'; import { deserializeDataStream, deserializeDataStreamList } from '../../../../common/lib'; -import { DataStreamFromEs } from '../../../../common/types'; +import { EnhancedDataStreamFromEs } from '../../../../common/types'; import { RouteDependencies } from '../../../types'; import { addBasePath } from '..'; -interface PrivilegesFromEs { - username: string; - has_all_requested: boolean; - cluster: Record; - index: Record>; - application: Record; -} - -interface StatsFromEs { - data_stream: string; - store_size: string; - store_size_bytes: number; - maximum_timestamp: number; -} - const enhanceDataStreams = ({ dataStreams, dataStreamsStats, dataStreamsPrivileges, }: { - dataStreams: DataStreamFromEs[]; - dataStreamsStats?: StatsFromEs[]; - dataStreamsPrivileges?: PrivilegesFromEs; -}): DataStreamFromEs[] => { - return dataStreams.map((dataStream: DataStreamFromEs) => { - let enhancedDataStream = { ...dataStream }; - - if (dataStreamsStats) { - // eslint-disable-next-line @typescript-eslint/naming-convention - const { store_size, store_size_bytes, maximum_timestamp } = - dataStreamsStats.find( - ({ data_stream: statsName }: { data_stream: string }) => statsName === dataStream.name - ) || {}; - - enhancedDataStream = { - ...enhancedDataStream, - store_size, - store_size_bytes, - maximum_timestamp, - }; - } - - enhancedDataStream = { - ...enhancedDataStream, + dataStreams: IndicesDataStream[]; + dataStreamsStats?: IndicesDataStreamsStatsDataStreamsStatsItem[]; + dataStreamsPrivileges?: SecurityHasPrivilegesResponse; +}): EnhancedDataStreamFromEs[] => { + return dataStreams.map((dataStream) => { + const enhancedDataStream: EnhancedDataStreamFromEs = { + ...dataStream, privileges: { delete_index: dataStreamsPrivileges ? dataStreamsPrivileges.index[dataStream.name].delete_index @@ -64,6 +37,17 @@ const enhanceDataStreams = ({ }, }; + if (dataStreamsStats) { + const currentDataStreamStats: IndicesDataStreamsStatsDataStreamsStatsItem | undefined = + dataStreamsStats.find(({ data_stream: statsName }) => statsName === dataStream.name); + + if (currentDataStreamStats) { + enhancedDataStream.store_size = currentDataStreamStats.store_size; + enhancedDataStream.store_size_bytes = currentDataStreamStats.store_size_bytes; + enhancedDataStream.maximum_timestamp = currentDataStreamStats.maximum_timestamp; + } + } + return enhancedDataStream; }); }; @@ -125,11 +109,8 @@ export function registerGetAllRoute({ router, lib: { handleEsError }, config }: } const enhancedDataStreams = enhanceDataStreams({ - // @ts-expect-error DataStreamFromEs conflicts with @elastic/elasticsearch IndicesGetDataStreamIndicesGetDataStreamItem dataStreams, - // @ts-expect-error StatsFromEs conflicts with @elastic/elasticsearch IndicesDataStreamsStatsDataStreamsStatsItem dataStreamsStats, - // @ts-expect-error PrivilegesFromEs conflicts with @elastic/elasticsearch ApplicationsPrivileges dataStreamsPrivileges, }); @@ -164,11 +145,8 @@ export function registerGetOneRoute({ router, lib: { handleEsError }, config }: } const enhancedDataStreams = enhanceDataStreams({ - // @ts-expect-error DataStreamFromEs conflicts with @elastic/elasticsearch IndicesGetDataStreamIndicesGetDataStreamItem dataStreams, - // @ts-expect-error StatsFromEs conflicts with @elastic/elasticsearch IndicesDataStreamsStatsDataStreamsStatsItem dataStreamsStats, - // @ts-expect-error PrivilegesFromEs conflicts with @elastic/elasticsearch ApplicationsPrivileges dataStreamsPrivileges, }); const body = deserializeDataStream(enhancedDataStreams[0]); diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage.ts index 1364d9a4bd83a..f98c02643dc2e 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const cpuUsage: FormulaValueConfig = { - label: 'CPU Usage', + label: i18n.translate('xpack.infra.assetDetails.formulas.cpuUsage', { + defaultMessage: 'CPU Usage', + }), value: '(average(system.cpu.user.pct) + average(system.cpu.system.pct)) / max(system.cpu.cores)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_iowait.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_iowait.ts index 3e811a7ad517f..b43f77252dcc1 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_iowait.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_iowait.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const cpuUsageIowait: FormulaValueConfig = { - label: 'iowait', + label: i18n.translate('xpack.infra.assetDetails.formulas.cpuUsage.iowaitLabel', { + defaultMessage: 'iowait', + }), value: 'average(system.cpu.iowait.pct) / max(system.cpu.cores)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_irq.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_irq.ts index 68cdbe9b65ea5..f5fb7f2319769 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_irq.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_irq.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const cpuUsageIrq: FormulaValueConfig = { - label: 'irq', + label: i18n.translate('xpack.infra.assetDetails.formulas.cpuUsage.irqLabel', { + defaultMessage: 'irq', + }), value: 'average(system.cpu.irq.pct) / max(system.cpu.cores)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_nice.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_nice.ts index 6ab8e01fec0c7..94093af85a90d 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_nice.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_nice.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const cpuUsageNice: FormulaValueConfig = { - label: 'nice', + label: i18n.translate('xpack.infra.assetDetails.formulas.cpuUsage.niceLabel', { + defaultMessage: 'nice', + }), value: 'average(system.cpu.nice.norm.pct) / max(system.cpu.cores)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_softirq.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_softirq.ts index bb26685b9d8bc..adc9428a24947 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_softirq.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_softirq.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const cpuUsageSoftirq: FormulaValueConfig = { - label: 'softirq', + label: i18n.translate('xpack.infra.assetDetails.formulas.cpuUsage.softirqLabel', { + defaultMessage: 'softirq', + }), value: 'average(system.cpu.softirq.pct) / max(system.cpu.cores)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_steal.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_steal.ts index ec0fa2652427c..4ca7ffb7c3352 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_steal.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_steal.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const cpuUsageSteal: FormulaValueConfig = { - label: 'steal', + label: i18n.translate('xpack.infra.assetDetails.formulas.cpuUsage.stealLabel', { + defaultMessage: 'steal', + }), value: 'average(system.cpu.steal.pct) / max(system.cpu.cores)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_system.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_system.ts index 303ff89aa256e..591734973647b 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_system.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_system.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const cpuUsageSystem: FormulaValueConfig = { - label: 'system', + label: i18n.translate('xpack.infra.assetDetails.formulas.cpuUsage.systemLabel', { + defaultMessage: 'system', + }), value: 'average(system.cpu.system.pct) / max(system.cpu.cores)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_user.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_user.ts index d24c9b82a199a..8fe8d2baf1f3b 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_user.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/cpu_usage_user.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const cpuUsageUser: FormulaValueConfig = { - label: 'user', + label: i18n.translate('xpack.infra.assetDetails.formulas.cpuUsage.userLabel', { + defaultMessage: 'user', + }), value: 'average(system.cpu.user.pct) / max(system.cpu.cores)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_read_iops.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_read_iops.ts index 7af4e67339565..74f3b6b27b2e2 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_read_iops.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_read_iops.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const diskIORead: FormulaValueConfig = { - label: 'Disk Read IOPS', + label: i18n.translate('xpack.infra.assetDetails.formulas.diskIORead', { + defaultMessage: 'Disk Read IOPS', + }), value: "counter_rate(max(system.diskio.read.count), kql='system.diskio.read.count: *')", format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_read_throughput.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_read_throughput.ts index f3f35cb54940f..eb92ba34406e3 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_read_throughput.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_read_throughput.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const diskReadThroughput: FormulaValueConfig = { - label: 'Disk Read Throughput', + label: i18n.translate('xpack.infra.assetDetails.formulas.diskReadThroughput', { + defaultMessage: 'Disk Read Throughput', + }), value: "counter_rate(max(system.diskio.read.bytes), kql='system.diskio.read.bytes: *')", format: { id: 'bytes', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_space_availability.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_space_availability.ts index 11d8346c06d28..02fc69d72b106 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_space_availability.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_space_availability.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const diskSpaceAvailability: FormulaValueConfig = { - label: 'Disk Space Availability', + label: i18n.translate('xpack.infra.assetDetails.formulas.diskSpaceAvailability', { + defaultMessage: 'Disk Space Availability', + }), value: '1 - average(system.filesystem.used.pct)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_space_available.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_space_available.ts index 2d55c085deb0b..f8d34c24ffee0 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_space_available.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_space_available.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const diskSpaceAvailable: FormulaValueConfig = { - label: 'Disk Space Available', + label: i18n.translate('xpack.infra.assetDetails.formulas.diskSpaceAvailable', { + defaultMessage: 'Disk Space Available', + }), value: 'average(system.filesystem.free)', format: { id: 'bytes', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_usage.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_usage.ts index c45ebac82a9e8..bce105387021f 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_usage.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_usage.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const diskUsage: FormulaValueConfig = { - label: 'Disk Usage', + label: i18n.translate('xpack.infra.assetDetails.formulas.diskUsage', { + defaultMessage: 'Disk Usage', + }), value: 'average(system.filesystem.used.pct)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_write_iops.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_write_iops.ts index b3a8e62200c15..6936f6eee3d6c 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_write_iops.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_write_iops.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const diskIOWrite: FormulaValueConfig = { - label: 'Disk Write IOPS', + label: i18n.translate('xpack.infra.assetDetails.formulas.diskIOWrite', { + defaultMessage: 'Disk Write IOPS', + }), value: "counter_rate(max(system.diskio.write.count), kql='system.diskio.write.count: *')", format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_write_throughput.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_write_throughput.ts index 1ba401d011479..6c1a536c7a3a1 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_write_throughput.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/disk_write_throughput.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const diskWriteThroughput: FormulaValueConfig = { - label: 'Disk Write Throughput', + label: i18n.translate('xpack.infra.assetDetails.formulas.diskWriteThroughput', { + defaultMessage: 'Disk Write Throughput', + }), value: "counter_rate(max(system.diskio.write.bytes), kql='system.diskio.write.bytes: *')", format: { id: 'bytes', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/host_count.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/host_count.ts index f34a9d1913e49..1fb01045d6eed 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/host_count.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/host_count.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const hostCount: FormulaValueConfig = { - label: 'Hosts', + label: i18n.translate('xpack.infra.assetDetails.formulas.hostCount.hostsLabel', { + defaultMessage: 'Hosts', + }), value: 'unique_count(host.name)', format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_15m.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_15m.ts index f34ee8aa31bdf..84b865d4081c6 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_15m.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_15m.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const load15m: FormulaValueConfig = { - label: 'Load (15m)', + label: i18n.translate('xpack.infra.assetDetails.formulas.load15m', { + defaultMessage: 'Load (15m)', + }), value: 'average(system.load.15)', format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_1m.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_1m.ts index ac11637fdab56..8656176be2f04 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_1m.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_1m.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const load1m: FormulaValueConfig = { - label: 'Load (1m)', + label: i18n.translate('xpack.infra.assetDetails.formulas.load1m', { + defaultMessage: 'Load (1m)', + }), value: 'average(system.load.1)', format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_5m.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_5m.ts index 1fb8c15fc5888..b76ae333f093d 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_5m.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/load_5m.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const load5m: FormulaValueConfig = { - label: 'Load (5m)', + label: i18n.translate('xpack.infra.assetDetails.formulas.load5m', { + defaultMessage: 'Load (5m)', + }), value: 'average(system.load.5)', format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/log_rate.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/log_rate.ts index 3365efca35ebb..2db54217e3231 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/log_rate.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/log_rate.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const logRate: FormulaValueConfig = { - label: 'Log Rate', + label: i18n.translate('xpack.infra.assetDetails.formulas.logRate', { + defaultMessage: 'Log Rate', + }), value: 'differences(cumulative_sum(count()))', format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_cache.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_cache.ts index 6688f51fb49c5..10e54d99dc62c 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_cache.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_cache.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const memoryCache: FormulaValueConfig = { - label: 'cache', + label: i18n.translate('xpack.infra.assetDetails.formulas.metric.label.cache', { + defaultMessage: 'cache', + }), value: 'average(system.memory.used.bytes) - average(system.memory.actual.used.bytes)', format: { id: 'bytes', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_free.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_free.ts index 5221faa86b3be..8b2032a63a5e6 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_free.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_free.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const memoryFree: FormulaValueConfig = { - label: 'Memory Free', + label: i18n.translate('xpack.infra.assetDetails.formulas.memoryFree', { + defaultMessage: 'Memory Free', + }), value: 'max(system.memory.total) - average(system.memory.actual.used.bytes)', format: { id: 'bytes', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_free_excluding_cache.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_free_excluding_cache.ts index 96890b22a7472..71f03b974bf32 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_free_excluding_cache.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_free_excluding_cache.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const memoryFreeExcludingCache: FormulaValueConfig = { - label: 'free', + label: i18n.translate('xpack.infra.assetDetails.formulas.metric.label.free', { + defaultMessage: 'free', + }), value: 'average(system.memory.free)', format: { id: 'bytes', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_usage.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_usage.ts index d7074968ce8b0..59e09889e65a6 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_usage.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_usage.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const memoryUsage: FormulaValueConfig = { - label: 'Memory Usage', + label: i18n.translate('xpack.infra.assetDetails.formulas.memoryUsage', { + defaultMessage: 'Memory Usage', + }), value: 'average(system.memory.actual.used.pct)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_used.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_used.ts index 8df1f24353d6a..2c02a22f393be 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_used.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/memory_used.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const memoryUsed: FormulaValueConfig = { - label: 'used', + label: i18n.translate('xpack.infra.assetDetails.formulas.metric.label.used', { + defaultMessage: 'used', + }), value: 'average(system.memory.actual.used.bytes)', format: { id: 'bytes', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_active_connections.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_active_connections.ts index a7a8d80706e4c..9420f94ce49d5 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_active_connections.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_active_connections.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const nginxActiveConnections: FormulaValueConfig = { - label: 'Active Connections', + label: i18n.translate('xpack.infra.assetDetails.formulas.nginx.activeConnections', { + defaultMessage: 'Active Connections', + }), value: 'average(nginx.stubstatus.active)', format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_request_rate.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_request_rate.ts index fd1f7a5956286..86b56e8e8bb5a 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_request_rate.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_request_rate.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const nginxRequestRate: FormulaValueConfig = { - label: 'Request Rate', + label: i18n.translate('xpack.infra.assetDetails.formulas.nginx.requestRate', { + defaultMessage: 'Request Rate', + }), value: 'differences(max(nginx.stubstatus.requests))', format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_requests_per_connection.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_requests_per_connection.ts index 752eda44ffcca..0bb168c06a4e8 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_requests_per_connection.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/nginx_requests_per_connection.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const nginxRequestsPerConnection: FormulaValueConfig = { - label: 'Requests Per Connection', + label: i18n.translate('xpack.infra.assetDetails.formulas.nginx.requestsPerConnection', { + defaultMessage: 'Requests Per Connection', + }), value: 'max(nginx.stubstatus.requests) / max(nginx.stubstatus.handled)', format: { id: 'number', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/normalized_load_1m.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/normalized_load_1m.ts index 3071804f3b5b4..d0e70374829e4 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/normalized_load_1m.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/normalized_load_1m.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const normalizedLoad1m: FormulaValueConfig = { - label: 'Normalized Load', + label: i18n.translate('xpack.infra.assetDetails.formulas.normalizedLoad1m', { + defaultMessage: 'Normalized Load', + }), value: 'average(system.load.1) / max(system.load.cores)', format: { id: 'percent', diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/rx.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/rx.ts index 25f03ff811e76..87536f1a573e2 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/rx.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/rx.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const rx: FormulaValueConfig = { - label: 'Network Inbound (RX)', + label: i18n.translate('xpack.infra.assetDetails.formulas.rx', { + defaultMessage: 'Network Inbound (RX)', + }), value: "average(host.network.ingress.bytes) * 8 / (max(metricset.period, kql='host.network.ingress.bytes: *') / 1000)", format: { diff --git a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/tx.ts b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/tx.ts index 42608398e255e..2aefe2c4cd115 100644 --- a/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/tx.ts +++ b/x-pack/plugins/infra/public/common/visualizations/lens/formulas/host/tx.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { FormulaValueConfig } from '@kbn/lens-embeddable-utils'; export const tx: FormulaValueConfig = { - label: 'Network Outbound (TX)', + label: i18n.translate('xpack.infra.assetDetails.formulas.tx', { + defaultMessage: 'Network Outbound (TX)', + }), value: "average(host.network.egress.bytes) * 8 / (max(metricset.period, kql='host.network.egress.bytes: *') / 1000)", format: { diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx index b0e3ec119c532..18213c0bec4c0 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/get_edit_lens_configuration.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { EuiFlyout, EuiLoadingSpinner, EuiOverlayMask } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { Provider } from 'react-redux'; -import { MiddlewareAPI, Dispatch, Action } from '@reduxjs/toolkit'; +import type { MiddlewareAPI, Dispatch, Action } from '@reduxjs/toolkit'; import { css } from '@emotion/react'; import type { CoreStart } from '@kbn/core/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; diff --git a/x-pack/plugins/lens/public/state_management/fullscreen_middleware.ts b/x-pack/plugins/lens/public/state_management/fullscreen_middleware.ts index 5bbcdbf5b15d9..e800d4fed2d1b 100644 --- a/x-pack/plugins/lens/public/state_management/fullscreen_middleware.ts +++ b/x-pack/plugins/lens/public/state_management/fullscreen_middleware.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Dispatch, MiddlewareAPI, Action } from '@reduxjs/toolkit'; +import type { Dispatch, MiddlewareAPI, Action } from '@reduxjs/toolkit'; import { LensGetState, LensStoreDeps } from '.'; import { setToggleFullscreen } from './lens_slice'; diff --git a/x-pack/plugins/lens/public/state_management/index.ts b/x-pack/plugins/lens/public/state_management/index.ts index b426183eebaf2..f2770f2fd2caf 100644 --- a/x-pack/plugins/lens/public/state_management/index.ts +++ b/x-pack/plugins/lens/public/state_management/index.ts @@ -8,10 +8,10 @@ import { configureStore, getDefaultMiddleware, - PreloadedState, - Action, - Dispatch, - MiddlewareAPI, + type PreloadedState, + type Action, + type Dispatch, + type MiddlewareAPI, } from '@reduxjs/toolkit'; import { createLogger } from 'redux-logger'; import { useDispatch, useSelector, TypedUseSelectorHook } from 'react-redux'; diff --git a/x-pack/plugins/licensing/public/plugin.test.ts b/x-pack/plugins/licensing/public/plugin.test.ts index 5c571d0c6a40b..9804f1ba8e1b7 100644 --- a/x-pack/plugins/licensing/public/plugin.test.ts +++ b/x-pack/plugins/licensing/public/plugin.test.ts @@ -16,6 +16,7 @@ import { License } from '../common/license'; import { licenseMock } from '../common/licensing.mock'; import { coreMock } from '@kbn/core/public/mocks'; import { HttpInterceptor } from '@kbn/core/public'; +import type { AnalyticsServiceSetup } from '@kbn/core-analytics-browser'; const coreStart = coreMock.createStart(); describe('licensing plugin', () => { @@ -442,5 +443,69 @@ describe('licensing plugin', () => { expect(removeInterceptorMock).toHaveBeenCalledTimes(1); }); + + it('registers the subscription upsell events', async () => { + const sessionStorage = coreMock.createStorage(); + plugin = new LicensingPlugin(coreMock.createPluginInitializerContext(), sessionStorage); + + const coreSetup = coreMock.createSetup(); + + await plugin.setup(coreSetup); + await plugin.stop(); + + expect(findRegisteredEventTypeByName('subscription__upsell__click', coreSetup.analytics)) + .toMatchInlineSnapshot(` + Array [ + Object { + "eventType": "subscription__upsell__click", + "schema": Object { + "feature": Object { + "_meta": Object { + "description": "A human-readable identifier describing the feature that is being promoted", + }, + "type": "keyword", + }, + "source": Object { + "_meta": Object { + "description": "A human-readable identifier describing the location of the beginning of the subscription flow", + }, + "type": "keyword", + }, + }, + }, + ] + `); + expect(findRegisteredEventTypeByName('subscription__upsell__impression', coreSetup.analytics)) + .toMatchInlineSnapshot(` + Array [ + Object { + "eventType": "subscription__upsell__impression", + "schema": Object { + "feature": Object { + "_meta": Object { + "description": "A human-readable identifier describing the feature that is being promoted", + }, + "type": "keyword", + }, + "source": Object { + "_meta": Object { + "description": "A human-readable identifier describing the location of the beginning of the subscription flow", + }, + "type": "keyword", + }, + }, + }, + ] + `); + }); }); }); + +function findRegisteredEventTypeByName( + eventTypeName: string, + analyticsClientMock: jest.Mocked +) { + return analyticsClientMock.registerEventType.mock.calls.find( + ([{ eventType }]) => eventType === eventTypeName + )!; +} diff --git a/x-pack/plugins/licensing/public/plugin.ts b/x-pack/plugins/licensing/public/plugin.ts index 3953a29a08214..bc350675d7dd2 100644 --- a/x-pack/plugins/licensing/public/plugin.ts +++ b/x-pack/plugins/licensing/public/plugin.ts @@ -8,6 +8,7 @@ import { Observable, Subject, Subscription } from 'rxjs'; import { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/public'; +import { registerEvents as registerSubscriptionTrackingEvents } from '@kbn/subscription-tracking'; import { ILicense } from '../common/types'; import { LicensingPluginSetup, LicensingPluginStart } from './types'; import { createLicenseUpdate } from '../common/license_update'; @@ -84,6 +85,7 @@ export class LicensingPlugin implements Plugin { if (license.isAvailable) { diff --git a/x-pack/plugins/licensing/tsconfig.json b/x-pack/plugins/licensing/tsconfig.json index 0abd1517b2d3a..323f77b3b0ebc 100644 --- a/x-pack/plugins/licensing/tsconfig.json +++ b/x-pack/plugins/licensing/tsconfig.json @@ -2,13 +2,9 @@ "extends": "../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", - "isolatedModules": true, + "isolatedModules": true }, - "include": [ - "public/**/*", - "server/**/*", - "common/**/*" - ], + "include": ["public/**/*", "server/**/*", "common/**/*"], "kbn_references": [ "@kbn/core", "@kbn/kibana-react-plugin", @@ -18,8 +14,8 @@ "@kbn/std", "@kbn/i18n", "@kbn/analytics-client", + "@kbn/subscription-tracking", + "@kbn/core-analytics-browser" ], - "exclude": [ - "target/**/*", - ] + "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/log_explorer/README.md b/x-pack/plugins/log_explorer/README.md index bb4a266988a33..bc504d0351804 100755 --- a/x-pack/plugins/log_explorer/README.md +++ b/x-pack/plugins/log_explorer/README.md @@ -1,8 +1,66 @@ # Log Explorer -This plugin provides a `LogExplorer` component using the Discover customization framework, offering several affordances specifically designed for log consumption. +This plugin is home to the `` component and related types. It implements several of the underlying concepts that the [Observability Log Explorer app](../observability_log_explorer) builds upon. -The plugin enhances the capabilities of Discover in the following ways: +## Developing the `` component -- **Dataset selector**: this customization replaces the DataViews picker with a Logs dataset selector built ad-hoc to provide a better experience when navigating throught all the available datasets. +⚠ The Log Explorer is in early stages of development, so the following partly describes the current situation and partly the intended future scenario. +### Dependencies + +The goal is for this component to be easy to consume by other Kibana plugins. This means that we should avoid introducing any dependency on plugins that might be consumers. If a situation arises, that would close a cycle in the directed dependency graph, we can take one of two approaches: + +- If the newly depended-upon code is not bound to the Kibana plugin life-cycle, it can be factored out into a package that both plugins depend on. +- If it requires integration with the Kibana plugin life-cycle we can invert the direction of the dependency edge by offering a registration API. + +We also want to make this plugin available for consumption in deployments without any observability apps. Any observability-specific concepts should therefore be implemented in the `observability_log_explorer` plugin instead. + +While not fully realized yet, the dependency graph would roughly resemble the following: + +```mermaid +flowchart TD + +obs_log_explorer_app(Observability Log Explorer app) +obs_apps(Other Observability apps) +obs_log_explorer_component(Observability Log Explorer component) +other_apps(Other non-Observability apps) +log_explorer_component(Log Explorer component) +platform(Kibana Platform) +discover(Discover Main container) +fleet(Fleet / EPM) + +obs_log_explorer_app --> obs_log_explorer_component +obs_apps --> obs_log_explorer_component +obs_log_explorer_component --> log_explorer_component +other_apps --> log_explorer_component +log_explorer_component --> discover +log_explorer_component --> platform +log_explorer_component --> fleet +discover --> platform +fleet --> platform +``` + +### API + +When designing the API we face two conflicting goals: + +- It should be easy to consume by any non-observability app. This means... + - its API needs to be relatively stable and straightforward. + - it should not perform any page-wide changes that could interfere with consuming app's page state (such as URL changes). +- It should be extensible so the Observability Log Explorer can build on top of this. + +In its current state the `` achieves neither goal. To resolve the tension in the future we could export two variants with different sets of properties. + +### Principles + +**State drives the UI**: When the state and side-effects are scattered throughout the react element hierarchy using hooks, it becomes difficult to reason about the overall application state and the order in which transitions and side-effects take place. To avoid that we're aiming for an approach in which a hierarchy of statecharts is started, that encode state, transitions, and side-effects. + +**Minimize custom styling**: EUI is a great library of React components that cover 99% of the use cases. For the 1%, in which an EUI component doesn't quite fit the needs, we should try to enhance EUI instead of overriding its styles locally. + +## Resources + +- [Statecharts overview](https://statecharts.dev/) +- [Statecharts: A Visual Formalism For Complex Systems (original paper)](https://www.wisdom.weizmann.ac.il/~harel/papers/Statecharts.pdf) +- [XState documentation](https://stately.ai/docs/xstate) +- [XState VS Code extension](https://stately.ai/docs/tools/xstate-vscode-extension) +- [`infra` plugin's state machine patterns](../infra/docs/state_machines/README.md) diff --git a/x-pack/plugins/monitoring/server/lib/beats/_beats_stats.ts b/x-pack/plugins/monitoring/server/lib/beats/_beats_stats.ts index e63e28f9f3e7a..2f423afbb0501 100644 --- a/x-pack/plugins/monitoring/server/lib/beats/_beats_stats.ts +++ b/x-pack/plugins/monitoring/server/lib/beats/_beats_stats.ts @@ -9,6 +9,18 @@ import { upperFirst } from 'lodash'; import type { BeatsElasticsearchResponse, BucketCount } from './types'; export const getDiffCalculation = (max: number | null, min: number | null) => { + /* + Note: This function calculates the delta between the first and last document in the time range + in order to display in the UI. If both the first and last document have the same counter value + reported, which may happen when events are not happening continuously, the UI will display 0. + Another case where the UI might display confusing information is in case the Beat was not + monitored from the start, in which case the first ingested document will have a non 0 counter + value. As an example, if Filebeat has ingested 30 000 lines when the monitoring starts, the + first document will have the counter set to 30 000, if another 20 000 documents are collected + the delta will only show 20 000 rather than the counter value of 50 000. The fact that the + counter "started" (from the perspective of monitoring) at 30 000 is lost. + */ + // no need to test max >= 0, but min <= 0 which is normal for a derivative after restart // because we are aggregating/collapsing on ephemeral_ids if (max !== null && min !== null && max >= 0 && min >= 0 && max >= min) { diff --git a/x-pack/plugins/observability/common/constants.ts b/x-pack/plugins/observability/common/constants.ts index 3ba31bb1ee1eb..97f4341168fd9 100644 --- a/x-pack/plugins/observability/common/constants.ts +++ b/x-pack/plugins/observability/common/constants.ts @@ -10,7 +10,7 @@ import { AlertConsumers } from '@kbn/rule-data-utils'; import type { ValidFeatureId } from '@kbn/rule-data-utils'; export const SLO_BURN_RATE_RULE_TYPE_ID = 'slo.rules.burnRate'; -export const OBSERVABILITY_THRESHOLD_RULE_TYPE_ID = 'observability.rules.threshold'; +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'; diff --git a/x-pack/plugins/observability/common/threshold_rule/color_palette.ts b/x-pack/plugins/observability/common/custom_threshold_rule/color_palette.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/color_palette.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/color_palette.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/constants.ts b/x-pack/plugins/observability/common/custom_threshold_rule/constants.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/constants.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/constants.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/formatters/bytes.test.ts b/x-pack/plugins/observability/common/custom_threshold_rule/formatters/bytes.test.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/formatters/bytes.test.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/formatters/bytes.test.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/formatters/bytes.ts b/x-pack/plugins/observability/common/custom_threshold_rule/formatters/bytes.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/formatters/bytes.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/formatters/bytes.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/formatters/datetime.ts b/x-pack/plugins/observability/common/custom_threshold_rule/formatters/datetime.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/formatters/datetime.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/formatters/datetime.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/formatters/high_precision.ts b/x-pack/plugins/observability/common/custom_threshold_rule/formatters/high_precision.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/formatters/high_precision.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/formatters/high_precision.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/formatters/index.ts b/x-pack/plugins/observability/common/custom_threshold_rule/formatters/index.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/formatters/index.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/formatters/index.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/formatters/number.ts b/x-pack/plugins/observability/common/custom_threshold_rule/formatters/number.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/formatters/number.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/formatters/number.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/formatters/percent.ts b/x-pack/plugins/observability/common/custom_threshold_rule/formatters/percent.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/formatters/percent.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/formatters/percent.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/formatters/snapshot_metric_formats.ts b/x-pack/plugins/observability/common/custom_threshold_rule/formatters/snapshot_metric_formats.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/formatters/snapshot_metric_formats.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/formatters/snapshot_metric_formats.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/formatters/types.ts b/x-pack/plugins/observability/common/custom_threshold_rule/formatters/types.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/formatters/types.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/formatters/types.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/metric_value_formatter.test.ts b/x-pack/plugins/observability/common/custom_threshold_rule/metric_value_formatter.test.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/metric_value_formatter.test.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/metric_value_formatter.test.ts diff --git a/x-pack/plugins/observability/common/threshold_rule/metric_value_formatter.ts b/x-pack/plugins/observability/common/custom_threshold_rule/metric_value_formatter.ts similarity index 89% rename from x-pack/plugins/observability/common/threshold_rule/metric_value_formatter.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/metric_value_formatter.ts index 1ba0879fcf465..114f30fd85307 100644 --- a/x-pack/plugins/observability/common/threshold_rule/metric_value_formatter.ts +++ b/x-pack/plugins/observability/common/custom_threshold_rule/metric_value_formatter.ts @@ -10,7 +10,7 @@ import { createFormatter } from './formatters'; export const metricValueFormatter = (value: number | null, metric: string = '') => { const noDataValue = i18n.translate( - 'xpack.observability.threshold.rule.alerting.noDataFormattedValue', + 'xpack.observability.customThreshold.rule.alerting.noDataFormattedValue', { defaultMessage: '[NO DATA]', } diff --git a/x-pack/plugins/observability/common/threshold_rule/metrics_explorer.ts b/x-pack/plugins/observability/common/custom_threshold_rule/metrics_explorer.ts similarity index 96% rename from x-pack/plugins/observability/common/threshold_rule/metrics_explorer.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/metrics_explorer.ts index d735e398e6661..66913385123c4 100644 --- a/x-pack/plugins/observability/common/threshold_rule/metrics_explorer.ts +++ b/x-pack/plugins/observability/common/custom_threshold_rule/metrics_explorer.ts @@ -7,19 +7,7 @@ import * as rt from 'io-ts'; import { xor } from 'lodash'; - -export const METRIC_EXPLORER_AGGREGATIONS = [ - 'avg', - 'max', - 'min', - 'cardinality', - 'rate', - 'count', - 'sum', - 'p95', - 'p99', - 'custom', -] as const; +import { METRIC_EXPLORER_AGGREGATIONS } from './constants'; export const OMITTED_AGGREGATIONS_FOR_CUSTOM_METRICS = ['custom', 'rate', 'p95', 'p99']; diff --git a/x-pack/plugins/observability/common/threshold_rule/types.ts b/x-pack/plugins/observability/common/custom_threshold_rule/types.ts similarity index 100% rename from x-pack/plugins/observability/common/threshold_rule/types.ts rename to x-pack/plugins/observability/common/custom_threshold_rule/types.ts diff --git a/x-pack/plugins/observability/public/components/threshold/components/__snapshots__/alert_details_app_section.test.tsx.snap b/x-pack/plugins/observability/public/components/custom_threshold/components/__snapshots__/alert_details_app_section.test.tsx.snap similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/components/__snapshots__/alert_details_app_section.test.tsx.snap rename to x-pack/plugins/observability/public/components/custom_threshold/components/__snapshots__/alert_details_app_section.test.tsx.snap diff --git a/x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.test.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.test.tsx similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.test.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.test.tsx diff --git a/x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx similarity index 95% rename from x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx index 95367577ccb22..ecb31f4a49b4b 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/alert_details_app_section.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/alert_details_app_section.tsx @@ -32,13 +32,13 @@ import { import { DataView } from '@kbn/data-views-plugin/common'; import type { TimeRange } from '@kbn/es-query'; import { useKibana } from '../../../utils/kibana_react'; -import { metricValueFormatter } from '../../../../common/threshold_rule/metric_value_formatter'; +import { metricValueFormatter } from '../../../../common/custom_threshold_rule/metric_value_formatter'; import { AlertSummaryField, TopAlert } from '../../..'; import { generateUniqueKey } from '../lib/generate_unique_key'; import { ExpressionChart } from './expression_chart'; import { TIME_LABELS } from './criterion_preview_chart/criterion_preview_chart'; -import { Threshold } from './threshold'; +import { Threshold } from './custom_threshold'; import { MetricsExplorerChartType } from '../hooks/use_metrics_explorer_options'; import { AlertParams, MetricExpression, MetricThresholdRuleTypeParams } from '../types'; @@ -98,7 +98,7 @@ export default function AlertDetailsAppSection({ setAlertSummaryFields([ { label: i18n.translate( - 'xpack.observability.threshold.rule.alertDetailsAppSection.summaryField.rule', + 'xpack.observability.customThreshold.rule.alertDetailsAppSection.summaryField.rule', { defaultMessage: 'Rule', } @@ -160,7 +160,7 @@ export default function AlertDetailsAppSection({ @@ -132,7 +132,7 @@ export function ErrorState() { diff --git a/x-pack/plugins/observability/public/components/threshold/components/criterion_preview_chart/threshold_annotations.test.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/criterion_preview_chart/threshold_annotations.test.tsx similarity index 96% rename from x-pack/plugins/observability/public/components/threshold/components/criterion_preview_chart/threshold_annotations.test.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/criterion_preview_chart/threshold_annotations.test.tsx index c07e053374644..a8e64ac343a0f 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/criterion_preview_chart/threshold_annotations.test.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/criterion_preview_chart/threshold_annotations.test.tsx @@ -4,8 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { Color } from '../../../../../common/threshold_rule/color_palette'; -import { Comparator } from '../../../../../common/threshold_rule/types'; +import { Color } from '../../../../../common/custom_threshold_rule/color_palette'; +import { Comparator } from '../../../../../common/custom_threshold_rule/types'; import { shallow } from 'enzyme'; import React from 'react'; diff --git a/x-pack/plugins/observability/public/components/threshold/components/criterion_preview_chart/threshold_annotations.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/criterion_preview_chart/threshold_annotations.tsx similarity index 95% rename from x-pack/plugins/observability/public/components/threshold/components/criterion_preview_chart/threshold_annotations.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/criterion_preview_chart/threshold_annotations.tsx index 09bd7e21fdc10..e911eba6ad6c8 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/criterion_preview_chart/threshold_annotations.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/criterion_preview_chart/threshold_annotations.tsx @@ -7,8 +7,8 @@ import { AnnotationDomainType, LineAnnotation, RectAnnotation } from '@elastic/charts'; import { first, last } from 'lodash'; import React from 'react'; -import { Color, colorTransformer } from '../../../../../common/threshold_rule/color_palette'; -import { Comparator } from '../../../../../common/threshold_rule/types'; +import { Color, colorTransformer } from '../../../../../common/custom_threshold_rule/color_palette'; +import { Comparator } from '../../../../../common/custom_threshold_rule/types'; interface ThresholdAnnotationsProps { threshold: number[]; diff --git a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.stories.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/custom_equation/custom_equation_editor.stories.tsx similarity index 98% rename from x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.stories.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/custom_equation/custom_equation_editor.stories.tsx index f7480aa1de513..f58894e7918d9 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.stories.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/custom_equation/custom_equation_editor.stories.tsx @@ -13,7 +13,7 @@ import { Aggregators, Comparator, MetricExpressionParams, -} from '../../../../../common/threshold_rule/types'; +} from '../../../../../common/custom_threshold_rule/types'; import { TimeUnitChar } from '../../../../../common'; import { CustomEquationEditor, CustomEquationEditorProps } from './custom_equation_editor'; diff --git a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/custom_equation/custom_equation_editor.tsx similarity index 92% rename from x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/custom_equation/custom_equation_editor.tsx index ed3dc975b2d07..d41f5d5b0b85b 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/custom_equation/custom_equation_editor.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/custom_equation/custom_equation_editor.tsx @@ -21,12 +21,12 @@ import { IErrorObject } from '@kbn/triggers-actions-ui-plugin/public'; import { FormattedMessage } from '@kbn/i18n-react'; import { DataViewBase } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; -import { OMITTED_AGGREGATIONS_FOR_CUSTOM_METRICS } from '../../../../../common/threshold_rule/metrics_explorer'; +import { OMITTED_AGGREGATIONS_FOR_CUSTOM_METRICS } from '../../../../../common/custom_threshold_rule/metrics_explorer'; import { Aggregators, CustomMetricAggTypes, CustomThresholdExpressionMetric, -} from '../../../../../common/threshold_rule/types'; +} from '../../../../../common/custom_threshold_rule/types'; import { MetricExpression } from '../../types'; import { CustomMetrics, AggregationTypes, NormalizedFields } from './types'; @@ -148,7 +148,7 @@ export function CustomEquationEditor({ isDisabled={disableAdd} > @@ -160,7 +160,7 @@ export function CustomEquationEditor({ setCustomEqPopoverOpen(false)}>   setAggTypePopoverOpen(false)}> @@ -154,7 +157,7 @@ export function MetricRowWithAgg({ @@ -195,7 +198,7 @@ export function MetricRowWithAgg({ ) : ( { const renderComponent = (props: Partial = {}) => { diff --git a/x-pack/plugins/observability/public/components/threshold/components/threshold.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/custom_threshold.tsx similarity index 81% rename from x-pack/plugins/observability/public/components/threshold/components/threshold.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/custom_threshold.tsx index 28ae78cdccf27..0dd80826899b0 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/threshold.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/custom_threshold.tsx @@ -10,7 +10,7 @@ import { Chart, Metric, Settings } from '@elastic/charts'; import { EuiIcon, EuiPanel, useEuiBackgroundColor } from '@elastic/eui'; import type { PartialTheme, Theme } from '@elastic/charts'; import { i18n } from '@kbn/i18n'; -import { Comparator } from '../../../../common/threshold_rule/types'; +import { Comparator } from '../../../../common/custom_threshold_rule/types'; export interface ChartProps { theme: PartialTheme; @@ -60,10 +60,13 @@ export function Threshold({ title, extra: ( - {i18n.translate('xpack.observability.threshold.rule.thresholdExtraTitle', { - values: { comparator, threshold: valueFormatter(threshold) }, - defaultMessage: `Alert when {comparator} {threshold}`, - })} + {i18n.translate( + 'xpack.observability.customThreshold.rule.thresholdExtraTitle', + { + values: { comparator, threshold: valueFormatter(threshold) }, + defaultMessage: `Alert when {comparator} {threshold}`, + } + )} ), color, diff --git a/x-pack/plugins/observability/public/components/threshold/components/expression_chart.test.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.test.tsx similarity index 96% rename from x-pack/plugins/observability/public/components/threshold/components/expression_chart.test.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.test.tsx index 83c05b5694030..e9d6d2c726665 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/expression_chart.test.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.test.tsx @@ -14,7 +14,7 @@ import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; import { coreMock as mockCoreMock } from '@kbn/core/public/mocks'; import { MetricExpression } from '../types'; import { ExpressionChart } from './expression_chart'; -import { Aggregators, Comparator } from '../../../../common/threshold_rule/types'; +import { Aggregators, Comparator } from '../../../../common/custom_threshold_rule/types'; const mockStartServices = mockCoreMock.createStart(); diff --git a/x-pack/plugins/observability/public/components/threshold/components/expression_chart.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.tsx similarity index 94% rename from x-pack/plugins/observability/public/components/threshold/components/expression_chart.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.tsx index 4172175a3b573..8dcb31dd96be5 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/expression_chart.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_chart.tsx @@ -27,12 +27,12 @@ import { useKibana } from '../../../utils/kibana_react'; import { MetricsExplorerAggregation, MetricsExplorerRow, -} from '../../../../common/threshold_rule/metrics_explorer'; -import { Color } from '../../../../common/threshold_rule/color_palette'; +} from '../../../../common/custom_threshold_rule/metrics_explorer'; +import { Color } from '../../../../common/custom_threshold_rule/color_palette'; import { MetricsExplorerChartType, MetricsExplorerOptionsMetric, -} from '../../../../common/threshold_rule/types'; +} from '../../../../common/custom_threshold_rule/types'; import { MetricExpression, TimeRange } from '../types'; import { createFormatterForMetric } from '../helpers/create_formatter_for_metric'; import { useMetricsExplorerChartData } from '../hooks/use_metrics_explorer_chart_data'; @@ -213,7 +213,7 @@ export function ExpressionChart({ {series.id !== 'ALL' ? ( @@ -221,7 +221,7 @@ export function ExpressionChart({ ) : ( diff --git a/x-pack/plugins/observability/public/components/threshold/components/expression_row.test.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_row.test.tsx similarity index 97% rename from x-pack/plugins/observability/public/components/threshold/components/expression_row.test.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/expression_row.test.tsx index 7a7536849c187..ed0c4c52f772c 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/expression_row.test.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_row.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { Comparator } from '../../../../common/threshold_rule/types'; +import { Comparator } from '../../../../common/custom_threshold_rule/types'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; import React from 'react'; import { act } from 'react-dom/test-utils'; diff --git a/x-pack/plugins/observability/public/components/threshold/components/expression_row.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_row.tsx similarity index 82% rename from x-pack/plugins/observability/public/components/threshold/components/expression_row.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/expression_row.tsx index df8c7916ecba7..e508977658c0c 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/expression_row.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/expression_row.tsx @@ -24,7 +24,7 @@ import { } from '@kbn/triggers-actions-ui-plugin/public'; import { DataViewBase } from '@kbn/es-query'; import { debounce } from 'lodash'; -import { Comparator } from '../../../../common/threshold_rule/types'; +import { Comparator } from '../../../../common/custom_threshold_rule/types'; import { AGGREGATION_TYPES, DerivedIndexPattern, MetricExpression } from '../types'; import { CustomEquationEditor } from './custom_equation'; import { CUSTOM_EQUATION, LABEL_HELP_MESSAGE, LABEL_LABEL } from '../i18n_strings'; @@ -33,7 +33,7 @@ import { decimalToPct, pctToDecimal } from '../helpers/corrected_percent_convert const customComparators = { ...builtInComparators, [Comparator.OUTSIDE_RANGE]: { - text: i18n.translate('xpack.observability.threshold.rule.alertFlyout.outsideRangeLabel', { + text: i18n.translate('xpack.observability.customThreshold.rule.alertFlyout.outsideRangeLabel', { defaultMessage: 'Is not between', }), value: Comparator.OUTSIDE_RANGE, @@ -175,7 +175,7 @@ export const ExpressionRow: React.FC = (props) => { ({ id: 1, - title: i18n.translate('xpack.observability.threshold.rule.infrastructureDropdownTitle', { - defaultMessage: 'Infrastructure rules', - }), + title: i18n.translate( + 'xpack.observability.customThreshold.rule.infrastructureDropdownTitle', + { + defaultMessage: 'Infrastructure rules', + } + ), items: [ { 'data-test-subj': 'inventory-alerts-create-rule', - name: i18n.translate('xpack.observability.threshold.rule.createInventoryRuleButton', { - defaultMessage: 'Create inventory rule', - }), + name: i18n.translate( + 'xpack.observability.customThreshold.rule.createInventoryRuleButton', + { + defaultMessage: 'Create inventory rule', + } + ), onClick: () => { closePopover(); setVisibleFlyoutType('inventory'); @@ -66,15 +72,18 @@ export function MetricsAlertDropdown() { const metricsAlertsPanel = useMemo( () => ({ id: 2, - title: i18n.translate('xpack.observability.threshold.rule.metricsDropdownTitle', { + title: i18n.translate('xpack.observability.customThreshold.rule.metricsDropdownTitle', { defaultMessage: 'Metrics rules', }), items: [ { 'data-test-subj': 'metrics-threshold-alerts-create-rule', - name: i18n.translate('xpack.observability.threshold.rule.createThresholdRuleButton', { - defaultMessage: 'Create threshold rule', - }), + name: i18n.translate( + 'xpack.observability.customThreshold.rule.createThresholdRuleButton', + { + defaultMessage: 'Create threshold rule', + } + ), onClick: () => { closePopover(); setVisibleFlyoutType('threshold'); @@ -89,7 +98,7 @@ export function MetricsAlertDropdown() { const manageAlertsMenuItem = useMemo( () => ({ - name: i18n.translate('xpack.observability.threshold.rule.manageRules', { + name: i18n.translate('xpack.observability.customThreshold.rule.manageRules', { defaultMessage: 'Manage rules', }), icon: 'tableOfContents', @@ -105,7 +114,7 @@ export function MetricsAlertDropdown() { { 'data-test-subj': 'inventory-alerts-menu-option', name: i18n.translate( - 'xpack.observability.threshold.rule.infrastructureDropdownMenu', + 'xpack.observability.customThreshold.rule.infrastructureDropdownMenu', { defaultMessage: 'Infrastructure', } @@ -114,7 +123,7 @@ export function MetricsAlertDropdown() { }, { 'data-test-subj': 'metrics-threshold-alerts-menu-option', - name: i18n.translate('xpack.observability.threshold.rule.metricsDropdownMenu', { + name: i18n.translate('xpack.observability.customThreshold.rule.metricsDropdownMenu', { defaultMessage: 'Metrics', }), panel: 2, @@ -130,7 +139,7 @@ export function MetricsAlertDropdown() { [ { id: 0, - title: i18n.translate('xpack.observability.threshold.rule.alertDropdownTitle', { + title: i18n.translate('xpack.observability.customThreshold.rule.alertDropdownTitle', { defaultMessage: 'Alerts and rules', }), items: firstPanelMenuItems, @@ -152,7 +161,7 @@ export function MetricsAlertDropdown() { data-test-subj="thresholdRuleStructure-alerts-and-rules" > diff --git a/x-pack/plugins/observability/public/components/threshold/components/series_chart.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/series_chart.tsx similarity index 93% rename from x-pack/plugins/observability/public/components/threshold/components/series_chart.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/series_chart.tsx index c7716c474b22c..c0e35c85580bc 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/series_chart.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/series_chart.tsx @@ -14,12 +14,12 @@ import { AreaSeriesStyle, BarSeriesStyle, } from '@elastic/charts'; -import { MetricsExplorerSeries } from '../../../../common/threshold_rule/metrics_explorer'; -import { Color, colorTransformer } from '../../../../common/threshold_rule/color_palette'; +import { MetricsExplorerSeries } from '../../../../common/custom_threshold_rule/metrics_explorer'; +import { Color, colorTransformer } from '../../../../common/custom_threshold_rule/color_palette'; import { MetricsExplorerChartType, MetricsExplorerOptionsMetric, -} from '../../../../common/threshold_rule/types'; +} from '../../../../common/custom_threshold_rule/types'; import { getMetricId } from '../helpers/get_metric_id'; import { useKibanaTimeZoneSetting } from '../hooks/use_kibana_time_zone_setting'; diff --git a/x-pack/plugins/observability/public/components/threshold/components/triggers_actions_context.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/triggers_actions_context.tsx similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/components/triggers_actions_context.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/triggers_actions_context.tsx diff --git a/x-pack/plugins/observability/public/components/threshold/components/validation.test.ts b/x-pack/plugins/observability/public/components/custom_threshold/components/validation.test.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/components/validation.test.ts rename to x-pack/plugins/observability/public/components/custom_threshold/components/validation.test.ts diff --git a/x-pack/plugins/observability/public/components/threshold/components/validation.tsx b/x-pack/plugins/observability/public/components/custom_threshold/components/validation.tsx similarity index 76% rename from x-pack/plugins/observability/public/components/threshold/components/validation.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/components/validation.tsx index 4f5c818d7943d..d40a1f2852bcc 100644 --- a/x-pack/plugins/observability/public/components/threshold/components/validation.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/components/validation.tsx @@ -15,7 +15,7 @@ import { Comparator, CustomMetricExpressionParams, MetricExpressionParams, -} from '../../../../common/threshold_rule/types'; +} from '../../../../common/custom_threshold_rule/types'; export const EQUATION_REGEX = /[^A-Z|+|\-|\s|\d+|\.|\(|\)|\/|\*|>|<|=|\?|\:|&|\!|\|]+/g; @@ -57,7 +57,7 @@ export function validateMetricThreshold({ if (!searchConfiguration || !searchConfiguration.index) { errors.searchConfiguration = [ i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.error.invalidSearchConfiguration', + 'xpack.observability.customThreshold.rule.alertFlyout.error.invalidSearchConfiguration', { defaultMessage: 'Data view is required.', } @@ -74,9 +74,12 @@ export function validateMetricThreshold({ ); } catch (e) { errors.filterQuery = [ - i18n.translate('xpack.observability.threshold.rule.alertFlyout.error.invalidFilterQuery', { - defaultMessage: 'Filter query is invalid.', - }), + i18n.translate( + 'xpack.observability.customThreshold.rule.alertFlyout.error.invalidFilterQuery', + { + defaultMessage: 'Filter query is invalid.', + } + ), ]; } } @@ -106,25 +109,34 @@ export function validateMetricThreshold({ }; if (!c.aggType) { errors[id].aggField.push( - i18n.translate('xpack.observability.threshold.rule.alertFlyout.error.aggregationRequired', { - defaultMessage: 'Aggregation is required.', - }) + i18n.translate( + 'xpack.observability.customThreshold.rule.alertFlyout.error.aggregationRequired', + { + defaultMessage: 'Aggregation is required.', + } + ) ); } if (!c.threshold || !c.threshold.length) { errors[id].critical.threshold0.push( - i18n.translate('xpack.observability.threshold.rule.alertFlyout.error.thresholdRequired', { - defaultMessage: 'Threshold is required.', - }) + i18n.translate( + 'xpack.observability.customThreshold.rule.alertFlyout.error.thresholdRequired', + { + defaultMessage: 'Threshold is required.', + } + ) ); } if (c.warningThreshold && !c.warningThreshold.length) { errors[id].warning.threshold0.push( - i18n.translate('xpack.observability.threshold.rule.alertFlyout.error.thresholdRequired', { - defaultMessage: 'Threshold is required.', - }) + i18n.translate( + 'xpack.observability.customThreshold.rule.alertFlyout.error.thresholdRequired', + { + defaultMessage: 'Threshold is required.', + } + ) ); } @@ -145,7 +157,7 @@ export function validateMetricThreshold({ const key = i === 0 ? 'threshold0' : 'threshold1'; errors[id][type][key].push( i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.error.thresholdTypeRequired', + 'xpack.observability.customThreshold.rule.alertFlyout.error.thresholdTypeRequired', { defaultMessage: 'Thresholds must contain a valid number.', } @@ -157,16 +169,19 @@ export function validateMetricThreshold({ if (comparator === Comparator.BETWEEN && (!threshold || threshold.length < 2)) { errors[id][type].threshold1.push( - i18n.translate('xpack.observability.threshold.rule.alertFlyout.error.thresholdRequired', { - defaultMessage: 'Threshold is required.', - }) + i18n.translate( + 'xpack.observability.customThreshold.rule.alertFlyout.error.thresholdRequired', + { + defaultMessage: 'Threshold is required.', + } + ) ); } } if (!c.timeSize) { errors[id].timeWindowSize.push( - i18n.translate('xpack.observability.threshold.rule.alertFlyout.error.timeRequred', { + i18n.translate('xpack.observability.customThreshold.rule.alertFlyout.error.timeRequred', { defaultMessage: 'Time size is Required.', }) ); @@ -174,16 +189,19 @@ export function validateMetricThreshold({ if (c.aggType !== 'count' && c.aggType !== 'custom' && !c.metric) { errors[id].metric.push( - i18n.translate('xpack.observability.threshold.rule.alertFlyout.error.metricRequired', { - defaultMessage: 'Metric is required.', - }) + i18n.translate( + 'xpack.observability.customThreshold.rule.alertFlyout.error.metricRequired', + { + defaultMessage: 'Metric is required.', + } + ) ); } if (isCustomMetricExpressionParams(c)) { if (!c.metrics || (c.metrics && c.metrics.length < 1)) { errors[id].metricsError = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.error.metricsError', + 'xpack.observability.customThreshold.rule.alertFlyout.error.metricsError', { defaultMessage: 'You must define at least 1 custom metric', } @@ -193,7 +211,7 @@ export function validateMetricThreshold({ const customMetricErrors: { aggType?: string; field?: string; filter?: string } = {}; if (!metric.aggType) { customMetricErrors.aggType = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.error.metrics.aggTypeRequired', + 'xpack.observability.customThreshold.rule.alertFlyout.error.metrics.aggTypeRequired', { defaultMessage: 'Aggregation is required', } @@ -201,7 +219,7 @@ export function validateMetricThreshold({ } if (metric.aggType !== 'count' && !metric.field) { customMetricErrors.field = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.error.metrics.fieldRequired', + 'xpack.observability.customThreshold.rule.alertFlyout.error.metrics.fieldRequired', { defaultMessage: 'Field is required', } @@ -222,7 +240,7 @@ export function validateMetricThreshold({ if (c.equation && c.equation.match(EQUATION_REGEX)) { errors[id].equation = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.error.equation.invalidCharacters', + 'xpack.observability.customThreshold.rule.alertFlyout.error.equation.invalidCharacters', { defaultMessage: 'The equation field only supports the following characters: A-Z, +, -, /, *, (, ), ?, !, &, :, |, >, <, =', diff --git a/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.test.tsx b/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.test.tsx similarity index 96% rename from x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.test.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.test.tsx index e81e695f8cef9..accd48ca969a0 100644 --- a/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.test.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.test.tsx @@ -12,11 +12,11 @@ import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { queryClient } from '@kbn/osquery-plugin/public/query_client'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; -import { Comparator } from '../../../common/threshold_rule/types'; -import { MetricsExplorerMetric } from '../../../common/threshold_rule/metrics_explorer'; +import { Comparator } from '../../../common/custom_threshold_rule/types'; +import { MetricsExplorerMetric } from '../../../common/custom_threshold_rule/metrics_explorer'; import { useKibana } from '../../utils/kibana_react'; import { kibanaStartMock } from '../../utils/kibana_react.mock'; -import Expressions from './threshold_rule_expression'; +import Expressions from './custom_threshold_rule_expression'; jest.mock('../../utils/kibana_react'); diff --git a/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx b/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx similarity index 92% rename from x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx index 1e25865147290..761cff54bc961 100644 --- a/x-pack/plugins/observability/public/components/threshold/threshold_rule_expression.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx @@ -36,7 +36,7 @@ import { } from '@kbn/triggers-actions-ui-plugin/public'; import { useKibana } from '../../utils/kibana_react'; -import { Aggregators, Comparator } from '../../../common/threshold_rule/types'; +import { Aggregators, Comparator } from '../../../common/custom_threshold_rule/types'; import { TimeUnitChar } from '../../../common/utils/formatters/duration'; import { AlertContextMeta, AlertParams, MetricExpression } from './types'; import { ExpressionChart } from './components/expression_chart'; @@ -119,7 +119,7 @@ export default function Expressions(props: Props) { if (!timeFieldName) { setDataViewTimeFieldError( i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.dataViewError.noTimestamp', + 'xpack.observability.customThreshold.rule.alertFlyout.dataViewError.noTimestamp', { defaultMessage: 'The selected data view does not have a timestamp field, please select another data view.', @@ -382,7 +382,7 @@ export default function Expressions(props: Props) { } const placeHolder = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.searchBar.placeholder', + 'xpack.observability.customThreshold.rule.alertFlyout.searchBar.placeholder', { defaultMessage: 'Search for observability data… (e.g. host.name:host-1)', } @@ -393,7 +393,7 @@ export default function Expressions(props: Props) {
@@ -417,7 +417,7 @@ export default function Expressions(props: Props) {
@@ -448,7 +448,7 @@ export default function Expressions(props: Props) {
@@ -462,7 +462,7 @@ export default function Expressions(props: Props) {
@@ -514,18 +514,21 @@ export default function Expressions(props: Props) { onClick={addExpression} > {redundantFilterGroupBy.join(', ')}, @@ -560,7 +563,7 @@ export default function Expressions(props: Props) { href={`${docLinks.links.observability.metricsThreshold}#filtering-and-grouping`} > {i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.alertPerRedundantFilterError.docsLink', + 'xpack.observability.customThreshold.rule.alertFlyout.alertPerRedundantFilterError.docsLink', { defaultMessage: 'the docs' } )} @@ -576,7 +579,7 @@ export default function Expressions(props: Props) { label={ <> {i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.alertOnGroupDisappear', + 'xpack.observability.customThreshold.rule.alertFlyout.alertOnGroupDisappear', { defaultMessage: 'Alert me if a group stops reporting data', } @@ -585,7 +588,7 @@ export default function Expressions(props: Props) { content={ (disableNoData ? `${docCountNoDataDisabledHelpText} ` : '') + i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.groupDisappearHelpText', + 'xpack.observability.customThreshold.rule.alertFlyout.groupDisappearHelpText', { defaultMessage: 'Enable this to trigger the action if a previously detected group begins to report no results. This is not recommended for dynamically scaling infrastructures that may rapidly start and stop nodes automatically.', @@ -607,7 +610,7 @@ export default function Expressions(props: Props) { } const docCountNoDataDisabledHelpText = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.docCountNoDataDisabledHelpText', + 'xpack.observability.customThreshold.rule.alertFlyout.docCountNoDataDisabledHelpText', { defaultMessage: '[This setting is not applicable to the Document Count aggregator.]', } diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/calculate_domain.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/calculate_domain.ts similarity index 92% rename from x-pack/plugins/observability/public/components/threshold/helpers/calculate_domain.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/calculate_domain.ts index 17a3b3eee7726..16d0d54d825c1 100644 --- a/x-pack/plugins/observability/public/components/threshold/helpers/calculate_domain.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/helpers/calculate_domain.ts @@ -6,8 +6,8 @@ */ import { min, max, sum, isNumber } from 'lodash'; -import { MetricsExplorerSeries } from '../../../../common/threshold_rule/metrics_explorer'; -import { MetricsExplorerOptionsMetric } from '../../../../common/threshold_rule/types'; +import { MetricsExplorerSeries } from '../../../../common/custom_threshold_rule/metrics_explorer'; +import { MetricsExplorerOptionsMetric } from '../../../../common/custom_threshold_rule/types'; import { getMetricId } from './get_metric_id'; const getMin = (values: Array) => { diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/corrected_percent_convert.test.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/corrected_percent_convert.test.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/helpers/corrected_percent_convert.test.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/corrected_percent_convert.test.ts diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/corrected_percent_convert.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/corrected_percent_convert.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/helpers/corrected_percent_convert.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/corrected_percent_convert.ts diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/create_formatter_for_metric.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/create_formatter_for_metric.ts similarity index 76% rename from x-pack/plugins/observability/public/components/threshold/helpers/create_formatter_for_metric.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/create_formatter_for_metric.ts index 7cb96af683573..1423413e98388 100644 --- a/x-pack/plugins/observability/public/components/threshold/helpers/create_formatter_for_metric.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/helpers/create_formatter_for_metric.ts @@ -6,9 +6,9 @@ */ import numeral from '@elastic/numeral'; -import { InfraFormatterType } from '../../../../common/threshold_rule/types'; -import { createFormatter } from '../../../../common/threshold_rule/formatters'; -import { MetricsExplorerMetric } from '../../../../common/threshold_rule/metrics_explorer'; +import { InfraFormatterType } from '../../../../common/custom_threshold_rule/types'; +import { createFormatter } from '../../../../common/custom_threshold_rule/formatters'; +import { MetricsExplorerMetric } from '../../../../common/custom_threshold_rule/metrics_explorer'; import { metricToFormat } from './metric_to_format'; export const createFormatterForMetric = (metric?: MetricsExplorerMetric) => { diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/create_formatter_for_metrics.test.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/create_formatter_for_metrics.test.ts similarity index 94% rename from x-pack/plugins/observability/public/components/threshold/helpers/create_formatter_for_metrics.test.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/create_formatter_for_metrics.test.ts index 07ed09095a6aa..0da0e765d724a 100644 --- a/x-pack/plugins/observability/public/components/threshold/helpers/create_formatter_for_metrics.test.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/helpers/create_formatter_for_metrics.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { MetricsExplorerMetric } from '../../../../common/threshold_rule/metrics_explorer'; +import { MetricsExplorerMetric } from '../../../../common/custom_threshold_rule/metrics_explorer'; import { createFormatterForMetric } from './create_formatter_for_metric'; describe('createFormatterForMetric()', () => { diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/create_metric_label.test.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/create_metric_label.test.ts similarity index 88% rename from x-pack/plugins/observability/public/components/threshold/helpers/create_metric_label.test.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/create_metric_label.test.ts index f1fe34c377f13..70c4959aafc19 100644 --- a/x-pack/plugins/observability/public/components/threshold/helpers/create_metric_label.test.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/helpers/create_metric_label.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { MetricsExplorerMetric } from '../../../../common/threshold_rule/metrics_explorer'; +import { MetricsExplorerMetric } from '../../../../common/custom_threshold_rule/metrics_explorer'; import { createMetricLabel } from './create_metric_label'; describe('createMetricLabel()', () => { diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/create_metric_label.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/create_metric_label.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/helpers/create_metric_label.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/create_metric_label.ts diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/get_metric_id.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/get_metric_id.ts similarity index 93% rename from x-pack/plugins/observability/public/components/threshold/helpers/get_metric_id.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/get_metric_id.ts index 969ade79e4dda..a60af79ac6e2d 100644 --- a/x-pack/plugins/observability/public/components/threshold/helpers/get_metric_id.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/helpers/get_metric_id.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { MetricsExplorerOptionsMetric } from '../../../../common/threshold_rule/types'; +import { MetricsExplorerOptionsMetric } from '../../../../common/custom_threshold_rule/types'; export const getMetricId = (metric: MetricsExplorerOptionsMetric, index: string | number) => { return `metric_${index}`; diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/kuery.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/kuery.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/helpers/kuery.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/kuery.ts diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/metric_to_format.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/metric_to_format.ts similarity index 80% rename from x-pack/plugins/observability/public/components/threshold/helpers/metric_to_format.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/metric_to_format.ts index 0ed004793b296..2a7d28b72b7c7 100644 --- a/x-pack/plugins/observability/public/components/threshold/helpers/metric_to_format.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/helpers/metric_to_format.ts @@ -6,8 +6,8 @@ */ import { last } from 'lodash'; -import { InfraFormatterType } from '../../../../common/threshold_rule/types'; -import { MetricsExplorerMetric } from '../../../../common/threshold_rule/metrics_explorer'; +import { InfraFormatterType } from '../../../../common/custom_threshold_rule/types'; +import { MetricsExplorerMetric } from '../../../../common/custom_threshold_rule/metrics_explorer'; export const metricToFormat = (metric?: MetricsExplorerMetric) => { if (metric && metric.field) { diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/notifications.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/notifications.ts similarity index 69% rename from x-pack/plugins/observability/public/components/threshold/helpers/notifications.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/notifications.ts index 914333439f426..bc840a206ac64 100644 --- a/x-pack/plugins/observability/public/components/threshold/helpers/notifications.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/helpers/notifications.ts @@ -15,16 +15,19 @@ export const useSourceNotifier = () => { notifications.toasts.danger({ toastLifeTimeMs: 3000, title: i18n.translate( - 'xpack.observability.threshold.rule.sourceConfiguration.updateFailureTitle', + 'xpack.observability.customThreshold.rule.sourceConfiguration.updateFailureTitle', { defaultMessage: 'Configuration update failed', } ), body: [ - i18n.translate('xpack.observability.threshold.rule.sourceConfiguration.updateFailureBody', { - defaultMessage: - "We couldn't apply the changes to the Metrics configuration. Try again later.", - }), + i18n.translate( + 'xpack.observability.customThreshold.rule.sourceConfiguration.updateFailureBody', + { + defaultMessage: + "We couldn't apply the changes to the Metrics configuration. Try again later.", + } + ), message, ] .filter(Boolean) @@ -36,7 +39,7 @@ export const useSourceNotifier = () => { notifications.toasts.success({ toastLifeTimeMs: 3000, title: i18n.translate( - 'xpack.observability.threshold.rule.sourceConfiguration.updateSuccessTitle', + 'xpack.observability.customThreshold.rule.sourceConfiguration.updateSuccessTitle', { defaultMessage: 'Metrics settings successfully updated', } diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/runtime_types.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/runtime_types.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/helpers/runtime_types.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/runtime_types.ts diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/source_errors.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/source_errors.ts similarity index 89% rename from x-pack/plugins/observability/public/components/threshold/helpers/source_errors.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/source_errors.ts index 45cbbad7d3e3a..3ab64f1aac0bb 100644 --- a/x-pack/plugins/observability/public/components/threshold/helpers/source_errors.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/helpers/source_errors.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; const missingHttpMessage = i18n.translate( - 'xpack.observability.threshold.rule.sourceConfiguration.missingHttp', + 'xpack.observability.customThreshold.rule.sourceConfiguration.missingHttp', { defaultMessage: 'Failed to load source: No HTTP client available.', } diff --git a/x-pack/plugins/observability/public/components/threshold/helpers/use_alert_prefill.ts b/x-pack/plugins/observability/public/components/custom_threshold/helpers/use_alert_prefill.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/helpers/use_alert_prefill.ts rename to x-pack/plugins/observability/public/components/custom_threshold/helpers/use_alert_prefill.ts diff --git a/x-pack/plugins/observability/public/components/threshold/hooks/use_kibana_time_zone_setting.ts b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_kibana_time_zone_setting.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/hooks/use_kibana_time_zone_setting.ts rename to x-pack/plugins/observability/public/components/custom_threshold/hooks/use_kibana_time_zone_setting.ts diff --git a/x-pack/plugins/observability/public/components/threshold/hooks/use_kibana_timefilter_time.tsx b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_kibana_timefilter_time.tsx similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/hooks/use_kibana_timefilter_time.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/hooks/use_kibana_timefilter_time.tsx diff --git a/x-pack/plugins/observability/public/components/threshold/hooks/use_metric_threshold_alert_prefill.ts b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metric_threshold_alert_prefill.ts similarity index 91% rename from x-pack/plugins/observability/public/components/threshold/hooks/use_metric_threshold_alert_prefill.ts rename to x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metric_threshold_alert_prefill.ts index 86262d0f272c2..6314ddb20a115 100644 --- a/x-pack/plugins/observability/public/components/threshold/hooks/use_metric_threshold_alert_prefill.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metric_threshold_alert_prefill.ts @@ -7,7 +7,7 @@ import { isEqual } from 'lodash'; import { useState } from 'react'; -import { MetricsExplorerMetric } from '../../../../common/threshold_rule/metrics_explorer'; +import { MetricsExplorerMetric } from '../../../../common/custom_threshold_rule/metrics_explorer'; export interface MetricThresholdPrefillOptions { groupBy: string | string[] | undefined; diff --git a/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_chart_data.ts b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_chart_data.ts similarity index 97% rename from x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_chart_data.ts rename to x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_chart_data.ts index 26924ff0d3d8e..ef810bc8857d9 100644 --- a/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_chart_data.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_chart_data.ts @@ -8,8 +8,8 @@ import DateMath from '@kbn/datemath'; import { DataViewBase } from '@kbn/es-query'; import { useMemo } from 'react'; -import { MetricExplorerCustomMetricAggregations } from '../../../../common/threshold_rule/metrics_explorer'; -import { CustomThresholdExpressionMetric } from '../../../../common/threshold_rule/types'; +import { MetricExplorerCustomMetricAggregations } from '../../../../common/custom_threshold_rule/metrics_explorer'; +import { CustomThresholdExpressionMetric } from '../../../../common/custom_threshold_rule/types'; import { MetricExpression, TimeRange } from '../types'; import { useMetricsExplorerData } from './use_metrics_explorer_data'; diff --git a/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.test.tsx b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.test.tsx similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.test.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.test.tsx diff --git a/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts similarity index 97% rename from x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts rename to x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts index 2e01d72572fb8..59857990b906e 100644 --- a/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_data.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_data.ts @@ -12,7 +12,7 @@ import { useKibana } from '@kbn/kibana-react-plugin/public'; import { MetricsExplorerResponse, metricsExplorerResponseRT, -} from '../../../../common/threshold_rule/metrics_explorer'; +} from '../../../../common/custom_threshold_rule/metrics_explorer'; import { MetricsExplorerOptions, diff --git a/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_options.test.tsx b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_options.test.tsx similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_options.test.tsx rename to x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_options.test.tsx diff --git a/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_options.ts b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_options.ts similarity index 97% rename from x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_options.ts rename to x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_options.ts index a23bed69d9f43..7d734a961b04e 100644 --- a/x-pack/plugins/observability/public/components/threshold/hooks/use_metrics_explorer_options.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_metrics_explorer_options.ts @@ -12,8 +12,8 @@ import createContainer from 'constate'; import type { TimeRange } from '@kbn/es-query'; import { useState, useEffect, useMemo, Dispatch, SetStateAction } from 'react'; -import { metricsExplorerMetricRT } from '../../../../common/threshold_rule/metrics_explorer'; -import { Color } from '../../../../common/threshold_rule/color_palette'; +import { metricsExplorerMetricRT } from '../../../../common/custom_threshold_rule/metrics_explorer'; +import { Color } from '../../../../common/custom_threshold_rule/color_palette'; import { useAlertPrefillContext } from '../helpers/use_alert_prefill'; import { useKibanaTimefilterTime, useSyncKibanaTimeFilterTime } from './use_kibana_timefilter_time'; diff --git a/x-pack/plugins/observability/public/components/threshold/hooks/use_tracked_promise.ts b/x-pack/plugins/observability/public/components/custom_threshold/hooks/use_tracked_promise.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/hooks/use_tracked_promise.ts rename to x-pack/plugins/observability/public/components/custom_threshold/hooks/use_tracked_promise.ts diff --git a/x-pack/plugins/observability/public/components/threshold/i18n_strings.ts b/x-pack/plugins/observability/public/components/custom_threshold/i18n_strings.ts similarity index 65% rename from x-pack/plugins/observability/public/components/threshold/i18n_strings.ts rename to x-pack/plugins/observability/public/components/custom_threshold/i18n_strings.ts index 0c480fbb9fb28..cca654da08a09 100644 --- a/x-pack/plugins/observability/public/components/threshold/i18n_strings.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/i18n_strings.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; export const EQUATION_HELP_MESSAGE = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.customEquationEditor.equationHelpMessage', + 'xpack.observability.customThreshold.rule.alertFlyout.customEquationEditor.equationHelpMessage', { defaultMessage: 'Supports basic math equations, valid charaters are: A-Z, +, -, /, *, (, ), ?, !, &, :, |, >, <, =', @@ -16,32 +16,32 @@ export const EQUATION_HELP_MESSAGE = i18n.translate( ); export const LABEL_LABEL = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.customEquationEditor.labelLabel', + 'xpack.observability.customThreshold.rule.alertFlyout.customEquationEditor.labelLabel', { defaultMessage: 'Label (optional)' } ); export const LABEL_HELP_MESSAGE = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.customEquationEditor.labelHelpMessage', + 'xpack.observability.customThreshold.rule.alertFlyout.customEquationEditor.labelHelpMessage', { defaultMessage: 'Custom label will show on the alert chart and in reason', } ); export const CUSTOM_EQUATION = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.customEquation', + 'xpack.observability.customThreshold.rule.alertFlyout.customEquation', { defaultMessage: 'Custom equation', } ); export const DELETE_LABEL = i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.customEquationEditor.deleteRowButton', + 'xpack.observability.customThreshold.rule.alertFlyout.customEquationEditor.deleteRowButton', { defaultMessage: 'Delete' } ); export const AGGREGATION_LABEL = (name: string) => i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.customEquationEditor.aggregationLabel', + 'xpack.observability.customThreshold.rule.alertFlyout.customEquationEditor.aggregationLabel', { defaultMessage: 'Aggregation {name}', values: { name }, diff --git a/x-pack/plugins/observability/public/components/threshold/lib/generate_unique_key.test.ts b/x-pack/plugins/observability/public/components/custom_threshold/lib/generate_unique_key.test.ts similarity index 93% rename from x-pack/plugins/observability/public/components/threshold/lib/generate_unique_key.test.ts rename to x-pack/plugins/observability/public/components/custom_threshold/lib/generate_unique_key.test.ts index bafdf5f235467..f6b20963ccb00 100644 --- a/x-pack/plugins/observability/public/components/threshold/lib/generate_unique_key.test.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/lib/generate_unique_key.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Aggregators, Comparator } from '../../../../common/threshold_rule/types'; +import { Aggregators, Comparator } from '../../../../common/custom_threshold_rule/types'; import { MetricExpression } from '../types'; import { generateUniqueKey } from './generate_unique_key'; diff --git a/x-pack/plugins/observability/public/components/threshold/lib/generate_unique_key.ts b/x-pack/plugins/observability/public/components/custom_threshold/lib/generate_unique_key.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/lib/generate_unique_key.ts rename to x-pack/plugins/observability/public/components/custom_threshold/lib/generate_unique_key.ts diff --git a/x-pack/plugins/observability/public/components/threshold/lib/transform_metrics_explorer_data.ts b/x-pack/plugins/observability/public/components/custom_threshold/lib/transform_metrics_explorer_data.ts similarity index 91% rename from x-pack/plugins/observability/public/components/threshold/lib/transform_metrics_explorer_data.ts rename to x-pack/plugins/observability/public/components/custom_threshold/lib/transform_metrics_explorer_data.ts index 5fc221afca80f..2a30136924420 100644 --- a/x-pack/plugins/observability/public/components/threshold/lib/transform_metrics_explorer_data.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/lib/transform_metrics_explorer_data.ts @@ -6,7 +6,7 @@ */ import { first } from 'lodash'; -import { MetricsExplorerResponse } from '../../../../common/threshold_rule/metrics_explorer'; +import { MetricsExplorerResponse } from '../../../../common/custom_threshold_rule/metrics_explorer'; import { MetricThresholdAlertParams, ExpressionChartSeries } from '../types'; export const transformMetricsExplorerData = ( diff --git a/x-pack/plugins/observability/public/components/threshold/mocks/metric_threshold_rule.ts b/x-pack/plugins/observability/public/components/custom_threshold/mocks/metric_threshold_rule.ts similarity index 93% rename from x-pack/plugins/observability/public/components/threshold/mocks/metric_threshold_rule.ts rename to x-pack/plugins/observability/public/components/custom_threshold/mocks/metric_threshold_rule.ts index 478d27484df0d..810ff3c1f5983 100644 --- a/x-pack/plugins/observability/public/components/threshold/mocks/metric_threshold_rule.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/mocks/metric_threshold_rule.ts @@ -6,7 +6,7 @@ */ import { v4 as uuidv4 } from 'uuid'; -import { Aggregators, Comparator } from '../../../../common/threshold_rule/types'; +import { Aggregators, Comparator } from '../../../../common/custom_threshold_rule/types'; import { MetricThresholdAlert, MetricThresholdRule } from '../components/alert_details_app_section'; @@ -159,18 +159,18 @@ export const buildMetricThresholdAlert = ( alertOnGroupDisappear: true, }, 'kibana.alert.evaluation.values': [2500, 5], - 'kibana.alert.rule.category': 'Metric threshold', + 'kibana.alert.rule.category': 'Custom threshold (BETA)', 'kibana.alert.rule.consumer': 'alerts', 'kibana.alert.rule.execution.uuid': '62dd07ef-ead9-4b1f-a415-7c83d03925f7', 'kibana.alert.rule.name': 'One condition', - 'kibana.alert.rule.producer': 'infrastructure', - 'kibana.alert.rule.rule_type_id': 'metrics.alert.threshold', + 'kibana.alert.rule.producer': 'observability', + 'kibana.alert.rule.rule_type_id': 'observability.rules.custom_threshold', 'kibana.alert.rule.uuid': '3a1ed8c0-c1a8-11ed-9249-ed6d75986bdc', 'kibana.space_ids': ['default'], 'kibana.alert.rule.tags': [], '@timestamp': '2023-03-28T14:40:00.000Z', 'kibana.alert.reason': 'system.cpu.user.pct reported no data in the last 1m for ', - 'kibana.alert.action_group': 'metrics.threshold.nodata', + 'kibana.alert.action_group': 'custom_threshold.nodata', tags: [], 'kibana.alert.duration.us': 248391946000, 'kibana.alert.time_range': { diff --git a/x-pack/plugins/observability/public/components/threshold/rule_data_formatters.ts b/x-pack/plugins/observability/public/components/custom_threshold/rule_data_formatters.ts similarity index 100% rename from x-pack/plugins/observability/public/components/threshold/rule_data_formatters.ts rename to x-pack/plugins/observability/public/components/custom_threshold/rule_data_formatters.ts diff --git a/x-pack/plugins/observability/public/components/threshold/types.ts b/x-pack/plugins/observability/public/components/custom_threshold/types.ts similarity index 97% rename from x-pack/plugins/observability/public/components/threshold/types.ts rename to x-pack/plugins/observability/public/components/custom_threshold/types.ts index 6336c3f292677..d0b173b4d7c34 100644 --- a/x-pack/plugins/observability/public/components/threshold/types.ts +++ b/x-pack/plugins/observability/public/components/custom_threshold/types.ts @@ -25,7 +25,7 @@ import { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; import { TimeUnitChar } from '../../../common/utils/formatters'; -import { MetricsExplorerSeries } from '../../../common/threshold_rule/metrics_explorer'; +import { MetricsExplorerSeries } from '../../../common/custom_threshold_rule/metrics_explorer'; import { Comparator, CustomMetricExpressionParams, @@ -33,7 +33,7 @@ import { MetricsSourceStatus, NonCountMetricExpressionParams, SnapshotCustomMetricInput, -} from '../../../common/threshold_rule/types'; +} from '../../../common/custom_threshold_rule/types'; import { ObservabilityPublicStart } from '../../plugin'; import { MetricsExplorerOptions } from './hooks/use_metrics_explorer_options'; diff --git a/x-pack/plugins/observability/public/components/rule_kql_filter/with_kuery_autocompletion.tsx b/x-pack/plugins/observability/public/components/rule_kql_filter/with_kuery_autocompletion.tsx index 86a9300e98aa0..2325434a08234 100644 --- a/x-pack/plugins/observability/public/components/rule_kql_filter/with_kuery_autocompletion.tsx +++ b/x-pack/plugins/observability/public/components/rule_kql_filter/with_kuery_autocompletion.tsx @@ -14,7 +14,7 @@ import { } from '@kbn/kibana-react-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { QuerySuggestion } from '@kbn/unified-search-plugin/public'; -import { InfraClientStartDeps, RendererFunction } from '../threshold/types'; +import { InfraClientStartDeps, RendererFunction } from '../custom_threshold/types'; interface WithKueryAutocompletionLifecycleProps { kibana: KibanaReactContextValue; diff --git a/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts b/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts index c06bd84e02c77..e7195dfad76ac 100644 --- a/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts +++ b/x-pack/plugins/observability/public/rules/register_observability_rule_types.ts @@ -17,8 +17,8 @@ import { SLO_BURN_RATE_RULE_TYPE_ID, } from '../../common/constants'; import { validateBurnRateRule } from '../components/burn_rate_rule_editor/validation'; -import { validateMetricThreshold } from '../components/threshold/components/validation'; -import { formatReason } from '../components/threshold/rule_data_formatters'; +import { validateMetricThreshold } from '../components/custom_threshold/components/validation'; +import { formatReason } from '../components/custom_threshold/rule_data_formatters'; const sloBurnRateDefaultActionMessage = i18n.translate( 'xpack.observability.slo.rules.burnRate.defaultActionMessage', @@ -54,7 +54,7 @@ const sloBurnRateDefaultRecoveryMessage = i18n.translate( ); const thresholdDefaultActionMessage = i18n.translate( - 'xpack.observability.threshold.rule.alerting.threshold.defaultActionMessage', + 'xpack.observability.customThreshold.rule.alerting.threshold.defaultActionMessage', { defaultMessage: `\\{\\{context.reason\\}\\} @@ -65,7 +65,7 @@ const thresholdDefaultActionMessage = i18n.translate( } ); const thresholdDefaultRecoveryMessage = i18n.translate( - 'xpack.observability.threshold.rule.alerting.threshold.defaultRecoveryMessage', + 'xpack.observability.customThreshold.rule.alerting.threshold.defaultRecoveryMessage', { defaultMessage: `\\{\\{rule.name\\}\\} has recovered. @@ -106,7 +106,7 @@ export const registerObservabilityRuleTypes = ( observabilityRuleTypeRegistry.register({ id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, description: i18n.translate( - 'xpack.observability.threshold.rule.alertFlyout.alertDescription', + 'xpack.observability.customThreshold.rule.alertFlyout.alertDescription', { defaultMessage: 'Alert when any Observability data type reaches or exceeds a given value.', @@ -116,14 +116,16 @@ export const registerObservabilityRuleTypes = ( documentationUrl(docLinks) { return `${docLinks.links.observability.threshold}`; }, - ruleParamsExpression: lazy(() => import('../components/threshold/threshold_rule_expression')), + ruleParamsExpression: lazy( + () => import('../components/custom_threshold/custom_threshold_rule_expression') + ), validate: validateMetricThreshold, defaultActionMessage: thresholdDefaultActionMessage, defaultRecoveryMessage: thresholdDefaultRecoveryMessage, requiresAppContext: false, format: formatReason, alertDetailsAppSection: lazy( - () => import('../components/threshold/components/alert_details_app_section') + () => import('../components/custom_threshold/components/alert_details_app_section') ), }); } diff --git a/x-pack/plugins/observability/public/utils/metrics_explorer.ts b/x-pack/plugins/observability/public/utils/metrics_explorer.ts index 3994a1c4ee69b..136df77131811 100644 --- a/x-pack/plugins/observability/public/utils/metrics_explorer.ts +++ b/x-pack/plugins/observability/public/utils/metrics_explorer.ts @@ -8,7 +8,7 @@ import { MetricsExplorerResponse, MetricsExplorerSeries, -} from '../../common/threshold_rule/metrics_explorer'; +} from '../../common/custom_threshold_rule/metrics_explorer'; import { MetricsExplorerChartOptions, MetricsExplorerChartType, @@ -16,7 +16,7 @@ import { MetricsExplorerTimeOptions, MetricsExplorerTimestampsRT, MetricsExplorerYAxisMode, -} from '../components/threshold/hooks/use_metrics_explorer_options'; +} from '../components/custom_threshold/hooks/use_metrics_explorer_options'; export const options: MetricsExplorerOptions = { limit: 3, diff --git a/x-pack/plugins/observability/server/index.ts b/x-pack/plugins/observability/server/index.ts index d5d5604001aa9..e0444fe34f861 100644 --- a/x-pack/plugins/observability/server/index.ts +++ b/x-pack/plugins/observability/server/index.ts @@ -50,7 +50,7 @@ const configSchema = schema.object({ enabled: schema.boolean({ defaultValue: false }), }), }), - thresholdRule: schema.object({ + customThresholdRule: schema.object({ groupByPageSize: schema.number({ defaultValue: 10_000 }), }), enabled: schema.boolean({ defaultValue: true }), diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/threshold_executor.test.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts similarity index 99% rename from x-pack/plugins/observability/server/lib/rules/threshold/threshold_executor.test.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts index 1cf093ab91eee..4a4640e6e1f2f 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/threshold_executor.test.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts @@ -18,7 +18,7 @@ import { FIRED_ACTIONS, MetricThresholdAlertContext, NO_DATA_ACTIONS, -} from './threshold_executor'; +} from './custom_threshold_executor'; import { Evaluation } from './lib/evaluate_rule'; import type { LogMeta, Logger } from '@kbn/logging'; import { DEFAULT_FLAPPING_SETTINGS } from '@kbn/alerting-plugin/common'; @@ -27,7 +27,7 @@ import { Comparator, CountMetricExpressionParams, NonCountMetricExpressionParams, -} from '../../../../common/threshold_rule/types'; +} from '../../../../common/custom_threshold_rule/types'; jest.mock('./lib/evaluate_rule', () => ({ evaluateRule: jest.fn() })); @@ -1888,7 +1888,7 @@ const mockLibs: any = { }, logger, config: { - thresholdRule: { + customThresholdRule: { groupByPageSize: 10_000, }, }, diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/threshold_executor.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts similarity index 94% rename from x-pack/plugins/observability/server/lib/rules/threshold/threshold_executor.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts index 5ce2e40a1d023..bff471aaea2ec 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/threshold_executor.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts @@ -19,8 +19,8 @@ import { Alert, RuleTypeState } from '@kbn/alerting-plugin/server'; import { IBasePath, Logger } from '@kbn/core/server'; import { LifecycleRuleExecutor } from '@kbn/rule-registry-plugin/server'; import { AlertsLocatorParams, getAlertUrl, TimeUnitChar } from '../../../../common'; -import { createFormatter } from '../../../../common/threshold_rule/formatters'; -import { Comparator } from '../../../../common/threshold_rule/types'; +import { createFormatter } from '../../../../common/custom_threshold_rule/formatters'; +import { Comparator } from '../../../../common/custom_threshold_rule/types'; import { ObservabilityConfig } from '../../..'; import { AlertStates, searchConfigurationSchema } from './types'; @@ -62,8 +62,8 @@ export interface MetricThresholdAlertContext extends Record { value?: Array | null; } -export const FIRED_ACTIONS_ID = 'threshold.fired'; -export const NO_DATA_ACTIONS_ID = 'threshold.nodata'; +export const FIRED_ACTIONS_ID = 'custom_threshold.fired'; +export const NO_DATA_ACTIONS_ID = 'custom_threshold.nodata'; type MetricThresholdActionGroup = | typeof FIRED_ACTIONS_ID @@ -158,7 +158,7 @@ export const createMetricThresholdExecutor = ({ // For backwards-compatibility, interpret undefined alertOnGroupDisappear as true const alertOnGroupDisappear = _alertOnGroupDisappear !== false; - const compositeSize = config.thresholdRule.groupByPageSize; + const compositeSize = config.customThresholdRule.groupByPageSize; const queryIsSame = isEqual( state.searchConfiguration?.query.query, params.searchConfiguration.query.query @@ -368,17 +368,20 @@ export const createMetricThresholdExecutor = ({ }; export const FIRED_ACTIONS = { - id: 'threshold.fired', - name: i18n.translate('xpack.observability.threshold.rule.alerting.threshold.fired', { + id: 'custom_threshold.fired', + name: i18n.translate('xpack.observability.customThreshold.rule.alerting.custom_threshold.fired', { defaultMessage: 'Alert', }), }; export const NO_DATA_ACTIONS = { - id: 'threshold.nodata', - name: i18n.translate('xpack.observability.threshold.rule.alerting.threshold.nodata', { - defaultMessage: 'No Data', - }), + id: 'custom_threshold.nodata', + name: i18n.translate( + 'xpack.observability.customThreshold.rule.alerting.custom_threshold.nodata', + { + defaultMessage: 'No Data', + } + ), }; const formatAlertResult = ( @@ -393,7 +396,7 @@ const formatAlertResult = ( ) => { const { metric, currentValue, threshold, comparator } = alertResult; const noDataValue = i18n.translate( - 'xpack.observability.threshold.rule.alerting.threshold.noDataFormattedValue', + 'xpack.observability.customThreshold.rule.alerting.threshold.noDataFormattedValue', { defaultMessage: '[NO DATA]' } ); diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/check_missing_group.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/check_missing_group.ts similarity index 96% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/check_missing_group.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/check_missing_group.ts index 4b8c47a1af866..7651130601b6c 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/check_missing_group.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/check_missing_group.ts @@ -8,7 +8,7 @@ import { ElasticsearchClient } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; import { isString, get, identity } from 'lodash'; -import { MetricExpressionParams } from '../../../../../common/threshold_rule/types'; +import { MetricExpressionParams } from '../../../../../common/custom_threshold_rule/types'; import type { BucketKey } from './get_data'; import { calculateCurrentTimeframe, createBaseFilters } from './metric_query'; diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/convert_strings_to_missing_groups_record.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/convert_strings_to_missing_groups_record.ts similarity index 100% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/convert_strings_to_missing_groups_record.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/convert_strings_to_missing_groups_record.ts diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_bucket_selector.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_bucket_selector.ts similarity index 98% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/create_bucket_selector.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_bucket_selector.ts index 0af245df1a102..6300bfac703f3 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_bucket_selector.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_bucket_selector.ts @@ -9,7 +9,7 @@ import { Aggregators, Comparator, MetricExpressionParams, -} from '../../../../../common/threshold_rule/types'; +} from '../../../../../common/custom_threshold_rule/types'; import { createConditionScript } from './create_condition_script'; import { createLastPeriod } from './wrap_in_period'; diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_condition_script.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_condition_script.ts similarity index 92% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/create_condition_script.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_condition_script.ts index 2355b2d301065..ad4aaa980aa63 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_condition_script.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_condition_script.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Comparator } from '../../../../../common/threshold_rule/types'; +import { Comparator } from '../../../../../common/custom_threshold_rule/types'; export const createConditionScript = (threshold: number[], comparator: Comparator) => { if (comparator === Comparator.BETWEEN && threshold.length === 2) { diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_custom_metrics_aggregations.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_custom_metrics_aggregations.ts similarity index 98% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/create_custom_metrics_aggregations.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_custom_metrics_aggregations.ts index a52ad0247475c..93eecd37c1c5d 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_custom_metrics_aggregations.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_custom_metrics_aggregations.ts @@ -7,7 +7,7 @@ import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { isEmpty } from 'lodash'; -import { CustomThresholdExpressionMetric } from '../../../../../common/threshold_rule/types'; +import { CustomThresholdExpressionMetric } from '../../../../../common/custom_threshold_rule/types'; import { MetricsExplorerCustomMetric } from './metrics_explorer'; const isMetricExpressionCustomMetric = ( diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_percentile_aggregation.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_percentile_aggregation.ts similarity index 87% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/create_percentile_aggregation.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_percentile_aggregation.ts index d96dbe49f5a88..73db4a3e747ee 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_percentile_aggregation.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_percentile_aggregation.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Aggregators } from '../../../../../common/threshold_rule/types'; +import { Aggregators } from '../../../../../common/custom_threshold_rule/types'; export const createPercentileAggregation = ( type: Aggregators.P95 | Aggregators.P99, diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_rate_aggregation.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_rate_aggregation.ts similarity index 100% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/create_rate_aggregation.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_rate_aggregation.ts diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_timerange.test.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_timerange.test.ts similarity index 98% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/create_timerange.test.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_timerange.test.ts index 06b1554706a93..c48ce1d9ab50d 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_timerange.test.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_timerange.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Aggregators } from '../../../../../common/threshold_rule/types'; +import { Aggregators } from '../../../../../common/custom_threshold_rule/types'; import moment from 'moment'; import { createTimerange } from './create_timerange'; diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_timerange.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_timerange.ts similarity index 92% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/create_timerange.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_timerange.ts index 446299c4ba92b..75f4dda7ff8d6 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/create_timerange.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/create_timerange.ts @@ -6,7 +6,7 @@ */ import moment from 'moment'; -import { Aggregators } from '../../../../../common/threshold_rule/types'; +import { Aggregators } from '../../../../../common/custom_threshold_rule/types'; export const createTimerange = ( interval: number, diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/evaluate_rule.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/evaluate_rule.ts similarity index 96% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/evaluate_rule.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/evaluate_rule.ts index 31b86eb73beea..66007de19b622 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/evaluate_rule.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/evaluate_rule.ts @@ -8,10 +8,10 @@ import moment from 'moment'; import { ElasticsearchClient } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; -import { MetricExpressionParams } from '../../../../../common/threshold_rule/types'; +import { MetricExpressionParams } from '../../../../../common/custom_threshold_rule/types'; import { isCustom } from './metric_expression_params'; import { AdditionalContext, getIntervalInSeconds } from '../utils'; -import { SearchConfigurationType } from '../threshold_executor'; +import { SearchConfigurationType } from '../custom_threshold_executor'; import { CUSTOM_EQUATION_I18N, DOCUMENT_COUNT_I18N } from '../messages'; import { createTimerange } from './create_timerange'; import { getData } from './get_data'; diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/get_data.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/get_data.ts similarity index 99% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/get_data.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/get_data.ts index 9d5db3a14727b..d5a09dbf567a3 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/get_data.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/get_data.ts @@ -13,7 +13,7 @@ import { Aggregators, Comparator, MetricExpressionParams, -} from '../../../../../common/threshold_rule/types'; +} from '../../../../../common/custom_threshold_rule/types'; import { CONTAINER_ID, diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/metric_expression_params.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metric_expression_params.ts similarity index 93% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/metric_expression_params.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metric_expression_params.ts index c81b43c9baeb6..278f33dadafe9 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/metric_expression_params.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metric_expression_params.ts @@ -9,7 +9,7 @@ import { CustomMetricExpressionParams, MetricExpressionParams, NonCountMetricExpressionParams, -} from '../../../../../common/threshold_rule/types'; +} from '../../../../../common/custom_threshold_rule/types'; export const isNotCountOrCustom = ( metricExpressionParams: MetricExpressionParams diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/metric_query.test.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metric_query.test.ts similarity index 98% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/metric_query.test.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metric_query.test.ts index 2aed703e9c3a1..cdfe0c66c0ab9 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/metric_query.test.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metric_query.test.ts @@ -9,7 +9,7 @@ import { Comparator, Aggregators, MetricExpressionParams, -} from '../../../../../common/threshold_rule/types'; +} from '../../../../../common/custom_threshold_rule/types'; import moment from 'moment'; import { getElasticsearchMetricQuery } from './metric_query'; diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/metric_query.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metric_query.ts similarity index 98% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/metric_query.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metric_query.ts index 3eac288648093..66868ad97dfc9 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/metric_query.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metric_query.ts @@ -6,7 +6,10 @@ */ import moment from 'moment'; -import { Aggregators, MetricExpressionParams } from '../../../../../common/threshold_rule/types'; +import { + Aggregators, + MetricExpressionParams, +} from '../../../../../common/custom_threshold_rule/types'; import { isCustom, isNotCountOrCustom } from './metric_expression_params'; import { createCustomMetricsAggregations } from './create_custom_metrics_aggregations'; import { diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/metrics_explorer.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metrics_explorer.ts similarity index 94% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/metrics_explorer.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metrics_explorer.ts index 2de1a21c3cd48..e72974828b027 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/metrics_explorer.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/metrics_explorer.ts @@ -6,20 +6,8 @@ */ import * as rt from 'io-ts'; -import { metricsExplorerCustomMetricAggregationRT } from '../../../../../common/threshold_rule/metrics_explorer'; - -export const METRIC_EXPLORER_AGGREGATIONS = [ - 'avg', - 'max', - 'min', - 'cardinality', - 'rate', - 'count', - 'sum', - 'p95', - 'p99', - 'custom', -] as const; +import { METRIC_EXPLORER_AGGREGATIONS } from '../../../../../common/custom_threshold_rule/constants'; +import { metricsExplorerCustomMetricAggregationRT } from '../../../../../common/custom_threshold_rule/metrics_explorer'; type MetricExplorerAggregations = typeof METRIC_EXPLORER_AGGREGATIONS[number]; diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/lib/wrap_in_period.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/wrap_in_period.ts similarity index 93% rename from x-pack/plugins/observability/server/lib/rules/threshold/lib/wrap_in_period.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/wrap_in_period.ts index d313e5efd9fcd..a76c45e4e4583 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/lib/wrap_in_period.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/lib/wrap_in_period.ts @@ -6,7 +6,7 @@ */ import moment from 'moment'; -import { MetricExpressionParams } from '../../../../../common/threshold_rule/types'; +import { MetricExpressionParams } from '../../../../../common/custom_threshold_rule/types'; export const createLastPeriod = ( lastPeriodEnd: number, diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/messages.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/messages.ts similarity index 73% rename from x-pack/plugins/observability/server/lib/rules/threshold/messages.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/messages.ts index ac0f1ef8b98c4..80ca06c24e59f 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/messages.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/messages.ts @@ -6,19 +6,19 @@ */ import { i18n } from '@kbn/i18n'; -import { Comparator } from '../../../../common/threshold_rule/types'; +import { Comparator } from '../../../../common/custom_threshold_rule/types'; import { formatDurationFromTimeUnitChar, TimeUnitChar } from '../../../../common'; import { UNGROUPED_FACTORY_KEY } from './utils'; export const DOCUMENT_COUNT_I18N = i18n.translate( - 'xpack.observability.threshold.rule.threshold.documentCount', + 'xpack.observability.customThreshold.rule.threshold.documentCount', { defaultMessage: 'Document count', } ); export const CUSTOM_EQUATION_I18N = i18n.translate( - 'xpack.observability.threshold.rule.threshold.customEquation', + 'xpack.observability.customThreshold.rule.threshold.customEquation', { defaultMessage: 'Custom equation', } @@ -32,17 +32,23 @@ const recoveredComparatorToI18n = ( threshold: number[], currentValue: number ) => { - const belowText = i18n.translate('xpack.observability.threshold.rule.threshold.belowRecovery', { - defaultMessage: 'below', - }); - const aboveText = i18n.translate('xpack.observability.threshold.rule.threshold.aboveRecovery', { - defaultMessage: 'above', - }); + const belowText = i18n.translate( + 'xpack.observability.customThreshold.rule.threshold.belowRecovery', + { + defaultMessage: 'below', + } + ); + const aboveText = i18n.translate( + 'xpack.observability.customThreshold.rule.threshold.aboveRecovery', + { + defaultMessage: 'above', + } + ); switch (comparator) { case Comparator.BETWEEN: return currentValue < threshold[0] ? belowText : aboveText; case Comparator.OUTSIDE_RANGE: - return i18n.translate('xpack.observability.threshold.rule.threshold.betweenRecovery', { + return i18n.translate('xpack.observability.customThreshold.rule.threshold.betweenRecovery', { defaultMessage: 'between', }); case Comparator.GT: @@ -56,7 +62,7 @@ const recoveredComparatorToI18n = ( const thresholdToI18n = ([a, b]: Array) => { if (typeof b === 'undefined') return a; - return i18n.translate('xpack.observability.threshold.rule.threshold.thresholdRange', { + return i18n.translate('xpack.observability.customThreshold.rule.threshold.thresholdRange', { defaultMessage: '{a} and {b}', values: { a, b }, }); @@ -73,7 +79,7 @@ export const buildFiredAlertReason: (alertResult: { timeSize: number; timeUnit: TimeUnitChar; }) => string = ({ group, metric, comparator, threshold, currentValue, timeSize, timeUnit }) => - i18n.translate('xpack.observability.threshold.rule.threshold.firedAlertReason', { + i18n.translate('xpack.observability.customThreshold.rule.threshold.firedAlertReason', { defaultMessage: '{metric} is {currentValue} in the last {duration}{group}. Alert when {comparator} {threshold}.', values: { @@ -94,7 +100,7 @@ export const buildRecoveredAlertReason: (alertResult: { threshold: Array; currentValue: number | string; }) => string = ({ group, metric, comparator, threshold, currentValue }) => - i18n.translate('xpack.observability.threshold.rule.threshold.recoveredAlertReason', { + i18n.translate('xpack.observability.customThreshold.rule.threshold.recoveredAlertReason', { defaultMessage: '{metric} is now {comparator} a threshold of {threshold} (current value is {currentValue}) for {group}', values: { @@ -116,7 +122,7 @@ export const buildNoDataAlertReason: (alertResult: { timeSize: number; timeUnit: string; }) => string = ({ group, metric, timeSize, timeUnit }) => - i18n.translate('xpack.observability.threshold.rule.threshold.noDataAlertReason', { + i18n.translate('xpack.observability.customThreshold.rule.threshold.noDataAlertReason', { defaultMessage: '{metric} reported no data in the last {interval}{group}', values: { metric, @@ -126,7 +132,7 @@ export const buildNoDataAlertReason: (alertResult: { }); export const buildErrorAlertReason = (metric: string) => - i18n.translate('xpack.observability.threshold.rule.threshold.errorAlertReason', { + i18n.translate('xpack.observability.customThreshold.rule.threshold.errorAlertReason', { defaultMessage: 'Elasticsearch failed when attempting to query data for {metric}', values: { metric, @@ -134,14 +140,14 @@ export const buildErrorAlertReason = (metric: string) => }); export const groupByKeysActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.groupByKeysActionVariableDescription', + 'xpack.observability.customThreshold.rule.groupByKeysActionVariableDescription', { defaultMessage: 'The object containing groups that are reporting data', } ); export const alertDetailUrlActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.alertDetailUrlActionVariableDescription', + 'xpack.observability.customThreshold.rule.alertDetailUrlActionVariableDescription', { defaultMessage: 'Link to the alert troubleshooting view for further context and details. This will be an empty string if the server.publicBaseUrl is not configured.', @@ -149,70 +155,70 @@ export const alertDetailUrlActionVariableDescription = i18n.translate( ); export const reasonActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.reasonActionVariableDescription', + 'xpack.observability.customThreshold.rule.reasonActionVariableDescription', { defaultMessage: 'A concise description of the reason for the alert', } ); export const timestampActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.timestampDescription', + 'xpack.observability.customThreshold.rule.timestampDescription', { defaultMessage: 'A timestamp of when the alert was detected.', } ); export const valueActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.valueActionVariableDescription', + 'xpack.observability.customThreshold.rule.valueActionVariableDescription', { defaultMessage: 'List of the condition values.', } ); export const viewInAppUrlActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.viewInAppUrlActionVariableDescription', + 'xpack.observability.customThreshold.rule.viewInAppUrlActionVariableDescription', { defaultMessage: 'Link to the alert source', } ); export const cloudActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.cloudActionVariableDescription', + 'xpack.observability.customThreshold.rule.cloudActionVariableDescription', { defaultMessage: 'The cloud object defined by ECS if available in the source.', } ); export const hostActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.hostActionVariableDescription', + 'xpack.observability.customThreshold.rule.hostActionVariableDescription', { defaultMessage: 'The host object defined by ECS if available in the source.', } ); export const containerActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.containerActionVariableDescription', + 'xpack.observability.customThreshold.rule.containerActionVariableDescription', { defaultMessage: 'The container object defined by ECS if available in the source.', } ); export const orchestratorActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.orchestratorActionVariableDescription', + 'xpack.observability.customThreshold.rule.orchestratorActionVariableDescription', { defaultMessage: 'The orchestrator object defined by ECS if available in the source.', } ); export const labelsActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.labelsActionVariableDescription', + 'xpack.observability.customThreshold.rule.labelsActionVariableDescription', { defaultMessage: 'List of labels associated with the entity where this alert triggered.', } ); export const tagsActionVariableDescription = i18n.translate( - 'xpack.observability.threshold.rule.tagsActionVariableDescription', + 'xpack.observability.customThreshold.rule.tagsActionVariableDescription', { defaultMessage: 'List of tags associated with the entity where this alert triggered.', } diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/register_threshold_rule_type.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/register_custom_threshold_rule_type.ts similarity index 97% rename from x-pack/plugins/observability/server/lib/rules/threshold/register_threshold_rule_type.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/register_custom_threshold_rule_type.ts index 791b6ff680992..3b1b01e4d2268 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/register_threshold_rule_type.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/register_custom_threshold_rule_type.ts @@ -21,7 +21,7 @@ import { observabilityFeatureId, observabilityPaths, } from '../../../../common'; -import { Comparator } from '../../../../common/threshold_rule/types'; +import { Comparator } from '../../../../common/custom_threshold_rule/types'; import { OBSERVABILITY_THRESHOLD_RULE_TYPE_ID } from '../../../../common/constants'; import { THRESHOLD_RULE_REGISTRATION_CONTEXT } from '../../../common/constants'; @@ -43,9 +43,9 @@ import { createMetricThresholdExecutor, FIRED_ACTIONS, NO_DATA_ACTIONS, -} from './threshold_executor'; +} from './custom_threshold_executor'; import { ObservabilityConfig } from '../../..'; -import { METRIC_EXPLORER_AGGREGATIONS } from '../../../../common/threshold_rule/constants'; +import { METRIC_EXPLORER_AGGREGATIONS } from '../../../../common/custom_threshold_rule/constants'; export const MetricsRulesTypeAlertDefinition: IRuleTypeAlerts = { context: THRESHOLD_RULE_REGISTRATION_CONTEXT, @@ -121,7 +121,7 @@ export function thresholdRuleType( return { id: OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, name: i18n.translate('xpack.observability.threshold.ruleName', { - defaultMessage: 'Threshold (Technical Preview)', + defaultMessage: 'Custom threshold (BETA)', }), validate: { params: schema.object( diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/types.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts similarity index 96% rename from x-pack/plugins/observability/server/lib/rules/threshold/types.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts index 40115fdeb9c80..e66042bcb648d 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/types.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/types.ts @@ -8,7 +8,7 @@ import { schema } from '@kbn/config-schema'; import * as rt from 'io-ts'; import { ML_ANOMALY_THRESHOLD } from '@kbn/ml-anomaly-utils/anomaly_threshold'; import { validateKQLStringFilter } from './utils'; -import { Aggregators, Comparator } from '../../../../common/threshold_rule/types'; +import { Aggregators, Comparator } from '../../../../common/custom_threshold_rule/types'; import { TimeUnitChar } from '../../../../common'; export enum InfraRuleType { diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/utils.test.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/utils.test.ts similarity index 100% rename from x-pack/plugins/observability/server/lib/rules/threshold/utils.test.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/utils.test.ts diff --git a/x-pack/plugins/observability/server/lib/rules/threshold/utils.ts b/x-pack/plugins/observability/server/lib/rules/custom_threshold/utils.ts similarity index 99% rename from x-pack/plugins/observability/server/lib/rules/threshold/utils.ts rename to x-pack/plugins/observability/server/lib/rules/custom_threshold/utils.ts index 7c85c7ab98630..854b7cc497502 100644 --- a/x-pack/plugins/observability/server/lib/rules/threshold/utils.ts +++ b/x-pack/plugins/observability/server/lib/rules/custom_threshold/utils.ts @@ -52,7 +52,7 @@ export const validateKQLStringFilter = (value: string) => { try { kbnBuildEsQuery(undefined, [{ query: value, language: 'kuery' }], []); } catch (e) { - return i18n.translate('xpack.observability.threshold.rule.schema.invalidFilterQuery', { + return i18n.translate('xpack.observability.customThreshold.rule.schema.invalidFilterQuery', { defaultMessage: 'filterQuery must be a valid KQL filter', }); } diff --git a/x-pack/plugins/observability/server/lib/rules/register_rule_types.ts b/x-pack/plugins/observability/server/lib/rules/register_rule_types.ts index 388ede407819f..0e1abfc1037d7 100644 --- a/x-pack/plugins/observability/server/lib/rules/register_rule_types.ts +++ b/x-pack/plugins/observability/server/lib/rules/register_rule_types.ts @@ -22,7 +22,7 @@ import { THRESHOLD_RULE_REGISTRATION_CONTEXT, } from '../../common/constants'; import { sloBurnRateRuleType } from './slo_burn_rate'; -import { thresholdRuleType } from './threshold/register_threshold_rule_type'; +import { thresholdRuleType } from './custom_threshold/register_custom_threshold_rule_type'; import { sloRuleFieldMap } from './slo_burn_rate/field_map'; export function registerRuleTypes( diff --git a/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/configure.cy.ts b/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/configure.cy.ts index d4f95d0256870..0d345d2eb2a90 100644 --- a/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/configure.cy.ts +++ b/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/configure.cy.ts @@ -24,7 +24,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { it('Users should be able to continue if logFilePaths is not empty', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type('myLogs.log'); cy.getByTestSubj('obltOnboardingCustomLogsContinue').should( 'not.be.disabled' @@ -32,13 +31,13 @@ describe('[Logs onboarding] Custom logs - configure step', () => { }); it('Users can add multiple logFilePaths', () => { - cy.getByTestSubj('obltOnboardingCustomLogsAddFilePath').first().click(); + cy.getByTestSubj('obltOnboardingCustomLogsAddFilePath').click(); cy.getByTestSubj('obltOnboardingLogFilePath-0').should('exist'); cy.getByTestSubj('obltOnboardingLogFilePath-1').should('exist'); }); it('Users can delete logFilePaths', () => { - cy.getByTestSubj('obltOnboardingCustomLogsAddFilePath').first().click(); + cy.getByTestSubj('obltOnboardingCustomLogsAddFilePath').click(); cy.get('*[data-test-subj^="obltOnboardingLogFilePath-"]').should( 'have.length', 2 @@ -55,7 +54,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { it('datasetname and integration name are auto generated if it is the first path', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type('myLogs.log'); cy.getByTestSubj('obltOnboardingCustomLogsIntegrationsName').should( 'have.value', @@ -68,10 +66,9 @@ describe('[Logs onboarding] Custom logs - configure step', () => { }); it('datasetname and integration name are not generated if it is not the first path', () => { - cy.getByTestSubj('obltOnboardingCustomLogsAddFilePath').first().click(); + cy.getByTestSubj('obltOnboardingCustomLogsAddFilePath').click(); cy.getByTestSubj('obltOnboardingLogFilePath-1') .find('input') - .first() .type('myLogs.log'); cy.getByTestSubj('obltOnboardingCustomLogsIntegrationsName').should( 'be.empty' @@ -90,7 +87,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type('myLogs.log'); }); @@ -109,7 +105,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type('myLogs.log'); }); @@ -187,17 +182,15 @@ describe('[Logs onboarding] Custom logs - configure step', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type('myLogs.log'); }); it('Users should not be able to continue if they do not specify an integrationName', () => { cy.getByTestSubj('obltOnboardingCustomLogsIntegrationsName').clear(); - // https://github.com/elastic/kibana/issues/165778 - // cy.getByTestSubj('obltOnboardingCustomLogsContinue').should( - // 'be.disabled' - // ); + cy.getByTestSubj('obltOnboardingCustomLogsContinue').should( + 'be.disabled' + ); }); it('value will contain _ instead of special chars', () => { @@ -227,7 +220,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type('myLogs.log'); }); @@ -273,7 +265,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type(`${CUSTOM_INTEGRATION_NAME}.log`); cy.getByTestSubj('obltOnboardingCustomLogsContinue').click(); @@ -293,7 +284,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type(`${CUSTOM_INTEGRATION_NAME}.log`); cy.getByTestSubj('obltOnboardingCustomLogsContinue').click(); @@ -318,7 +308,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { cy.installCustomIntegration(CUSTOM_INTEGRATION_NAME); cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type(`${CUSTOM_INTEGRATION_NAME}.log`); cy.getByTestSubj('obltOnboardingCustomLogsContinue').click(); @@ -341,7 +330,6 @@ describe('[Logs onboarding] Custom logs - configure step', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type(`${CUSTOM_INTEGRATION_NAME}.log`); cy.getByTestSubj('obltOnboardingCustomLogsContinue').click(); }); diff --git a/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/install_elastic_agent.cy.ts b/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/install_elastic_agent.cy.ts index c0175455efa8f..1307b4da93100 100644 --- a/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/install_elastic_agent.cy.ts +++ b/x-pack/plugins/observability_onboarding/e2e/cypress/e2e/logs/custom_logs/install_elastic_agent.cy.ts @@ -18,7 +18,6 @@ describe('[Logs onboarding] Custom logs - install elastic agent', () => { cy.getByTestSubj('obltOnboardingLogFilePath-0') .find('input') - .first() .type('mylogs.log'); cy.getByTestSubj('obltOnboardingCustomLogsContinue').click(); @@ -147,9 +146,7 @@ describe('[Logs onboarding] Custom logs - install elastic agent', () => { it('autoDownloadConfig flag is added to installation script', () => { cy.getByTestSubj( 'obltOnboardingInstallElasticAgentAutoDownloadConfig' - ) - .first() - .click(); + ).click(); cy.getByTestSubj( 'obltOnboardingInstallElasticAgentAutoDownloadConfigCallout' ).should('exist'); @@ -161,9 +158,7 @@ describe('[Logs onboarding] Custom logs - install elastic agent', () => { it('Download config button is disabled', () => { cy.getByTestSubj( 'obltOnboardingInstallElasticAgentAutoDownloadConfig' - ) - .first() - .click(); + ).click(); cy.getByTestSubj( 'obltOnboardingConfigureElasticAgentStepDownloadConfig' ).should('be.disabled'); diff --git a/x-pack/plugins/observability_onboarding/public/components/shared/filmstrip_transition.tsx b/x-pack/plugins/observability_onboarding/public/components/shared/filmstrip_transition.tsx index df877c2856733..39389ce5ec94b 100644 --- a/x-pack/plugins/observability_onboarding/public/components/shared/filmstrip_transition.tsx +++ b/x-pack/plugins/observability_onboarding/public/components/shared/filmstrip_transition.tsx @@ -23,7 +23,7 @@ export function FilmstripTransition({ flexGrow: 1, position: 'relative', zIndex: 0, - transitionTimingFunction: 'ease-out', + transitionTimingFunction: 'ease-in-out', transition: transition !== 'ready' ? `transform ${duration}ms` : undefined, transform: diff --git a/x-pack/plugins/observability_onboarding/public/routes/templates/custom_logs.tsx b/x-pack/plugins/observability_onboarding/public/routes/templates/custom_logs.tsx index bd31340edbf21..c2a18238943d2 100644 --- a/x-pack/plugins/observability_onboarding/public/routes/templates/custom_logs.tsx +++ b/x-pack/plugins/observability_onboarding/public/routes/templates/custom_logs.tsx @@ -89,18 +89,16 @@ function AnimatedTransitionsWizard({ children }: Props) { duration={TRANSITION_DURATION} transition={transition} > - - { - // eslint-disable-next-line react/jsx-pascal-case - transition === 'back' ? : null - } - - {children} - - { - // eslint-disable-next-line react/jsx-pascal-case - transition === 'next' ? : null + + {children} diff --git a/x-pack/plugins/osquery/public/shared_components/lazy_osquery_action_params_form.tsx b/x-pack/plugins/osquery/public/shared_components/lazy_osquery_action_params_form.tsx index af7ad511b061b..e14b73242d6d5 100644 --- a/x-pack/plugins/osquery/public/shared_components/lazy_osquery_action_params_form.tsx +++ b/x-pack/plugins/osquery/public/shared_components/lazy_osquery_action_params_form.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { EuiLoadingSpinner } from '@elastic/eui'; import React, { lazy, Suspense } from 'react'; import type { OsqueryResponseActionsParamsFormProps } from './osquery_response_action_type'; @@ -16,7 +17,7 @@ export const getLazyOsqueryResponseActionTypeForm = const { onError, defaultValues, onChange } = props; return ( - + }> = ({ error={validation.errors.name} > = {}): RuleExecution timestamp: DEFAULT_TIMESTAMP, sequence: DEFAULT_SEQUENCE_NUMBER, level: LogLevel.debug, + execution_id: 'execution-id-1', message: 'Some message', - // Overriden values + // Overridden values ...props, // Mandatory values for this type of event type: RuleExecutionEventType.message, @@ -31,8 +32,9 @@ const getRunningStatusChange = (props: Partial = {}): RuleEx // Default values timestamp: DEFAULT_TIMESTAMP, sequence: DEFAULT_SEQUENCE_NUMBER, + execution_id: 'execution-id-1', message: 'Rule changed status to "running"', - // Overriden values + // Overridden values ...props, // Mandatory values for this type of event level: LogLevel.info, @@ -47,8 +49,9 @@ const getPartialFailureStatusChange = ( // Default values timestamp: DEFAULT_TIMESTAMP, sequence: DEFAULT_SEQUENCE_NUMBER, + execution_id: 'execution-id-1', message: 'Rule changed status to "partial failure". Unknown error', - // Overriden values + // Overridden values ...props, // Mandatory values for this type of event level: LogLevel.warn, @@ -61,8 +64,9 @@ const getFailedStatusChange = (props: Partial = {}): RuleExe // Default values timestamp: DEFAULT_TIMESTAMP, sequence: DEFAULT_SEQUENCE_NUMBER, + execution_id: 'execution-id-1', message: 'Rule changed status to "failed". Unknown error', - // Overriden values + // Overridden values ...props, // Mandatory values for this type of event level: LogLevel.error, @@ -75,8 +79,9 @@ const getSucceededStatusChange = (props: Partial = {}): Rule // Default values timestamp: DEFAULT_TIMESTAMP, sequence: DEFAULT_SEQUENCE_NUMBER, + execution_id: 'execution-id-1', message: 'Rule changed status to "succeeded". Rule executed successfully', - // Overriden values + // Overridden values ...props, // Mandatory values for this type of event level: LogLevel.info, @@ -89,8 +94,9 @@ const getExecutionMetricsEvent = (props: Partial = {}): Rule // Default values timestamp: DEFAULT_TIMESTAMP, sequence: DEFAULT_SEQUENCE_NUMBER, - message: '', - // Overriden values + execution_id: 'execution-id-1', + message: JSON.stringify({ some_metric_ms: 10 }), + // Overridden values ...props, // Mandatory values for this type of event level: LogLevel.debug, diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/model/execution_event.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/model/execution_event.ts index 3eaa2ca7efad0..64acfb01e2e2a 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/model/execution_event.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/model/execution_event.ts @@ -6,7 +6,7 @@ */ import * as t from 'io-ts'; -import { enumeration, IsoDateString } from '@kbn/securitysolution-io-ts-types'; +import { enumeration, IsoDateString, NonEmptyString } from '@kbn/securitysolution-io-ts-types'; import { enumFromString } from '../../../../utils/enum_from_string'; import { TLogLevel } from './log_level'; @@ -56,5 +56,6 @@ export const RuleExecutionEvent = t.type({ sequence: t.number, level: TLogLevel, type: TRuleExecutionEventType, + execution_id: NonEmptyString, message: t.string, }); diff --git a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts index 9f5bd8d273efc..628e71cf51790 100644 --- a/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts +++ b/x-pack/plugins/security_solution/common/api/detection_engine/rule_monitoring/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts @@ -8,7 +8,7 @@ import * as t from 'io-ts'; import { DefaultPerPage, DefaultPage } from '@kbn/securitysolution-io-ts-alerting-types'; -import { defaultCsvArray, NonEmptyString } from '@kbn/securitysolution-io-ts-types'; +import { defaultCsvArray, IsoDateString, NonEmptyString } from '@kbn/securitysolution-io-ts-types'; import { DefaultSortOrderDesc, PaginationResult } from '../../../model'; import { RuleExecutionEvent, TRuleExecutionEventType, TLogLevel } from '../../model'; @@ -32,13 +32,20 @@ export type GetRuleExecutionEventsRequestQuery = t.TypeOf< typeof GetRuleExecutionEventsRequestQuery >; export const GetRuleExecutionEventsRequestQuery = t.exact( - t.type({ - event_types: defaultCsvArray(TRuleExecutionEventType), - log_levels: defaultCsvArray(TLogLevel), - sort_order: DefaultSortOrderDesc, // defaults to 'desc' - page: DefaultPage, // defaults to 1 - per_page: DefaultPerPage, // defaults to 20 - }) + t.intersection([ + t.partial({ + search_term: NonEmptyString, + event_types: defaultCsvArray(TRuleExecutionEventType), + log_levels: defaultCsvArray(TLogLevel), + date_start: IsoDateString, + date_end: IsoDateString, + }), + t.type({ + sort_order: DefaultSortOrderDesc, // defaults to 'desc' + page: DefaultPage, // defaults to 1 + per_page: DefaultPerPage, // defaults to 20 + }), + ]) ); /** diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index cbc84c3314e88..27e9f4f918cba 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -108,7 +108,7 @@ export const allowedExperimentalValues = Object.freeze({ /** * Enables Protection Updates tab in the Endpoint Policy Details page */ - protectionUpdatesEnabled: true, + protectionUpdatesEnabled: false, }); type ExperimentalConfigKeys = Array; diff --git a/x-pack/plugins/security_solution/public/app/app.tsx b/x-pack/plugins/security_solution/public/app/app.tsx index 8bbf2c3a425ec..88ced06445c07 100644 --- a/x-pack/plugins/security_solution/public/app/app.tsx +++ b/x-pack/plugins/security_solution/public/app/app.tsx @@ -5,10 +5,9 @@ * 2.0. */ -import { AssistantProvider } from '@kbn/elastic-assistant'; import type { History } from 'history'; import type { FC } from 'react'; -import React, { memo, useCallback } from 'react'; +import React, { memo } from 'react'; import type { Store, Action } from 'redux'; import { Provider as ReduxStoreProvider } from 'react-redux'; @@ -21,28 +20,18 @@ import { CellActionsProvider } from '@kbn/cell-actions'; import { NavigationProvider } from '@kbn/security-solution-navigation'; import { UpsellingProvider } from '../common/components/upselling_provider'; -import { useAssistantTelemetry } from '../assistant/use_assistant_telemetry'; -import { getComments } from '../assistant/get_comments'; -import { augmentMessageCodeBlocks, LOCAL_STORAGE_KEY } from '../assistant/helpers'; -import { useConversationStore } from '../assistant/use_conversation_store'; import { ManageUserInfo } from '../detections/components/user_info'; -import { DEFAULT_DARK_MODE, APP_NAME, APP_ID } from '../../common/constants'; +import { DEFAULT_DARK_MODE, APP_NAME } from '../../common/constants'; import { ErrorToastDispatcher } from '../common/components/error_toast_dispatcher'; import { MlCapabilitiesProvider } from '../common/components/ml/permissions/ml_capabilities_provider'; import { GlobalToaster, ManageGlobalToaster } from '../common/components/toasters'; import { KibanaContextProvider, useKibana, useUiSetting$ } from '../common/lib/kibana'; import type { State } from '../common/store'; -import { ASSISTANT_TITLE } from './translations'; import type { StartServices } from '../types'; import { PageRouter } from './routes'; import { UserPrivilegesProvider } from '../common/components/user_privileges/user_privileges_context'; import { ReactQueryClientProvider } from '../common/containers/query_client/query_client_provider'; -import { DEFAULT_ALLOW, DEFAULT_ALLOW_REPLACEMENT } from '../assistant/content/anonymization'; -import { PROMPT_CONTEXTS } from '../assistant/content/prompt_contexts'; -import { BASE_SECURITY_QUICK_PROMPTS } from '../assistant/content/quick_prompts'; -import { BASE_SECURITY_SYSTEM_PROMPTS } from '../assistant/content/prompts/system'; -import { useAnonymizationStore } from '../assistant/use_anonymization_store'; -import { useAssistantAvailability } from '../assistant/use_assistant_availability'; +import { AssistantProvider } from '../assistant/provider'; interface StartAppComponent { children: React.ReactNode; @@ -65,29 +54,12 @@ const StartAppComponent: FC = ({ const { i18n, application: { capabilities }, - http, - triggersActionsUi: { actionTypeRegistry }, uiActions, upselling, } = services; - const assistantAvailability = useAssistantAvailability(); - const { conversations, setConversations } = useConversationStore(); - const { defaultAllow, defaultAllowReplacement, setDefaultAllow, setDefaultAllowReplacement } = - useAnonymizationStore(); - - const getInitialConversation = useCallback(() => { - return conversations; - }, [conversations]); - - const nameSpace = `${APP_ID}.${LOCAL_STORAGE_KEY}`; - const [darkMode] = useUiSetting$(DEFAULT_DARK_MODE); - const { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION } = useKibana().services.docLinks; - - const assistantTelemetry = useAssistantTelemetry(); - return ( @@ -95,29 +67,7 @@ const StartAppComponent: FC = ({ - + diff --git a/x-pack/plugins/security_solution/public/app/home/global_header/index.test.tsx b/x-pack/plugins/security_solution/public/app/home/global_header/index.test.tsx index 7dc0b338193a9..fe0b5bd500dc8 100644 --- a/x-pack/plugins/security_solution/public/app/home/global_header/index.test.tsx +++ b/x-pack/plugins/security_solution/public/app/home/global_header/index.test.tsx @@ -26,7 +26,6 @@ import { TimelineId } from '../../../../common/types/timeline'; import { createStore } from '../../../common/store'; import { kibanaObservable } from '@kbn/timelines-plugin/public/mock'; import { sourcererPaths } from '../../../common/containers/sourcerer'; -import { useAssistantAvailability } from '../../../assistant/use_assistant_availability'; jest.mock('react-router-dom', () => { const actual = jest.requireActual('react-router-dom'); @@ -49,15 +48,6 @@ jest.mock('react-reverse-portal', () => ({ createHtmlPortalNode: () => ({ unmount: jest.fn() }), })); -jest.mock('../../../assistant/use_assistant_availability'); - -jest.mocked(useAssistantAvailability).mockReturnValue({ - hasAssistantPrivilege: false, - hasConnectorsAllPrivilege: true, - hasConnectorsReadPrivilege: true, - isAssistantEnabled: true, -}); - describe('global header', () => { const mockSetHeaderActionMenu = jest.fn(); const state = { @@ -183,18 +173,11 @@ describe('global header', () => { expect(queryByTestId('sourcerer-trigger')).not.toBeInTheDocument(); }); - it('shows AI Assistant header link if user has necessary privileges', () => { + it('shows AI Assistant header link', () => { (useLocation as jest.Mock).mockReturnValue([ { pageName: SecurityPageName.overview, detailName: undefined }, ]); - jest.mocked(useAssistantAvailability).mockReturnValue({ - hasAssistantPrivilege: true, - hasConnectorsAllPrivilege: true, - hasConnectorsReadPrivilege: true, - isAssistantEnabled: true, - }); - const { findByTestId } = render( @@ -203,25 +186,4 @@ describe('global header', () => { waitFor(() => expect(findByTestId('assistantHeaderLink')).toBeInTheDocument()); }); - - it('does not show AI Assistant header link if user does not have necessary privileges', () => { - (useLocation as jest.Mock).mockReturnValue([ - { pageName: SecurityPageName.overview, detailName: undefined }, - ]); - - jest.mocked(useAssistantAvailability).mockReturnValue({ - hasAssistantPrivilege: false, - hasConnectorsAllPrivilege: true, - hasConnectorsReadPrivilege: true, - isAssistantEnabled: true, - }); - - const { findByTestId } = render( - - - - ); - - waitFor(() => expect(findByTestId('assistantHeaderLink')).not.toBeInTheDocument()); - }); }); diff --git a/x-pack/plugins/security_solution/public/app/home/global_header/index.tsx b/x-pack/plugins/security_solution/public/app/home/global_header/index.tsx index 615d4e8161786..bde0b71a43270 100644 --- a/x-pack/plugins/security_solution/public/app/home/global_header/index.tsx +++ b/x-pack/plugins/security_solution/public/app/home/global_header/index.tsx @@ -27,8 +27,7 @@ import { timelineSelectors } from '../../../timelines/store/timeline'; import { useShallowEqualSelector } from '../../../common/hooks/use_selector'; import { getScopeFromPath, showSourcererByPath } from '../../../common/containers/sourcerer'; import { useAddIntegrationsUrl } from '../../../common/hooks/use_add_integrations_url'; -import { AssistantHeaderLink } from './assistant_header_link'; -import { useAssistantAvailability } from '../../../assistant/use_assistant_availability'; +import { AssistantHeaderLink } from '../../../assistant/header_link'; const BUTTON_ADD_DATA = i18n.translate('xpack.securitySolution.globalHeader.buttonAddData', { defaultMessage: 'Add integrations', @@ -54,8 +53,6 @@ export const GlobalHeader = React.memo( const { href, onClick } = useAddIntegrationsUrl(); - const { hasAssistantPrivilege } = useAssistantAvailability(); - useEffect(() => { setHeaderActionMenu((element) => { const mount = toMountPoint(, { theme$: theme.theme$ }); @@ -91,7 +88,7 @@ export const GlobalHeader = React.memo( {showSourcerer && !showTimeline && ( )} - {hasAssistantPrivilege && } + diff --git a/x-pack/plugins/security_solution/public/app/home/index.tsx b/x-pack/plugins/security_solution/public/app/home/index.tsx index 1e98b1c438957..b951501b16cb7 100644 --- a/x-pack/plugins/security_solution/public/app/home/index.tsx +++ b/x-pack/plugins/security_solution/public/app/home/index.tsx @@ -29,6 +29,7 @@ import { useUpdateExecutionContext } from '../../common/hooks/use_update_executi import { useUpgradeSecurityPackages } from '../../detection_engine/rule_management/logic/use_upgrade_security_packages'; import { useSetupDetectionEngineHealthApi } from '../../detection_engine/rule_monitoring'; import { TopValuesPopover } from '../components/top_values_popover/top_values_popover'; +import { AssistantOverlay } from '../../assistant/overlay'; interface HomePageProps { children: React.ReactNode; @@ -63,6 +64,7 @@ const HomePageComponent: React.FC = ({ children, setHeaderActionM + diff --git a/x-pack/plugins/security_solution/public/app/index.tsx b/x-pack/plugins/security_solution/public/app/index.tsx index 91eca678f6d3c..e635c2d9fd3d3 100644 --- a/x-pack/plugins/security_solution/public/app/index.tsx +++ b/x-pack/plugins/security_solution/public/app/index.tsx @@ -7,6 +7,7 @@ import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; +import { SubscriptionTrackingProvider } from '@kbn/subscription-tracking'; import { SecurityApp } from './app'; import type { RenderAppProps } from './types'; import { AppRoutes } from './app_routes'; @@ -21,6 +22,7 @@ export const renderApp = ({ usageCollection, subPluginRoutes, theme$, + subscriptionTrackingServices, }: RenderAppProps): (() => void) => { const ApplicationUsageTrackingProvider = usageCollection?.components.ApplicationUsageTrackingProvider ?? React.Fragment; @@ -34,7 +36,12 @@ export const renderApp = ({ theme$={theme$} > - + + + , element diff --git a/x-pack/plugins/security_solution/public/app/translations.ts b/x-pack/plugins/security_solution/public/app/translations.ts index fcee866a2da3a..516239d164632 100644 --- a/x-pack/plugins/security_solution/public/app/translations.ts +++ b/x-pack/plugins/security_solution/public/app/translations.ts @@ -7,10 +7,6 @@ import { i18n } from '@kbn/i18n'; -export const ASSISTANT_TITLE = i18n.translate('xpack.securitySolution.assistant.title', { - defaultMessage: 'Elastic AI Assistant', -}); - export const OVERVIEW = i18n.translate('xpack.securitySolution.navigation.overview', { defaultMessage: 'Overview', }); diff --git a/x-pack/plugins/security_solution/public/app/types.ts b/x-pack/plugins/security_solution/public/app/types.ts index 578a4800f7f64..66bab19c945fe 100644 --- a/x-pack/plugins/security_solution/public/app/types.ts +++ b/x-pack/plugins/security_solution/public/app/types.ts @@ -19,6 +19,7 @@ import type { RouteProps } from 'react-router-dom'; import type { AppMountParameters } from '@kbn/core/public'; import type { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import type { TableState } from '@kbn/securitysolution-data-table'; +import type { Services as SubscriptionTrackingServices } from '@kbn/subscription-tracking'; import type { ExploreReducer, ExploreState } from '../explore'; import type { StartServices } from '../types'; @@ -29,6 +30,7 @@ export interface RenderAppProps extends AppMountParameters { services: StartServices; store: Store; subPluginRoutes: RouteProps[]; + subscriptionTrackingServices: SubscriptionTrackingServices; usageCollection?: UsageCollectionSetup; } diff --git a/x-pack/plugins/security_solution/public/assistant/header_link.test.tsx b/x-pack/plugins/security_solution/public/assistant/header_link.test.tsx new file mode 100644 index 0000000000000..e6b8cfea388a1 --- /dev/null +++ b/x-pack/plugins/security_solution/public/assistant/header_link.test.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { render } from '@testing-library/react'; +import { AssistantHeaderLink } from './header_link'; + +const mockShowAssistantOverlay = jest.fn(); +const mockAssistantAvailability = jest.fn(() => ({ + hasAssistantPrivilege: true, +})); +jest.mock('@kbn/elastic-assistant/impl/assistant_context', () => ({ + useAssistantContext: () => ({ + assistantAvailability: mockAssistantAvailability(), + showAssistantOverlay: mockShowAssistantOverlay, + }), +})); + +describe('AssistantHeaderLink', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render the header link text', () => { + const { queryByText, queryByTestId } = render(); + expect(queryByTestId('assistantHeaderLink')).toBeInTheDocument(); + expect(queryByText('AI Assistant')).toBeInTheDocument(); + }); + + it('should not render the header link if not authorized', () => { + mockAssistantAvailability.mockReturnValueOnce({ hasAssistantPrivilege: false }); + + const { queryByText, queryByTestId } = render(); + expect(queryByTestId('assistantHeaderLink')).not.toBeInTheDocument(); + expect(queryByText('AI Assistant')).not.toBeInTheDocument(); + }); + + it('should call the assistant overlay to show on click', () => { + const { queryByTestId } = render(); + queryByTestId('assistantHeaderLink')?.click(); + expect(mockShowAssistantOverlay).toHaveBeenCalledTimes(1); + expect(mockShowAssistantOverlay).toHaveBeenCalledWith({ showOverlay: true }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/app/home/global_header/assistant_header_link.tsx b/x-pack/plugins/security_solution/public/assistant/header_link.tsx similarity index 61% rename from x-pack/plugins/security_solution/public/app/home/global_header/assistant_header_link.tsx rename to x-pack/plugins/security_solution/public/assistant/header_link.tsx index 00e1acf7e45d5..342a95454cdb4 100644 --- a/x-pack/plugins/security_solution/public/app/home/global_header/assistant_header_link.tsx +++ b/x-pack/plugins/security_solution/public/assistant/header_link.tsx @@ -14,43 +14,42 @@ import { AssistantAvatar } from '@kbn/elastic-assistant'; const isMac = navigator.platform.toLowerCase().indexOf('mac') >= 0; +const TOOLTIP_CONTENT = i18n.translate( + 'xpack.securitySolution.globalHeader.assistantHeaderLinkShortcutTooltip', + { + values: { keyboardShortcut: isMac ? '⌘ ;' : 'Ctrl ;' }, + defaultMessage: 'Keyboard shortcut {keyboardShortcut}', + } +); +const LINK_LABEL = i18n.translate('xpack.securitySolution.globalHeader.assistantHeaderLink', { + defaultMessage: 'AI Assistant', +}); + /** * Elastic AI Assistant header link */ -export const AssistantHeaderLink = React.memo(() => { - const { showAssistantOverlay } = useAssistantContext(); - - const keyboardShortcut = isMac ? '⌘ ;' : 'Ctrl ;'; - - const tooltipContent = i18n.translate( - 'xpack.securitySolution.globalHeader.assistantHeaderLinkShortcutTooltip', - { - values: { keyboardShortcut }, - defaultMessage: 'Keyboard shortcut {keyboardShortcut}', - } - ); +export const AssistantHeaderLink = () => { + const { showAssistantOverlay, assistantAvailability } = useAssistantContext(); const showOverlay = useCallback( () => showAssistantOverlay({ showOverlay: true }), [showAssistantOverlay] ); + if (!assistantAvailability.hasAssistantPrivilege) { + return null; + } + return ( - + - - {i18n.translate('xpack.securitySolution.globalHeader.assistantHeaderLink', { - defaultMessage: 'AI Assistant', - })} - + {LINK_LABEL} ); -}); - -AssistantHeaderLink.displayName = 'AssistantHeaderLink'; +}; diff --git a/x-pack/plugins/security_solution/public/assistant/overlay.test.tsx b/x-pack/plugins/security_solution/public/assistant/overlay.test.tsx new file mode 100644 index 0000000000000..fb082a4677595 --- /dev/null +++ b/x-pack/plugins/security_solution/public/assistant/overlay.test.tsx @@ -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 React from 'react'; +import { render } from '@testing-library/react'; +import { AssistantOverlay } from './overlay'; + +const mockAssistantAvailability = jest.fn(() => ({ + hasAssistantPrivilege: true, +})); +jest.mock('@kbn/elastic-assistant', () => ({ + AssistantOverlay: () =>
, + useAssistantContext: () => ({ + assistantAvailability: mockAssistantAvailability(), + }), +})); + +describe('AssistantOverlay', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render the header link text', () => { + const { queryByTestId } = render(); + expect(queryByTestId('assistantOverlay')).toBeInTheDocument(); + }); + + it('should not render the header link if not authorized', () => { + mockAssistantAvailability.mockReturnValueOnce({ hasAssistantPrivilege: false }); + + const { queryByTestId } = render(); + expect(queryByTestId('assistantOverlay')).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/assistant/overlay.tsx b/x-pack/plugins/security_solution/public/assistant/overlay.tsx new file mode 100644 index 0000000000000..3ffaddaf2e8f5 --- /dev/null +++ b/x-pack/plugins/security_solution/public/assistant/overlay.tsx @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { + AssistantOverlay as ElasticAssistantOverlay, + useAssistantContext, +} from '@kbn/elastic-assistant'; + +export const AssistantOverlay: React.FC = () => { + const { assistantAvailability } = useAssistantContext(); + if (!assistantAvailability.hasAssistantPrivilege) { + return null; + } + return ; +}; diff --git a/x-pack/plugins/security_solution/public/assistant/provider.tsx b/x-pack/plugins/security_solution/public/assistant/provider.tsx new file mode 100644 index 0000000000000..cde9d5b58524d --- /dev/null +++ b/x-pack/plugins/security_solution/public/assistant/provider.tsx @@ -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 React, { useCallback } from 'react'; +import { i18n } from '@kbn/i18n'; +import { AssistantProvider as ElasticAssistantProvider } from '@kbn/elastic-assistant'; +import { useKibana } from '../common/lib/kibana'; +import { useAssistantTelemetry } from './use_assistant_telemetry'; +import { getComments } from './get_comments'; +import { augmentMessageCodeBlocks, LOCAL_STORAGE_KEY } from './helpers'; +import { useConversationStore } from './use_conversation_store'; +import { DEFAULT_ALLOW, DEFAULT_ALLOW_REPLACEMENT } from './content/anonymization'; +import { PROMPT_CONTEXTS } from './content/prompt_contexts'; +import { BASE_SECURITY_QUICK_PROMPTS } from './content/quick_prompts'; +import { BASE_SECURITY_SYSTEM_PROMPTS } from './content/prompts/system'; +import { useAnonymizationStore } from './use_anonymization_store'; +import { useAssistantAvailability } from './use_assistant_availability'; +import { APP_ID } from '../../common/constants'; + +const ASSISTANT_TITLE = i18n.translate('xpack.securitySolution.assistant.title', { + defaultMessage: 'Elastic AI Assistant', +}); + +/** + * This component configures the Elastic AI Assistant context provider for the Security Solution app. + */ +export const AssistantProvider: React.FC = ({ children }) => { + const { + http, + triggersActionsUi: { actionTypeRegistry }, + docLinks: { ELASTIC_WEBSITE_URL, DOC_LINK_VERSION }, + } = useKibana().services; + + const { conversations, setConversations } = useConversationStore(); + const getInitialConversation = useCallback(() => { + return conversations; + }, [conversations]); + + const assistantAvailability = useAssistantAvailability(); + const assistantTelemetry = useAssistantTelemetry(); + + const { defaultAllow, defaultAllowReplacement, setDefaultAllow, setDefaultAllowReplacement } = + useAnonymizationStore(); + + const nameSpace = `${APP_ID}.${LOCAL_STORAGE_KEY}`; + + return ( + + {children} + + ); +}; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/insights/related_alerts_upsell.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/insights/related_alerts_upsell.tsx index ba225495a032b..303e55ff66b97 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/insights/related_alerts_upsell.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/insights/related_alerts_upsell.tsx @@ -5,12 +5,18 @@ * 2.0. */ -import React, { useCallback } from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiIcon, EuiText } from '@elastic/eui'; +import React from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiText } from '@elastic/eui'; import { euiStyled } from '@kbn/kibana-react-plugin/common'; +import { SubscriptionLink } from '@kbn/subscription-tracking'; +import type { SubscriptionContextData } from '@kbn/subscription-tracking'; import { INSIGHTS_UPSELL } from './translations'; -import { useNavigation } from '../../../lib/kibana'; + +const subscriptionContext: SubscriptionContextData = { + feature: 'alert-details-insights', + source: 'security__alert-details-flyout', +}; const UpsellContainer = euiStyled.div` border: 1px solid ${({ theme }) => theme.eui.euiColorLightShade}; @@ -23,15 +29,6 @@ const StyledIcon = euiStyled(EuiIcon)` `; export const RelatedAlertsUpsell = React.memo(() => { - const { getAppUrl, navigateTo } = useNavigation(); - const subscriptionUrl = getAppUrl({ - appId: 'management', - path: 'stack/license_management', - }); - const goToSubscription = useCallback(() => { - navigateTo({ url: subscriptionUrl }); - }, [navigateTo, subscriptionUrl]); - return ( @@ -40,9 +37,13 @@ export const RelatedAlertsUpsell = React.memo(() => { - + {INSIGHTS_UPSELL} - + diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/tab_navigation.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/tab_navigation.tsx index 24f50df4a5c67..996fdcd1bb176 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/tab_navigation.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/tab_navigation/tab_navigation.tsx @@ -31,7 +31,7 @@ const TabNavigationItemComponent = ({ const handleClick = useCallback( (ev) => { ev.preventDefault(); - navigateTo({ path: hrefWithSearch }); + navigateTo({ path: hrefWithSearch, restoreScroll: true }); track(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.TAB_CLICKED}${id}`); }, [navigateTo, hrefWithSearch, id] diff --git a/x-pack/plugins/security_solution/public/common/components/page_wrapper/index.tsx b/x-pack/plugins/security_solution/public/common/components/page_wrapper/index.tsx index d893674d49af5..acedbe669f36a 100644 --- a/x-pack/plugins/security_solution/public/common/components/page_wrapper/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/page_wrapper/index.tsx @@ -5,13 +5,11 @@ * 2.0. */ -import { AssistantOverlay } from '@kbn/elastic-assistant'; import classNames from 'classnames'; import React, { useEffect } from 'react'; import styled from 'styled-components'; import type { CommonProps } from '@elastic/eui'; -import { useAssistantAvailability } from '../../../assistant/use_assistant_availability'; import { useGlobalFullScreen } from '../../containers/use_full_screen'; import { AppGlobalStyle } from '../page'; @@ -42,7 +40,6 @@ interface SecuritySolutionPageWrapperProps { const SecuritySolutionPageWrapperComponent: React.FC< SecuritySolutionPageWrapperProps & CommonProps > = ({ children, className, style, noPadding, noTimeline, ...otherProps }) => { - const { isAssistantEnabled, hasAssistantPrivilege } = useAssistantAvailability(); const { globalFullScreen, setGlobalFullScreen } = useGlobalFullScreen(); useEffect(() => { setGlobalFullScreen(false); // exit full screen mode on page load @@ -59,7 +56,6 @@ const SecuritySolutionPageWrapperComponent: React.FC< {children} - {hasAssistantPrivilege && } ); }; diff --git a/x-pack/plugins/security_solution/public/common/components/query_bar/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/query_bar/index.test.tsx index 118c78e290759..934e923d5724d 100644 --- a/x-pack/plugins/security_solution/public/common/components/query_bar/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/query_bar/index.test.tsx @@ -16,9 +16,45 @@ import { SearchBar } from '@kbn/unified-search-plugin/public'; import type { QueryBarComponentProps } from '.'; import { QueryBar } from '.'; +import type { DataViewFieldMap } from '@kbn/data-views-plugin/common'; +import { createStubDataView } from '@kbn/data-views-plugin/common/data_view.stub'; +import { fields } from '@kbn/data-views-plugin/common/mocks'; +import { useKibana } from '../../lib/kibana'; + +const getMockIndexPattern = () => ({ + ...createStubDataView({ + spec: { + id: '1234', + title: 'logstash-*', + fields: ((): DataViewFieldMap => { + const fieldMap: DataViewFieldMap = Object.create(null); + for (const field of fields) { + fieldMap[field.name] = { ...field }; + } + return fieldMap; + })(), + }, + }), +}); + const mockUiSettingsForFilterManager = coreMock.createStart().uiSettings; +jest.mock('../../lib/kibana'); describe('QueryBar ', () => { + const mockClearInstanceCache = jest.fn().mockImplementation(({ id }: { id: string }) => { + return id; + }); + + (useKibana as jest.Mock).mockReturnValue({ + services: { + data: { + dataViews: { + create: jest.fn().mockResolvedValue(getMockIndexPattern()), + clearInstanceCache: mockClearInstanceCache, + }, + }, + }, + }); const mockOnChangeQuery = jest.fn(); const mockOnSubmitQuery = jest.fn(); const mockOnSavedQuery = jest.fn(); @@ -52,10 +88,10 @@ describe('QueryBar ', () => { mockOnSavedQuery.mockClear(); }); - test('check if we format the appropriate props to QueryBar', () => { - const wrapper = mount( - - { + await act(async () => { + const wrapper = await getWrapper( + { onSubmitQuery={mockOnSubmitQuery} onSavedQuery={mockOnSavedQuery} /> - - ); - const { - customSubmitButton, - timeHistory, - onClearSavedQuery, - onFiltersUpdated, - onQueryChange, - onQuerySubmit, - onSaved, - onSavedQueryUpdated, - ...searchBarProps - } = wrapper.find(SearchBar).props(); + ); - expect(searchBarProps).toEqual({ - dataTestSubj: undefined, - dateRangeFrom: 'now/d', - dateRangeTo: 'now/d', - displayStyle: undefined, - filters: [], - indexPatterns: [ - { - fields: [ - { - aggregatable: true, - name: '@timestamp', - searchable: true, - type: 'date', - }, - { - aggregatable: true, - name: '@version', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.ephemeral_id', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.hostname', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.id', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.test1', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.test2', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.test3', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.test4', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.test5', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.test6', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.test7', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'agent.test8', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - name: 'host.name', - searchable: true, - type: 'string', - }, - { - aggregatable: false, - name: 'nestedField.firstAttributes', - searchable: true, - type: 'string', - }, - { - aggregatable: false, - name: 'nestedField.secondAttributes', - searchable: true, - type: 'string', - }, - ], - title: 'filebeat-*,auditbeat-*,packetbeat-*', - }, - ], - isLoading: false, - isRefreshPaused: true, - query: { - language: 'kuery', - query: 'here: query', - }, - refreshInterval: undefined, - savedQuery: undefined, - showAutoRefreshOnly: false, - showDatePicker: false, - showFilterBar: true, - showQueryInput: true, - showSaveQuery: true, - showSubmitButton: false, + await waitFor(() => { + wrapper.update(); + const { + customSubmitButton, + timeHistory, + onClearSavedQuery, + onFiltersUpdated, + onQueryChange, + onQuerySubmit, + onSaved, + onSavedQueryUpdated, + ...searchBarProps + } = wrapper.find(SearchBar).props(); + expect((searchBarProps?.indexPatterns ?? [{ id: 'unknown' }])[0].id).toEqual( + getMockIndexPattern().id + ); + }); + // ensure useEffect cleanup is called correctly after component unmounts + wrapper.unmount(); + expect(mockClearInstanceCache).toHaveBeenCalledWith(getMockIndexPattern().id); }); }); @@ -294,7 +215,6 @@ describe('QueryBar ', () => { const onSubmitQueryRef = searchBarProps.onQuerySubmit; const onSavedQueryRef = searchBarProps.onSavedQueryUpdated; wrapper.setProps({ onSavedQuery: jest.fn() }); - wrapper.update(); expect(onSavedQueryRef).not.toEqual(wrapper.find(SearchBar).props().onSavedQueryUpdated); expect(onChangedQueryRef).toEqual(wrapper.find(SearchBar).props().onQueryChange); diff --git a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx index d86f3de10b549..9356956c23d56 100644 --- a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { memo, useMemo, useCallback } from 'react'; +import React, { memo, useMemo, useCallback, useState, useEffect } from 'react'; import deepEqual from 'fast-deep-equal'; import type { DataViewBase, Filter, Query, TimeRange } from '@kbn/es-query'; @@ -16,6 +16,8 @@ import type { SearchBarProps } from '@kbn/unified-search-plugin/public'; import { SearchBar } from '@kbn/unified-search-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; +import { useKibana } from '../../lib/kibana'; + export interface QueryBarComponentProps { dataTestSubj?: string; dateRangeFrom?: string; @@ -36,6 +38,9 @@ export interface QueryBarComponentProps { isDisabled?: boolean; } +export const isDataView = (obj: unknown): obj is DataView => + obj != null && typeof obj === 'object' && Object.hasOwn(obj, 'getName'); + export const QueryBar = memo( ({ dateRangeFrom, @@ -56,6 +61,8 @@ export const QueryBar = memo( displayStyle, isDisabled, }) => { + const { data } = useKibana().services; + const [dataView, setDataView] = useState(); const onQuerySubmit = useCallback( (payload: { dateRange: TimeRange; query?: Query }) => { if (payload.query != null && !deepEqual(payload.query, filterQuery)) { @@ -102,16 +109,33 @@ export const QueryBar = memo( [filterManager] ); - const indexPatterns = useMemo(() => [indexPattern], [indexPattern]); - const timeHistory = useMemo(() => new TimeHistory(new Storage(localStorage)), []); + useEffect(() => { + let dv: DataView; + if (isDataView(indexPattern)) { + setDataView(indexPattern); + } else { + const createDataView = async () => { + dv = await data.dataViews.create({ title: indexPattern.title }); + setDataView(dv); + }; + createDataView(); + } + return () => { + if (dv?.id) { + data.dataViews.clearInstanceCache(dv?.id); + } + }; + }, [data.dataViews, indexPattern]); + const timeHistory = useMemo(() => new TimeHistory(new Storage(localStorage)), []); + const arrDataView = useMemo(() => (dataView != null ? [dataView] : []), [dataView]); return ( = ({ return ( - - - ({ eui: euiDarkVars, darkMode: true })}> - - - - - Promise.resolve(cellActions)} - > - {children} - - - - - - - - + + + + ({ eui: euiDarkVars, darkMode: true })}> + + + + + Promise.resolve(cellActions)} + > + {children} + + + + + + + + + ); @@ -117,27 +120,29 @@ const TestProvidersWithPrivilegesComponent: React.FC = ({ return ( - - ({ eui: euiDarkVars, darkMode: true })}> - - - Promise.resolve(cellActions)} + + + ({ eui: euiDarkVars, darkMode: true })}> + + - {children} - - - - - + Promise.resolve(cellActions)} + > + {children} + + + + + + ); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/__mocks__/api_client.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/__mocks__/api_client.ts index 18328e5b9b901..b5b8f201f0ff3 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/__mocks__/api_client.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/__mocks__/api_client.ts @@ -32,6 +32,7 @@ export const api: jest.Mocked = { sequence: 0, level: LogLevel.info, type: RuleExecutionEventType['status-change'], + execution_id: 'execution-id-1', message: 'Rule changed status to "succeeded". Rule execution completed without errors', }, ], diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client.test.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client.test.ts index 9fac84959f7dc..d1317e2f74252 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client.test.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client.test.ts @@ -72,14 +72,51 @@ describe('Rule Monitoring API Client', () => { ); }); - it('calls API correctly with filter and pagination options', async () => { + const ISO_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/; + + it.each([ + [ + 'search term filter', + { searchTerm: 'something to search' }, + { search_term: 'something to search' }, + ], + [ + 'event types filter', + { eventTypes: [RuleExecutionEventType.message] }, + { event_types: 'message' }, + ], + [ + 'log level filter', + { logLevels: [LogLevel.warn, LogLevel.error] }, + { log_levels: 'warn,error' }, + ], + [ + 'start date filter in relative format', + { dateRange: { start: 'now-1d/d' } }, + { date_start: expect.stringMatching(ISO_PATTERN) }, + ], + [ + 'end date filter', + { dateRange: { end: 'now-3d/d' } }, + { date_end: expect.stringMatching(ISO_PATTERN) }, + ], + [ + 'date range filter in relative format', + { dateRange: { start: new Date().toISOString(), end: new Date().toISOString() } }, + { + date_start: expect.stringMatching(ISO_PATTERN), + date_end: expect.stringMatching(ISO_PATTERN), + }, + ], + [ + 'pagination', + { sortOrder: 'asc', page: 42, perPage: 146 } as const, + { sort_order: 'asc', page: 42, per_page: 146 }, + ], + ])('calls API correctly with %s', async (_, params, expectedParams) => { await api.fetchRuleExecutionEvents({ ruleId: '42', - eventTypes: [RuleExecutionEventType.message], - logLevels: [LogLevel.warn, LogLevel.error], - sortOrder: 'asc', - page: 42, - perPage: 146, + ...params, }); expect(fetchMock).toHaveBeenCalledWith( @@ -87,11 +124,7 @@ describe('Rule Monitoring API Client', () => { expect.objectContaining({ method: 'GET', query: { - event_types: 'message', - log_levels: 'warn,error', - sort_order: 'asc', - page: 42, - per_page: 146, + ...expectedParams, }, }) ); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client.ts index d5d34447d2bf4..bd1bf80a0f4c3 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { omitBy, isUndefined } from 'lodash'; import dateMath from '@kbn/datemath'; import { KibanaServices } from '../../../common/lib/kibana'; @@ -36,20 +37,38 @@ export const api: IRuleMonitoringApiClient = { fetchRuleExecutionEvents: ( args: FetchRuleExecutionEventsArgs ): Promise => { - const { ruleId, eventTypes, logLevels, sortOrder, page, perPage, signal } = args; + const { + ruleId, + searchTerm, + eventTypes, + logLevels, + dateRange, + sortOrder, + page, + perPage, + signal, + } = args; const url = getRuleExecutionEventsUrl(ruleId); + const startDate = dateMath.parse(dateRange?.start ?? '')?.toISOString(); + const endDate = dateMath.parse(dateRange?.end ?? '', { roundUp: true })?.toISOString(); return http().fetch(url, { method: 'GET', version: '1', - query: { - event_types: eventTypes?.join(','), - log_levels: logLevels?.join(','), - sort_order: sortOrder, - page, - per_page: perPage, - }, + query: omitBy( + { + search_term: searchTerm?.length ? searchTerm : undefined, + event_types: eventTypes?.length ? eventTypes.join(',') : undefined, + log_levels: logLevels?.length ? logLevels.join(',') : undefined, + date_start: startDate, + date_end: endDate, + sort_order: sortOrder, + page, + per_page: perPage, + }, + isUndefined + ), signal, }); }, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client_interface.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client_interface.ts index 4ded970a28e4d..a51059a16ef42 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client_interface.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/api/api_client_interface.ts @@ -46,12 +46,22 @@ export interface RuleMonitoringApiCallArgs { signal?: AbortSignal; } +export interface DateRange { + start?: string; + end?: string; +} + export interface FetchRuleExecutionEventsArgs extends RuleMonitoringApiCallArgs { /** * Saved Object ID of the rule (`rule.id`, not static `rule.rule_id`). */ ruleId: string; + /** + * Filter by event message. If set, result will include events matching the search term. + */ + searchTerm?: string; + /** * Filter by event type. If set, result will include only events matching any of these. */ @@ -62,6 +72,11 @@ export interface FetchRuleExecutionEventsArgs extends RuleMonitoringApiCallArgs */ logLevels?: LogLevel[]; + /** + * Filter by date range. If set, result will include only events recorded in the specified date range. + */ + dateRange?: DateRange; + /** * What order to sort by (e.g. `asc` or `desc`). */ diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/event_message_filter/event_message_filter.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/event_message_filter/event_message_filter.tsx new file mode 100644 index 0000000000000..b8d45ed5fb1a3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/event_message_filter/event_message_filter.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 { ChangeEvent } from 'react'; +import React, { useCallback } from 'react'; +import { EuiFieldSearch } from '@elastic/eui'; +import * as i18n from './translations'; + +interface EventMessageFilterProps { + value: string; + onChange: (value: string) => void; +} + +export function EventMessageFilter({ value, onChange }: EventMessageFilterProps): JSX.Element { + const handleChange = useCallback( + (e: ChangeEvent) => onChange(e.target.value), + [onChange] + ); + + return ( + + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/event_message_filter/index.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/event_message_filter/index.ts new file mode 100644 index 0000000000000..2b07bf7cf86a8 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/event_message_filter/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './event_message_filter'; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/event_message_filter/translations.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/event_message_filter/translations.ts new file mode 100644 index 0000000000000..f82c812d8208c --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/event_message_filter/translations.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const SEARCH_BY_EVENT_MESSAGE_ARIA_LABEL = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.eventLog.searchAriaLabel', + { + defaultMessage: 'Search by event message', + } +); + +export const SEARCH_BY_EVENT_MESSAGE_PLACEHOLDER = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.eventLog.searchPlaceholder', + { + defaultMessage: 'Search by event message', + } +); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/execution_events_table.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/execution_events_table.tsx index 27f500c26dac6..f05636f9aced1 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/execution_events_table.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/execution_events_table.tsx @@ -7,7 +7,13 @@ import React, { useCallback, useEffect, useMemo } from 'react'; import type { CriteriaWithPagination } from '@elastic/eui'; -import { EuiBasicTable, EuiFlexGroup, EuiFlexItem, EuiPanel } from '@elastic/eui'; +import { + EuiBasicTable, + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiSuperDatePicker, +} from '@elastic/eui'; import type { RuleExecutionEvent } from '../../../../../common/api/detection_engine/rule_monitoring'; @@ -22,6 +28,7 @@ import { usePagination } from '../basic/tables/use_pagination'; import { useColumns } from './use_columns'; import { useExpandableRows } from '../basic/tables/use_expandable_rows'; import { useExecutionEvents } from './use_execution_events'; +import { EventMessageFilter } from './event_message_filter'; import * as i18n from './translations'; @@ -56,8 +63,10 @@ const ExecutionEventsTableComponent: React.FC = ({ ru const executionEvents = useExecutionEvents({ ruleId, + searchTerm: filters.state.searchTerm, eventTypes: filters.state.eventTypes, logLevels: filters.state.logLevels, + dateRange: filters.state.dateRange, sortOrder: sorting.state.sort.direction, page: pagination.state.pageNumber, perPage: pagination.state.pageSize, @@ -86,6 +95,9 @@ const ExecutionEventsTableComponent: React.FC = ({ ru + + + @@ -95,6 +107,14 @@ const ExecutionEventsTableComponent: React.FC = ({ ru onChange={filters.setEventTypes} /> + + + {/* Table with items */} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/use_execution_events.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/use_execution_events.test.tsx index b701b3bc48f74..866e0e44b6c77 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/use_execution_events.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/use_execution_events.test.tsx @@ -87,6 +87,7 @@ describe('useExecutionEvents', () => { sequence: 0, level: LogLevel.info, type: RuleExecutionEventType['status-change'], + execution_id: 'execution-id-1', message: 'Rule changed status to "succeeded". Rule execution completed without errors', }, ], diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/use_filters.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/use_filters.ts index 36fa393467d5e..3079ff19db160 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/use_filters.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_monitoring/components/execution_events_table/use_filters.ts @@ -11,15 +11,29 @@ import type { LogLevel, RuleExecutionEventType, } from '../../../../../common/api/detection_engine/rule_monitoring'; +import type { DateRange } from '../../api'; export const useFilters = () => { + const [searchTerm, setSearchTerm] = useState(''); const [logLevels, setLogLevels] = useState([]); const [eventTypes, setEventTypes] = useState([]); - - const state = useMemo(() => ({ logLevels, eventTypes }), [logLevels, eventTypes]); + const [dateRange, setDateRange] = useState({ + start: 'now-24h', + end: 'now', + }); + const state = useMemo( + () => ({ searchTerm, logLevels, eventTypes, dateRange }), + [searchTerm, logLevels, eventTypes, dateRange] + ); return useMemo( - () => ({ state, setLogLevels, setEventTypes }), - [state, setLogLevels, setEventTypes] + () => ({ + state, + setSearchTerm, + setLogLevels, + setEventTypes, + setDateRange, + }), + [state, setSearchTerm, setLogLevels, setEventTypes, setDateRange] ); }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/osquery/osquery_response_action.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/osquery/osquery_response_action.tsx index 9f9ad505ff332..69564861c748a 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/osquery/osquery_response_action.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/osquery/osquery_response_action.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useMemo } from 'react'; +import React from 'react'; import { EuiCode, EuiEmptyPrompt } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { useIsMounted } from '@kbn/securitysolution-hook-utils'; @@ -25,10 +25,6 @@ const GhostFormField = () => <>; export const OsqueryResponseAction = React.memo((props: OsqueryResponseActionProps) => { const { osquery, application } = useKibana().services; - const OsqueryForm = useMemo( - () => osquery?.OsqueryResponseActionTypeForm, - [osquery?.OsqueryResponseActionTypeForm] - ); const isMounted = useIsMounted(); // serverless component that is returned when users do not have Endpoint.Complete tier @@ -85,8 +81,7 @@ export const OsqueryResponseAction = React.memo((props: OsqueryResponseActionPro ); } - // @ts-expect-error ts upgrade v4.7.4 - if (isMounted() && OsqueryForm) { + if (isMounted()) { return ( ( useEffect(() => { if ( isMounted() && - // @ts-expect-error ts upgrade v4.7.4 - onHide && hideOnUrlPathnameChange && !isHidden && openedOnPathName && diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_details.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_details.cy.ts index 49bb33cbc3267..0689f89f75472 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_details.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_details.cy.ts @@ -16,220 +16,229 @@ import { import { login, ROLE } from '../../tasks/login'; import { disableExpandableFlyoutAdvancedSettings, loadPage } from '../../tasks/common'; -describe('Policy Details', () => { - describe('Protection updates', () => { - const loadProtectionUpdatesUrl = (policyId: string) => - loadPage(`/app/security/administration/policy/${policyId}/protectionUpdates`); - const testNote = 'test note'; - const updatedTestNote = 'updated test note'; - - describe('Renders and saves protection updates', () => { - let indexedPolicy: IndexedFleetEndpointPolicyResponse; - let policy: PolicyData; - const today = moment.utc(); - const formattedToday = today.format('MMMM DD, YYYY'); - - beforeEach(() => { - login(); - disableExpandableFlyoutAdvancedSettings(); - }); +describe( + 'Policy Details', + { + env: { ftrConfig: { enableExperimental: ['protectionUpdatesEnabled'] } }, + }, + () => { + describe('Protection updates', () => { + const loadProtectionUpdatesUrl = (policyId: string) => + loadPage(`/app/security/administration/policy/${policyId}/protectionUpdates`); + const testNote = 'test note'; + const updatedTestNote = 'updated test note'; + + describe('Renders and saves protection updates', () => { + let indexedPolicy: IndexedFleetEndpointPolicyResponse; + let policy: PolicyData; + const today = moment.utc(); + const formattedToday = today.format('MMMM DD, YYYY'); + + beforeEach(() => { + login(); + disableExpandableFlyoutAdvancedSettings(); + }); - before(() => { - getEndpointIntegrationVersion().then((version) => { - createAgentPolicyTask(version).then((data) => { - indexedPolicy = data; - policy = indexedPolicy.integrationPolicies[0]; + before(() => { + getEndpointIntegrationVersion().then((version) => { + createAgentPolicyTask(version).then((data) => { + indexedPolicy = data; + policy = indexedPolicy.integrationPolicies[0]; + }); }); }); - }); - after(() => { - if (indexedPolicy) { - cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); - } - }); + after(() => { + if (indexedPolicy) { + cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); + } + }); - it('should render the protection updates tab content', () => { - loadProtectionUpdatesUrl(policy.id); - cy.getByTestSubj('protection-updates-automatic-updates-enabled'); - cy.getByTestSubj('protection-updates-manifest-switch'); - cy.getByTestSubj('protection-updates-manifest-name-title'); - cy.getByTestSubj('protection-updates-manifest-name'); + it('should render the protection updates tab content', () => { + loadProtectionUpdatesUrl(policy.id); + cy.getByTestSubj('protection-updates-automatic-updates-enabled'); + cy.getByTestSubj('protection-updates-manifest-switch'); + cy.getByTestSubj('protection-updates-manifest-name-title'); + cy.getByTestSubj('protection-updates-manifest-name'); - cy.getByTestSubj('protection-updates-manifest-switch').click(); + cy.getByTestSubj('protection-updates-manifest-switch').click(); - cy.getByTestSubj('protection-updates-manifest-name-deployed-version-title'); - cy.getByTestSubj('protection-updates-deployed-version').contains('latest'); - cy.getByTestSubj('protection-updates-manifest-name-version-to-deploy-title'); - cy.getByTestSubj('protection-updates-version-to-deploy-picker').within(() => { - cy.get('input').should('have.value', formattedToday); + cy.getByTestSubj('protection-updates-manifest-name-deployed-version-title'); + cy.getByTestSubj('protection-updates-deployed-version').contains('latest'); + cy.getByTestSubj('protection-updates-manifest-name-version-to-deploy-title'); + cy.getByTestSubj('protection-updates-version-to-deploy-picker').within(() => { + cy.get('input').should('have.value', formattedToday); + }); + cy.getByTestSubj('protection-updates-manifest-name-note-title'); + cy.getByTestSubj('protection-updates-manifest-note'); + cy.getByTestSubj('policyDetailsSaveButton'); }); - cy.getByTestSubj('protection-updates-manifest-name-note-title'); - cy.getByTestSubj('protection-updates-manifest-note'); - cy.getByTestSubj('policyDetailsSaveButton'); - }); - it('should successfully update the manifest version to custom date', () => { - loadProtectionUpdatesUrl(policy.id); - cy.getByTestSubj('protection-updates-manifest-switch').click(); - cy.getByTestSubj('protection-updates-manifest-note').type(testNote); - - cy.intercept('PUT', `/api/fleet/package_policies/${policy.id}`).as('policy'); - cy.intercept('POST', `/api/endpoint/protection_updates_note/*`).as('note'); - cy.getByTestSubj('policyDetailsSaveButton').click(); - cy.wait('@policy').then(({ request, response }) => { - expect(request.body.inputs[0].config.policy.value.global_manifest_version).to.equal( - today.format('YYYY-MM-DD') - ); - expect(response?.statusCode).to.equal(200); - }); + it('should successfully update the manifest version to custom date', () => { + loadProtectionUpdatesUrl(policy.id); + cy.getByTestSubj('protection-updates-manifest-switch').click(); + cy.getByTestSubj('protection-updates-manifest-note').type(testNote); + + cy.intercept('PUT', `/api/fleet/package_policies/${policy.id}`).as('policy'); + cy.intercept('POST', `/api/endpoint/protection_updates_note/*`).as('note'); + cy.getByTestSubj('policyDetailsSaveButton').click(); + cy.wait('@policy').then(({ request, response }) => { + expect(request.body.inputs[0].config.policy.value.global_manifest_version).to.equal( + today.format('YYYY-MM-DD') + ); + expect(response?.statusCode).to.equal(200); + }); - cy.wait('@note').then(({ request, response }) => { - expect(request.body.note).to.equal(testNote); - expect(response?.statusCode).to.equal(200); - }); + cy.wait('@note').then(({ request, response }) => { + expect(request.body.note).to.equal(testNote); + expect(response?.statusCode).to.equal(200); + }); - cy.getByTestSubj('protectionUpdatesSuccessfulMessage'); - cy.getByTestSubj('protection-updates-deployed-version').contains(formattedToday); - cy.getByTestSubj('protection-updates-manifest-note').contains(testNote); + cy.getByTestSubj('protectionUpdatesSuccessfulMessage'); + cy.getByTestSubj('protection-updates-deployed-version').contains(formattedToday); + cy.getByTestSubj('protection-updates-manifest-note').contains(testNote); + }); }); - }); - describe('Renders and saves protection updates with custom version', () => { - let indexedPolicy: IndexedFleetEndpointPolicyResponse; - let policy: PolicyData; + describe('Renders and saves protection updates with custom version', () => { + let indexedPolicy: IndexedFleetEndpointPolicyResponse; + let policy: PolicyData; - const twoMonthsAgo = moment.utc().subtract(2, 'months').format('YYYY-MM-DD'); + const twoMonthsAgo = moment.utc().subtract(2, 'months').format('YYYY-MM-DD'); - beforeEach(() => { - login(); - disableExpandableFlyoutAdvancedSettings(); - }); + beforeEach(() => { + login(); + disableExpandableFlyoutAdvancedSettings(); + }); - before(() => { - getEndpointIntegrationVersion().then((version) => { - createAgentPolicyTask(version).then((data) => { - indexedPolicy = data; - policy = indexedPolicy.integrationPolicies[0]; - setCustomProtectionUpdatesManifestVersion(policy.id, twoMonthsAgo); + before(() => { + getEndpointIntegrationVersion().then((version) => { + createAgentPolicyTask(version).then((data) => { + indexedPolicy = data; + policy = indexedPolicy.integrationPolicies[0]; + setCustomProtectionUpdatesManifestVersion(policy.id, twoMonthsAgo); + }); }); }); - }); - - after(() => { - if (indexedPolicy) { - cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); - } - }); - it('should update manifest version to latest when enabling automatic updates', () => { - loadProtectionUpdatesUrl(policy.id); - cy.getByTestSubj('protection-updates-manifest-outdated'); - cy.intercept('PUT', `/api/fleet/package_policies/${policy.id}`).as('policy_latest'); + after(() => { + if (indexedPolicy) { + cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); + } + }); - cy.getByTestSubj('protection-updates-manifest-switch').click(); - cy.wait('@policy_latest').then(({ request, response }) => { - expect(request.body.inputs[0].config.policy.value.global_manifest_version).to.equal( - 'latest' - ); - expect(response?.statusCode).to.equal(200); + it('should update manifest version to latest when enabling automatic updates', () => { + loadProtectionUpdatesUrl(policy.id); + cy.getByTestSubj('protection-updates-manifest-outdated'); + cy.intercept('PUT', `/api/fleet/package_policies/${policy.id}`).as('policy_latest'); + + cy.getByTestSubj('protection-updates-manifest-switch').click(); + cy.wait('@policy_latest').then(({ request, response }) => { + expect(request.body.inputs[0].config.policy.value.global_manifest_version).to.equal( + 'latest' + ); + expect(response?.statusCode).to.equal(200); + }); + cy.getByTestSubj('protectionUpdatesSuccessfulMessage'); + cy.getByTestSubj('protection-updates-automatic-updates-enabled'); }); - cy.getByTestSubj('protectionUpdatesSuccessfulMessage'); - cy.getByTestSubj('protection-updates-automatic-updates-enabled'); }); - }); - describe('Renders and saves protection updates with custom note', () => { - let indexedPolicy: IndexedFleetEndpointPolicyResponse; - let policy: PolicyData; + describe('Renders and saves protection updates with custom note', () => { + let indexedPolicy: IndexedFleetEndpointPolicyResponse; + let policy: PolicyData; - const twoMonthsAgo = moment.utc().subtract(2, 'months').format('YYYY-MM-DD'); + const twoMonthsAgo = moment.utc().subtract(2, 'months').format('YYYY-MM-DD'); - beforeEach(() => { - login(); - disableExpandableFlyoutAdvancedSettings(); - }); + beforeEach(() => { + login(); + disableExpandableFlyoutAdvancedSettings(); + }); - before(() => { - getEndpointIntegrationVersion().then((version) => { - createAgentPolicyTask(version).then((data) => { - indexedPolicy = data; - policy = indexedPolicy.integrationPolicies[0]; - setCustomProtectionUpdatesManifestVersion(policy.id, twoMonthsAgo); - setCustomProtectionUpdatesNote(policy.id, testNote); + before(() => { + getEndpointIntegrationVersion().then((version) => { + createAgentPolicyTask(version).then((data) => { + indexedPolicy = data; + policy = indexedPolicy.integrationPolicies[0]; + setCustomProtectionUpdatesManifestVersion(policy.id, twoMonthsAgo); + setCustomProtectionUpdatesNote(policy.id, testNote); + }); }); }); - }); - after(() => { - if (indexedPolicy) { - cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); - } - }); + after(() => { + if (indexedPolicy) { + cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); + } + }); - it('should update note on save', () => { - loadProtectionUpdatesUrl(policy.id); - cy.getByTestSubj('protection-updates-manifest-note').contains(testNote); - cy.getByTestSubj('protection-updates-manifest-note').clear().type(updatedTestNote); + it('should update note on save', () => { + loadProtectionUpdatesUrl(policy.id); + cy.getByTestSubj('protection-updates-manifest-note').contains(testNote); + cy.getByTestSubj('protection-updates-manifest-note').clear().type(updatedTestNote); - cy.intercept('POST', `/api/endpoint/protection_updates_note/*`).as('note_updated'); - cy.getByTestSubj('policyDetailsSaveButton').click(); - cy.wait('@note_updated').then(({ request, response }) => { - expect(request.body.note).to.equal(updatedTestNote); - expect(response?.statusCode).to.equal(200); + cy.intercept('POST', `/api/endpoint/protection_updates_note/*`).as('note_updated'); + cy.getByTestSubj('policyDetailsSaveButton').click(); + cy.wait('@note_updated').then(({ request, response }) => { + expect(request.body.note).to.equal(updatedTestNote); + expect(response?.statusCode).to.equal(200); + }); + cy.getByTestSubj('protectionUpdatesSuccessfulMessage'); + cy.getByTestSubj('protection-updates-manifest-note').contains(updatedTestNote); }); - cy.getByTestSubj('protectionUpdatesSuccessfulMessage'); - cy.getByTestSubj('protection-updates-manifest-note').contains(updatedTestNote); }); - }); - describe('Renders read only protection updates for user without write permissions', () => { - let indexedPolicy: IndexedFleetEndpointPolicyResponse; - let policy: PolicyData; - const twoMonthsAgo = moment.utc().subtract(2, 'months'); + describe('Renders read only protection updates for user without write permissions', () => { + let indexedPolicy: IndexedFleetEndpointPolicyResponse; + let policy: PolicyData; + const twoMonthsAgo = moment.utc().subtract(2, 'months'); - beforeEach(() => { - login(ROLE.endpoint_security_policy_management_read); - disableExpandableFlyoutAdvancedSettings(); - }); + beforeEach(() => { + login(ROLE.endpoint_security_policy_management_read); + disableExpandableFlyoutAdvancedSettings(); + }); - before(() => { - getEndpointIntegrationVersion().then((version) => { - createAgentPolicyTask(version).then((data) => { - indexedPolicy = data; - policy = indexedPolicy.integrationPolicies[0]; - setCustomProtectionUpdatesManifestVersion(policy.id, twoMonthsAgo.format('YYYY-MM-DD')); - setCustomProtectionUpdatesNote(policy.id, testNote); + before(() => { + getEndpointIntegrationVersion().then((version) => { + createAgentPolicyTask(version).then((data) => { + indexedPolicy = data; + policy = indexedPolicy.integrationPolicies[0]; + setCustomProtectionUpdatesManifestVersion( + policy.id, + twoMonthsAgo.format('YYYY-MM-DD') + ); + setCustomProtectionUpdatesNote(policy.id, testNote); + }); }); }); - }); - after(() => { - if (indexedPolicy) { - cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); - } - }); + after(() => { + if (indexedPolicy) { + cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); + } + }); + + it('should render the protection updates tab content', () => { + loadProtectionUpdatesUrl(policy.id); + cy.getByTestSubj('protection-updates-manifest-switch').should('not.exist'); + cy.getByTestSubj('protection-updates-state-view-mode'); + cy.getByTestSubj('protection-updates-manifest-name-title'); + cy.getByTestSubj('protection-updates-manifest-name'); - it('should render the protection updates tab content', () => { - loadProtectionUpdatesUrl(policy.id); - cy.getByTestSubj('protection-updates-manifest-switch').should('not.exist'); - cy.getByTestSubj('protection-updates-state-view-mode'); - cy.getByTestSubj('protection-updates-manifest-name-title'); - cy.getByTestSubj('protection-updates-manifest-name'); - - cy.getByTestSubj('protection-updates-manifest-name-deployed-version-title'); - cy.getByTestSubj('protection-updates-deployed-version').contains( - twoMonthsAgo.format('MMMM DD, YYYY') - ); - cy.getByTestSubj('protection-updates-manifest-name-version-to-deploy-title'); - cy.getByTestSubj('protection-updates-version-to-deploy-view-mode'); - cy.getByTestSubj('protection-updates-version-to-deploy-picker').should('not.exist'); - - cy.getByTestSubj('protection-updates-manifest-name-note-title'); - cy.getByTestSubj('protection-updates-manifest-note').should('not.exist'); - cy.getByTestSubj('protection-updates-manifest-note-view-mode').contains(testNote); - cy.getByTestSubj('policyDetailsSaveButton').should('be.disabled'); + cy.getByTestSubj('protection-updates-manifest-name-deployed-version-title'); + cy.getByTestSubj('protection-updates-deployed-version').contains( + twoMonthsAgo.format('MMMM DD, YYYY') + ); + cy.getByTestSubj('protection-updates-manifest-name-version-to-deploy-title'); + cy.getByTestSubj('protection-updates-version-to-deploy-view-mode'); + cy.getByTestSubj('protection-updates-version-to-deploy-picker').should('not.exist'); + + cy.getByTestSubj('protection-updates-manifest-name-note-title'); + cy.getByTestSubj('protection-updates-manifest-note').should('not.exist'); + cy.getByTestSubj('protection-updates-manifest-note-view-mode').contains(testNote); + cy.getByTestSubj('policyDetailsSaveButton').should('be.disabled'); + }); }); }); - }); -}); + } +); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_experimental_features_disabled.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_experimental_features_disabled.cy.ts new file mode 100644 index 0000000000000..1d072bad8a68b --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_experimental_features_disabled.cy.ts @@ -0,0 +1,98 @@ +/* + * 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 { PolicyData } from '../../../../../common/endpoint/types'; +import { disableExpandableFlyoutAdvancedSettings, loadPage } from '../../tasks/common'; + +import type { IndexedFleetEndpointPolicyResponse } from '../../../../../common/endpoint/data_loaders/index_fleet_endpoint_policy'; +import { login } from '../../tasks/login'; +import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../../tasks/fleet'; + +describe('Disabled experimental features on: ', () => { + describe('Policy list', () => { + describe('Renders policy list without protection updates feature flag', () => { + let indexedPolicy: IndexedFleetEndpointPolicyResponse; + + beforeEach(() => { + login(); + disableExpandableFlyoutAdvancedSettings(); + }); + + before(() => { + getEndpointIntegrationVersion().then((version) => { + createAgentPolicyTask(version).then((data) => { + indexedPolicy = data; + }); + }); + }); + + after(() => { + if (indexedPolicy) { + cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); + } + }); + + it('should render the list', () => { + loadPage('/app/security/administration/policy'); + cy.getByTestSubj('tableHeaderCell_Name_0'); + cy.getByTestSubj('tableHeaderCell_Deployed Version_1').should('not.exist'); + cy.getByTestSubj('tableHeaderCell_created_by_1'); + cy.getByTestSubj('tableHeaderCell_created_at_2'); + cy.getByTestSubj('tableHeaderCell_updated_by_3'); + cy.getByTestSubj('tableHeaderCell_updated_at_4'); + cy.getByTestSubj('tableHeaderCell_Endpoints_5'); + cy.getByTestSubj('policy-list-outdated-manifests-call-out').should('not.exist'); + cy.getByTestSubj('policyDeployedVersion').should('not.exist'); + }); + }); + }); + + describe('Policy details', () => { + describe('Renders policy details without protection updates feature flag', () => { + let indexedPolicy: IndexedFleetEndpointPolicyResponse; + let policy: PolicyData; + + beforeEach(() => { + login(); + disableExpandableFlyoutAdvancedSettings(); + }); + + before(() => { + getEndpointIntegrationVersion().then((version) => { + createAgentPolicyTask(version).then((data) => { + indexedPolicy = data; + policy = indexedPolicy.integrationPolicies[0]; + }); + }); + }); + + after(() => { + if (indexedPolicy) { + cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); + } + }); + + it('should return 404 on policyUpdates url', () => { + loadPage(`/app/security/administration/policy/${policy.id}/protectionUpdates`); + cy.getByTestSubj('notFoundPage'); + cy.getByTestSubj('protection-updates-automatic-updates-enabled').should('not.exist'); + }); + + it('should render policy details without protection updates tab', () => { + loadPage(`/app/security/administration/policy/${policy.id}`); + cy.get('div[role="tablist"]').within(() => { + cy.contains('Protection updates').should('not.exist'); + cy.get('#settings'); + cy.get('#trustedApps'); + cy.get('#hostIsolationExceptions'); + cy.get('#blocklists'); + cy.get('#protectionUpdates').should('not.exist'); + }); + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_list.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_list.cy.ts index 1b70ecba0882e..b3e5e0477c5be 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_list.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/policy_list.cy.ts @@ -13,83 +13,88 @@ import type { IndexedFleetEndpointPolicyResponse } from '../../../../../common/e import { login } from '../../tasks/login'; import { createAgentPolicyTask, getEndpointIntegrationVersion } from '../../tasks/fleet'; -describe('Policy List', () => { - describe('Renders policy list with outdated policies', () => { - const indexedPolicies: IndexedFleetEndpointPolicyResponse[] = []; +describe( + 'Policy List', + { + env: { ftrConfig: { enableExperimental: ['protectionUpdatesEnabled'] } }, + }, + () => { + describe('Renders policy list with outdated policies', () => { + const indexedPolicies: IndexedFleetEndpointPolicyResponse[] = []; - const monthAgo = moment.utc().subtract(1, 'months').format('YYYY-MM-DD'); - const threeDaysAgo = moment.utc().subtract(3, 'days').format('YYYY-MM-DD'); - const eighteenMonthsAgo = moment - .utc() - .subtract(18, 'months') - .add(1, 'day') - .format('YYYY-MM-DD'); + const monthAgo = moment.utc().subtract(1, 'months').format('YYYY-MM-DD'); + const threeDaysAgo = moment.utc().subtract(3, 'days').format('YYYY-MM-DD'); + const eighteenMonthsAgo = moment + .utc() + .subtract(18, 'months') + .add(1, 'day') + .format('YYYY-MM-DD'); + const dates = [monthAgo, threeDaysAgo, eighteenMonthsAgo]; - const dates = [monthAgo, threeDaysAgo, eighteenMonthsAgo]; + beforeEach(() => { + login(); + disableExpandableFlyoutAdvancedSettings(); + }); - beforeEach(() => { - login(); - disableExpandableFlyoutAdvancedSettings(); - }); + before(() => { + getEndpointIntegrationVersion().then((version) => { + for (let i = 0; i < 4; i++) { + createAgentPolicyTask(version).then((data) => { + indexedPolicies.push(data); + if (dates[i]) { + setCustomProtectionUpdatesManifestVersion(data.integrationPolicies[0].id, dates[i]); + } + }); + } + }); + }); - before(() => { - getEndpointIntegrationVersion().then((version) => { - for (let i = 0; i < 4; i++) { - createAgentPolicyTask(version).then((data) => { - indexedPolicies.push(data); - if (dates[i]) { - setCustomProtectionUpdatesManifestVersion(data.integrationPolicies[0].id, dates[i]); - } + after(() => { + if (indexedPolicies.length) { + indexedPolicies.forEach((policy) => { + cy.task('deleteIndexedFleetEndpointPolicies', policy); }); } }); - }); - after(() => { - if (indexedPolicies.length) { - indexedPolicies.forEach((policy) => { - cy.task('deleteIndexedFleetEndpointPolicies', policy); + it('should render the policy list', () => { + loadPage('/app/security/administration/policy'); + cy.getByTestSubj('policy-list-outdated-manifests-call-out').should('contain', '2 policies'); + dates.forEach((date) => { + cy.contains(moment.utc(date, 'YYYY-MM-DD').format('MMMM DD, YYYY')); }); - } - }); - - it('should render the policy list', () => { - loadPage('/app/security/administration/policy'); - cy.getByTestSubj('policy-list-outdated-manifests-call-out').should('contain', '2 policies'); - dates.forEach((date) => { - cy.contains(moment.utc(date, 'YYYY-MM-DD').format('MMMM DD, YYYY')); + cy.getByTestSubj('policyDeployedVersion').should('have.length', 4); }); - cy.getByTestSubj('policyDeployedVersion').should('have.length', 4); }); - }); - describe('Renders policy list with no outdated policies', () => { - let indexedPolicy: IndexedFleetEndpointPolicyResponse; + describe('Renders policy list with no outdated policies', () => { + let indexedPolicy: IndexedFleetEndpointPolicyResponse; - beforeEach(() => { - login(); - disableExpandableFlyoutAdvancedSettings(); - }); + beforeEach(() => { + login(); + disableExpandableFlyoutAdvancedSettings(); + }); - before(() => { - getEndpointIntegrationVersion().then((version) => { - createAgentPolicyTask(version).then((data) => { - indexedPolicy = data; + before(() => { + getEndpointIntegrationVersion().then((version) => { + createAgentPolicyTask(version).then((data) => { + indexedPolicy = data; + }); }); }); - }); - after(() => { - if (indexedPolicy) { - cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); - } - }); + after(() => { + if (indexedPolicy) { + cy.task('deleteIndexedFleetEndpointPolicies', indexedPolicy); + } + }); - it('should render the list', () => { - loadPage('/app/security/administration/policy'); - cy.getByTestSubj('policy-list-outdated-manifests-call-out').should('not.exist'); - cy.getByTestSubj('policyDeployedVersion').should('have.length', 1); - cy.getByTestSubj('policyDeployedVersion').should('have.text', 'latest'); + it('should render the list', () => { + loadPage('/app/security/administration/policy'); + cy.getByTestSubj('policy-list-outdated-manifests-call-out').should('not.exist'); + cy.getByTestSubj('policyDeployedVersion').should('have.length', 1); + cy.getByTestSubj('policyDeployedVersion').should('have.text', 'latest'); + }); }); - }); -}); + } +); diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index a384999c32b54..904ec870e9a2c 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -225,6 +225,11 @@ export class Plugin implements IPlugin React.ReactNode; - rowRenderers: RowRenderer[]; - timelineId: TimelineId; shouldRefocusPrompt: boolean; setConversationId: Dispatch>; -}> = memo( - ({ - isAssistantEnabled, - renderCellValue, - rowRenderers, - timelineId, - shouldRefocusPrompt, - setConversationId, - }) => ( - }> - - - - - ) -); +}> = memo(({ shouldRefocusPrompt, setConversationId }) => ( + }> + + + + +)); AssistantTab.displayName = 'AssistantTab'; @@ -147,7 +133,7 @@ const ActiveTimelineTab = memo( showTimeline, }) => { const isDiscoverInTimelineEnabled = useIsExperimentalFeatureEnabled('discoverInTimeline'); - const { hasAssistantPrivilege, isAssistantEnabled } = useAssistantAvailability(); + const { hasAssistantPrivilege } = useAssistantAvailability(); const getTab = useCallback( (tab: TimelineTabs) => { switch (tab) { @@ -235,10 +221,6 @@ const ActiveTimelineTab = memo( {(activeTimelineTab === TimelineTabs.securityAssistant || hasTimelineConversationStarted) && ( MAX_ATTEMPTS) { this.logger.warn( - `transform ${transform.id} has failed to restart ${attempts} times. stopping auto restart attempts.` + `Transform ${transform.id} has failed to restart ${attempts} times. stopping auto restart attempts.` ); return { attempts, diff --git a/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.ts b/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.ts index 748e2c1058036..918d29c21f95f 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/metadata/endpoint_metadata_service.ts @@ -236,7 +236,7 @@ export class EndpointMetadataService { fleetAgent = await this.getFleetAgent(fleetServices.agent, fleetAgentId); } catch (error) { if (error instanceof FleetAgentNotFoundError) { - this.logger?.warn(`agent with id ${fleetAgentId} not found`); + this.logger?.warn(`Agent with id ${fleetAgentId} not found`); } else { throw error; } diff --git a/x-pack/plugins/security_solution/server/fleet_integration/handlers/validate_integration_config.ts b/x-pack/plugins/security_solution/server/fleet_integration/handlers/validate_integration_config.ts index 711b46babbc54..d572b15bb4d2d 100644 --- a/x-pack/plugins/security_solution/server/fleet_integration/handlers/validate_integration_config.ts +++ b/x-pack/plugins/security_solution/server/fleet_integration/handlers/validate_integration_config.ts @@ -32,8 +32,8 @@ const validateEndpointIntegrationConfig = ( logger: Logger ): void => { if (!config?.endpointConfig?.preset) { - logger.warn('missing endpointConfig preset'); - throwError('invalid endpointConfig preset'); + logger.warn('Missing endpointConfig preset'); + throwError('Invalid endpointConfig preset'); } if ( ![ @@ -43,8 +43,8 @@ const validateEndpointIntegrationConfig = ( ENDPOINT_CONFIG_PRESET_DATA_COLLECTION, ].includes(config.endpointConfig.preset) ) { - logger.warn(`invalid endpointConfig preset: ${config.endpointConfig.preset}`); - throwError('invalid endpointConfig preset'); + logger.warn(`Invalid endpointConfig preset: ${config.endpointConfig.preset}`); + throwError('Invalid endpointConfig preset'); } }; const validateCloudIntegrationConfig = (config: PolicyCreateCloudConfig, logger: Logger): void => { @@ -56,7 +56,7 @@ const validateCloudIntegrationConfig = (config: PolicyCreateCloudConfig, logger: } if (typeof config.eventFilters?.nonInteractiveSession !== 'boolean') { logger.warn( - `missing or invalid value for eventFilters nonInteractiveSession: ${config.eventFilters?.nonInteractiveSession}` + `Missing or invalid value for eventFilters nonInteractiveSession: ${config.eventFilters?.nonInteractiveSession}` ); throwError('invalid value for eventFilters nonInteractiveSession'); } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts index 10c8cc065b996..1049cbb5c89e1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/api/rule_execution_logs/get_rule_execution_events/get_rule_execution_events_route.ts @@ -54,8 +54,11 @@ export const getRuleExecutionEventsRoute = (router: SecuritySolutionPluginRouter const executionLog = ctx.securitySolution.getRuleExecutionLog(); const executionEventsResponse = await executionLog.getExecutionEvents({ ruleId: params.ruleId, + searchTerm: query.search_term, eventTypes: query.event_types, logLevels: query.log_levels, + dateStart: query.date_start, + dateEnd: query.date_end, sortOrder: query.sort_order, page: query.page, perPage: query.per_page, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/event_log/event_log_fields.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/event_log/event_log_fields.ts index 4e66e93f54507..06e631dece638 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/event_log/event_log_fields.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/event_log/event_log_fields.ts @@ -10,6 +10,7 @@ export const TIMESTAMP = `@timestamp` as const; +export const MESSAGE = 'message' as const; export const EVENT_PROVIDER = 'event.provider' as const; export const EVENT_ACTION = 'event.action' as const; export const EVENT_SEQUENCE = 'event.sequence' as const; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/client_for_routes/client_interface.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/client_for_routes/client_interface.ts index 436ddd91bd595..6f3c867ee3ed4 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/client_for_routes/client_interface.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/client_for_routes/client_interface.ts @@ -39,11 +39,20 @@ export interface GetExecutionEventsArgs { /** Saved object id of the rule (`rule.id`). */ ruleId: RuleObjectId; - /** Include events of the specified types. If empty, all types of events will be included. */ - eventTypes: RuleExecutionEventType[]; + /** Include events of matching the search term. If omitted, all events will be included. */ + searchTerm?: string; - /** Include events having these log levels. If empty, events of all levels will be included. */ - logLevels: LogLevel[]; + /** Include events of the specified types. If omitted, all types of events will be included. */ + eventTypes?: RuleExecutionEventType[]; + + /** Include events having these log levels. If omitted, events of all levels will be included. */ + logLevels?: LogLevel[]; + + /** Include events recorded starting from the specified moment. If omitted, all events will be included. */ + dateStart?: string; + + /** Include events recorded till the specified moment. If omitted, all events will be included. */ + dateEnd?: string; /** What order to sort by (e.g. `asc` or `desc`). */ sortOrder: SortOrder; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/event_log/event_log_reader.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/event_log/event_log_reader.ts index 03871248ff5be..fae8b6cfe9f5c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/event_log/event_log_reader.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/event_log/event_log_reader.ts @@ -9,6 +9,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { IEventLogClient, IValidatedEvent } from '@kbn/event-log-plugin/server'; import { MAX_EXECUTION_EVENTS_DISPLAYED } from '@kbn/securitysolution-rules'; +import { prepareKQLStringParam } from '../../../../../../../common/utils/kql'; import type { GetRuleExecutionEventsResponse, GetRuleExecutionResultsResponse, @@ -53,20 +54,30 @@ export const createEventLogReader = (eventLog: IEventLogClient): IEventLogReader async getExecutionEvents( args: GetExecutionEventsArgs ): Promise { - const { ruleId, eventTypes, logLevels, sortOrder, page, perPage } = args; + const { + ruleId, + searchTerm, + eventTypes, + logLevels, + dateStart, + dateEnd, + sortOrder, + page, + perPage, + } = args; const soType = RULE_SAVED_OBJECT_TYPE; const soIds = [ruleId]; - // TODO: include Framework events - const kqlFilter = kqlAnd([ - `${f.EVENT_PROVIDER}:${RULE_EXECUTION_LOG_PROVIDER}`, - eventTypes.length > 0 ? `${f.EVENT_ACTION}:(${kqlOr(eventTypes)})` : '', - logLevels.length > 0 ? `${f.LOG_LEVEL}:(${kqlOr(logLevels)})` : '', - ]); - const findResult = await withSecuritySpan('findEventsBySavedObjectIds', () => { return eventLog.findEventsBySavedObjectIds(soType, soIds, { - filter: kqlFilter, + // TODO: include Framework events + filter: buildEventLogKqlFilter({ + searchTerm, + eventTypes, + logLevels, + dateStart, + dateEnd, + }), sort: [ { sort_field: f.TIMESTAMP, sort_order: sortOrder }, { sort_field: f.EVENT_SEQUENCE, sort_order: sortOrder }, @@ -173,9 +184,10 @@ const normalizeEvent = (rawEvent: IValidatedEvent): RuleExecutionEvent => { const sequence = normalizeEventSequence(rawEvent); const level = normalizeLogLevel(rawEvent); const type = normalizeEventType(rawEvent); + const executionId = normalizeExecutionId(rawEvent); const message = normalizeEventMessage(rawEvent, type); - return { timestamp, sequence, level, type, message }; + return { timestamp, sequence, level, type, message, execution_id: executionId }; }; type RawEvent = NonNullable; @@ -230,9 +242,64 @@ const normalizeEventMessage = (event: RawEvent, type: RuleExecutionEventType): s } if (type === RuleExecutionEventType['execution-metrics']) { - return ''; + invariant( + event.kibana?.alert?.rule?.execution?.metrics, + 'Required "kibana.alert.rule.execution.metrics" field is not found' + ); + + return JSON.stringify(event.kibana.alert.rule.execution.metrics); } assertUnreachable(type); return ''; }; + +const normalizeExecutionId = (event: RawEvent): string => { + invariant( + event.kibana?.alert?.rule?.execution?.uuid, + 'Required "kibana.alert.rule.execution.uuid" field is not found' + ); + + return event.kibana.alert.rule.execution.uuid; +}; + +const buildEventLogKqlFilter = ({ + searchTerm, + eventTypes, + logLevels, + dateStart, + dateEnd, +}: Pick< + GetExecutionEventsArgs, + 'searchTerm' | 'eventTypes' | 'logLevels' | 'dateStart' | 'dateEnd' +>) => { + const filters = [`${f.EVENT_PROVIDER}:${RULE_EXECUTION_LOG_PROVIDER}`]; + + if (searchTerm?.length) { + filters.push(`${f.MESSAGE}:${prepareKQLStringParam(searchTerm)}`); + } + + if (eventTypes?.length) { + filters.push(`${f.EVENT_ACTION}:(${kqlOr(eventTypes)})`); + } + + if (logLevels?.length) { + filters.push(`${f.LOG_LEVEL}:(${kqlOr(logLevels)})`); + } + + const dateRangeFilter: string[] = []; + + if (dateStart) { + dateRangeFilter.push(`${f.TIMESTAMP} >= ${prepareKQLStringParam(dateStart)}`); + } + + if (dateEnd) { + dateRangeFilter.push(`${f.TIMESTAMP} <= ${prepareKQLStringParam(dateEnd)}`); + } + + if (dateRangeFilter.length) { + filters.push(kqlAnd(dateRangeFilter)); + } + + return kqlAnd(filters); +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/create_security_rule_type_wrapper.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/create_security_rule_type_wrapper.ts index 8480b1de57b0e..c3fb701458238 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/create_security_rule_type_wrapper.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/create_security_rule_type_wrapper.ts @@ -175,8 +175,7 @@ export const createSecurityRuleTypeWrapper: CreateSecurityRuleTypeWrapper = const refresh = actions.length ? 'wait_for' : false; - ruleExecutionLogger.debug('[+] Starting Signal Rule execution'); - ruleExecutionLogger.debug(`interval: ${interval}`); + ruleExecutionLogger.debug(`Starting Security Rule execution (interval: ${interval})`); await ruleExecutionLogger.logStatusChange({ newStatus: RuleExecutionStatus.running, @@ -455,11 +454,15 @@ export const createSecurityRuleTypeWrapper: CreateSecurityRuleTypeWrapper = const createdSignalsCount = result.createdSignals.length; if (result.success) { - ruleExecutionLogger.debug('[+] Signal Rule execution completed.'); + ruleExecutionLogger.debug('Security Rule execution completed'); ruleExecutionLogger.debug( - `[+] Finished indexing ${createdSignalsCount} signals into ${ruleDataClient.indexNameWithNamespace( + `Finished indexing ${createdSignalsCount} alerts into ${ruleDataClient.indexNameWithNamespace( spaceId - )}` + )} ${ + !isEmpty(tuples) + ? `searched between date ranges ${JSON.stringify(tuples, null, 2)}` + : '' + }` ); if (!hasError && !wroteWarningStatus && !result.warning) { @@ -473,18 +476,10 @@ export const createSecurityRuleTypeWrapper: CreateSecurityRuleTypeWrapper = }, }); } - - ruleExecutionLogger.debug( - `[+] Finished indexing ${createdSignalsCount} ${ - !isEmpty(tuples) - ? `signals searched between date ranges ${JSON.stringify(tuples, null, 2)}` - : '' - }` - ); } else { await ruleExecutionLogger.logStatusChange({ newStatus: RuleExecutionStatus.failed, - message: `Bulk Indexing of signals failed: ${truncateList(result.errors).join()}`, + message: `Bulk Indexing of alerts failed: ${truncateList(result.errors).join()}`, metrics: { searchDurations: result.searchAfterTimes, indexingDurations: result.bulkCreateTimes, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/bulk_create_factory.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/bulk_create_factory.ts index a1d19931032f5..603ff74cf2704 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/bulk_create_factory.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/factories/bulk_create_factory.ts @@ -69,7 +69,7 @@ export const bulkCreateFactory = const enrichedAlerts = await enrichAlerts(alerts, params, experimentalFeatures); return enrichedAlerts; } catch (error) { - ruleExecutionLogger.error(`Enrichments failed ${error}`); + ruleExecutionLogger.error(`Alerts enrichment failed: ${error}`); throw error; } finally { enrichmentsTimeFinish = performance.now(); @@ -90,13 +90,11 @@ export const bulkCreateFactory = const end = performance.now(); - ruleExecutionLogger.debug( - `individual bulk process time took: ${makeFloatString(end - start)} milliseconds` - ); + ruleExecutionLogger.debug(`Alerts bulk process took ${makeFloatString(end - start)} ms`); if (!isEmpty(errors)) { - ruleExecutionLogger.debug( - `[-] bulkResponse had errors with responses of: ${JSON.stringify(errors)}` + ruleExecutionLogger.warn( + `Alerts bulk process finished with errors: ${JSON.stringify(errors)}` ); return { errors: Object.keys(errors), diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/alert_suppression/bulk_create_with_suppression.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/alert_suppression/bulk_create_with_suppression.ts index 110f9848c6d83..231387f9c004a 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/alert_suppression/bulk_create_with_suppression.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/alert_suppression/bulk_create_with_suppression.ts @@ -74,7 +74,7 @@ export const bulkCreateWithSuppression = async < const enrichedAlerts = await enrichAlerts(alerts, params); return enrichedAlerts; } catch (error) { - ruleExecutionLogger.error(`Enrichments failed ${error}`); + ruleExecutionLogger.error(`Alerts enrichment failed: ${error}`); throw error; } finally { enrichmentsTimeFinish = performance.now(); @@ -94,14 +94,10 @@ export const bulkCreateWithSuppression = async < const end = performance.now(); - ruleExecutionLogger.debug( - `individual bulk process time took: ${makeFloatString(end - start)} milliseconds` - ); + ruleExecutionLogger.debug(`Alerts bulk process took ${makeFloatString(end - start)} ms`); if (!isEmpty(errors)) { - ruleExecutionLogger.debug( - `[-] bulkResponse had errors with responses of: ${JSON.stringify(errors)}` - ); + ruleExecutionLogger.warn(`Alerts bulk process finished with errors: ${JSON.stringify(errors)}`); return { errors: Object.keys(errors), success: false, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/enrichments/create_single_field_match_enrichment.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/enrichments/create_single_field_match_enrichment.ts index 5971c7685a443..982de01b8bae7 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/enrichments/create_single_field_match_enrichment.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/enrichments/create_single_field_match_enrichment.ts @@ -89,7 +89,7 @@ export const createSingleFieldMatchEnrichment: CreateFieldsMatchEnrichment = asy ); return eventsMapById; } catch (error) { - logger.error(`Enrichment ${name}: throw error ${error}`); + logger.error(`Enrichment ${name} failed: ${error}`); return {}; } }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/large_list_filters/filter_events_against_list.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/large_list_filters/filter_events_against_list.test.ts index a50b33a0eee34..d5c566383ebba 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/large_list_filters/filter_events_against_list.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/large_list_filters/filter_events_against_list.test.ts @@ -62,7 +62,7 @@ describe('filterEventsAgainstList', () => { expect(included.length).toEqual(4); expect(excluded.length).toEqual(0); expect(ruleExecutionLogger.debug.mock.calls[0][0]).toContain( - 'no exception items of type list found - returning original search result' + 'No exception items of type list found - return unfiltered events' ); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/large_list_filters/filter_events_against_list.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/large_list_filters/filter_events_against_list.ts index 1093742d76d6e..8a8f7d34aa3a8 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/large_list_filters/filter_events_against_list.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/large_list_filters/filter_events_against_list.ts @@ -47,9 +47,7 @@ export const filterEventsAgainstList = async ({ ); if (!atLeastOneLargeValueList) { - ruleExecutionLogger.debug( - 'no exception items of type list found - returning original search result' - ); + ruleExecutionLogger.debug('No exception items of type list found - return unfiltered events'); return [events, []]; } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/search_after_bulk_create.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/search_after_bulk_create.ts index c64bb1cc463a2..8e084bd8e35dc 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/search_after_bulk_create.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/search_after_bulk_create.ts @@ -49,13 +49,18 @@ export const searchAfterAndBulkCreate = async ({ }: SearchAfterAndBulkCreateParams): Promise => { return withSecuritySpan('searchAfterAndBulkCreate', async () => { let toReturn = createSearchAfterReturnType(); + let searchingIteration = 0; // sortId tells us where to start our next consecutive search_after query let sortIds: estypes.SortResults | undefined; let hasSortId = true; // default to true so we execute the search on initial run if (tuple == null || tuple.to == null || tuple.from == null) { - ruleExecutionLogger.error(`[-] malformed date tuple`); + ruleExecutionLogger.error( + `missing run options fields: ${!tuple.to ? '"tuple.to"' : ''}, ${ + !tuple.from ? '"tuple.from"' : '' + }` + ); return createSearchAfterReturnType({ success: false, errors: ['malformed date tuple'], @@ -63,9 +68,14 @@ export const searchAfterAndBulkCreate = async ({ } while (toReturn.createdSignalsCount <= tuple.maxSignals) { + const cycleNum = `cycle ${searchingIteration++}`; try { let mergedSearchResults = createSearchResultReturnType(); - ruleExecutionLogger.debug(`sortIds: ${sortIds}`); + ruleExecutionLogger.debug( + `[${cycleNum}] Searching events${ + sortIds ? ` after cursor ${JSON.stringify(sortIds)}` : '' + } in index pattern "${inputIndexPattern}"` + ); if (hasSortId) { const { searchResult, searchDuration, searchErrors } = await singleSearchAfter({ @@ -97,9 +107,29 @@ export const searchAfterAndBulkCreate = async ({ }), ]); + // determine if there are any candidate signals to be processed + const totalHits = getTotalHitsValue(mergedSearchResults.hits.total); const lastSortIds = getSafeSortIds( searchResult.hits.hits[searchResult.hits.hits.length - 1]?.sort ); + + if (totalHits === 0 || mergedSearchResults.hits.hits.length === 0) { + ruleExecutionLogger.debug( + `[${cycleNum}] Found 0 events ${ + sortIds ? ` after cursor ${JSON.stringify(sortIds)}` : '' + }` + ); + break; + } else { + ruleExecutionLogger.debug( + `[${cycleNum}] Found ${ + mergedSearchResults.hits.hits.length + } of total ${totalHits} events${ + sortIds ? ` after cursor ${JSON.stringify(sortIds)}` : '' + }, last cursor ${JSON.stringify(lastSortIds)}` + ); + } + if (lastSortIds != null && lastSortIds.length !== 0) { sortIds = lastSortIds; hasSortId = true; @@ -108,22 +138,6 @@ export const searchAfterAndBulkCreate = async ({ } } - // determine if there are any candidate signals to be processed - const totalHits = getTotalHitsValue(mergedSearchResults.hits.total); - ruleExecutionLogger.debug(`totalHits: ${totalHits}`); - ruleExecutionLogger.debug( - `searchResult.hit.hits.length: ${mergedSearchResults.hits.hits.length}` - ); - - if (totalHits === 0 || mergedSearchResults.hits.hits.length === 0) { - ruleExecutionLogger.debug( - `${ - totalHits === 0 ? 'totalHits' : 'searchResult.hits.hits.length' - } was 0, exiting early` - ); - break; - } - // filter out the search results that match with the values found in the list. // the resulting set are signals to be indexed, given they are not duplicates // of signals already present in the signals index. @@ -158,9 +172,9 @@ export const searchAfterAndBulkCreate = async ({ addToSearchAfterReturn({ current: toReturn, next: bulkCreateResult }); - ruleExecutionLogger.debug(`created ${bulkCreateResult.createdItemsCount} signals`); - ruleExecutionLogger.debug(`signalsCreatedCount: ${toReturn.createdSignalsCount}`); - ruleExecutionLogger.debug(`enrichedEvents.hits.hits: ${enrichedEvents.length}`); + ruleExecutionLogger.debug( + `[${cycleNum}] Created ${bulkCreateResult.createdItemsCount} alerts from ${enrichedEvents.length} events` + ); sendAlertTelemetryEvents( enrichedEvents, @@ -171,11 +185,14 @@ export const searchAfterAndBulkCreate = async ({ } if (!hasSortId) { - ruleExecutionLogger.debug('ran out of sort ids to sort on'); + ruleExecutionLogger.debug(`[${cycleNum}] Unable to fetch last event cursor`); break; } } catch (exc: unknown) { - ruleExecutionLogger.error(`[-] search_after_bulk_create threw an error ${exc}`); + ruleExecutionLogger.error( + 'Unable to extract/process events or create alerts', + JSON.stringify(exc) + ); return mergeReturns([ toReturn, createSearchAfterReturnType({ @@ -185,7 +202,7 @@ export const searchAfterAndBulkCreate = async ({ ]); } } - ruleExecutionLogger.debug(`[+] completed bulk index of ${toReturn.createdSignalsCount}`); + ruleExecutionLogger.debug(`Completed bulk indexing of ${toReturn.createdSignalsCount} alert`); return toReturn; }); }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/send_telemetry_events.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/send_telemetry_events.ts index a4687fa953dfe..713428ca08557 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/send_telemetry_events.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/send_telemetry_events.ts @@ -72,6 +72,6 @@ export function sendAlertTelemetryEvents( try { eventsTelemetry.queueTelemetryEvents(selectedEvents); } catch (exc) { - ruleExecutionLogger.error(`[-] queing telemetry events failed ${exc}`); + ruleExecutionLogger.error(`Queuing telemetry events failed: ${exc}`); } } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/single_search_after.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/single_search_after.ts index ba91454b3aa02..c10403848474f 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/single_search_after.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/single_search_after.ts @@ -104,14 +104,12 @@ export const singleSearchAfter = async < searchErrors, }; } catch (exc) { - ruleExecutionLogger.error(`[-] nextSearchAfter threw an error ${exc}`); + ruleExecutionLogger.error(`Searching events operation failed: ${exc}`); if ( exc.message.includes(`No mapping found for [${primaryTimestamp}] in order to sort on`) || (secondaryTimestamp && exc.message.includes(`No mapping found for [${secondaryTimestamp}] in order to sort on`)) ) { - ruleExecutionLogger.error(`[-] failure reason: ${exc.message}`); - const searchRes: SignalSearchResponse = { took: 0, timed_out: false, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.test.ts index d507977de11c8..0a18cd40b3a61 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.test.ts @@ -734,7 +734,7 @@ describe('utils', () => { expect(ruleExecutionLogger.logStatusChange).toHaveBeenCalledWith({ newStatus: RuleExecutionStatus['partial failure'], message: - 'This rule is attempting to query data from Elasticsearch indices listed in the "Index pattern" section of the rule definition, however no index matching: ["logs-endpoint.alerts-*"] was found. This warning will continue to appear until a matching index is created or this rule is disabled. If you have recently enrolled agents enabled with Endpoint Security through Fleet, this warning should stop once an alert is sent from an agent.', + 'This rule is attempting to query data from Elasticsearch indices listed in the "Index patterns" section of the rule definition, however no index matching: ["logs-endpoint.alerts-*"] was found. This warning will continue to appear until a matching index is created or this rule is disabled. If you have recently enrolled agents enabled with Endpoint Security through Fleet, this warning should stop once an alert is sent from an agent.', }); }); @@ -768,7 +768,7 @@ describe('utils', () => { expect(ruleExecutionLogger.logStatusChange).toHaveBeenCalledWith({ newStatus: RuleExecutionStatus['partial failure'], message: - 'This rule is attempting to query data from Elasticsearch indices listed in the "Index pattern" section of the rule definition, however no index matching: ["logs-endpoint.alerts-*"] was found. This warning will continue to appear until a matching index is created or this rule is disabled.', + 'This rule is attempting to query data from Elasticsearch indices listed in the "Index patterns" section of the rule definition, however no index matching: ["logs-endpoint.alerts-*"] was found. This warning will continue to appear until a matching index is created or this rule is disabled.', }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts index 17d3e0a4876f3..be19c354cbe1a 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts @@ -91,7 +91,7 @@ export const hasReadIndexPrivileges = async (args: { const indexesString = JSON.stringify(indexesWithNoReadPrivileges); await ruleExecutionLogger.logStatusChange({ newStatus: RuleExecutionStatus['partial failure'], - message: `This rule may not have the required read privileges to the following indices/index patterns: ${indexesString}`, + message: `This rule may not have the required read privileges to the following index patterns: ${indexesString}`, }); return true; } @@ -112,7 +112,7 @@ export const hasTimestampFields = async (args: { const { ruleName } = ruleExecutionLogger.context; if (isEmpty(timestampFieldCapsResponse.body.indices)) { - const errorString = `This rule is attempting to query data from Elasticsearch indices listed in the "Index pattern" section of the rule definition, however no index matching: ${JSON.stringify( + const errorString = `This rule is attempting to query data from Elasticsearch indices listed in the "Index patterns" section of the rule definition, however no index matching: ${JSON.stringify( inputIndices )} was found. This warning will continue to appear until a matching index is created or this rule is disabled. ${ ruleName === 'Endpoint Security' @@ -432,7 +432,9 @@ export const getRuleRangeTuples = ({ const intervalDuration = parseInterval(interval); if (intervalDuration == null) { ruleExecutionLogger.error( - 'Failed to compute gap between rule runs: could not parse rule interval' + `Failed to compute gap between rule runs: could not parse rule interval "${JSON.stringify( + interval + )}"` ); return { tuples, remainingGap: moment.duration(0) }; } diff --git a/x-pack/plugins/security_solution/server/lib/risk_engine/utils/create_index.ts b/x-pack/plugins/security_solution/server/lib/risk_engine/utils/create_index.ts index b7fa301869951..b1aefedc90cef 100644 --- a/x-pack/plugins/security_solution/server/lib/risk_engine/utils/create_index.ts +++ b/x-pack/plugins/security_solution/server/lib/risk_engine/utils/create_index.ts @@ -25,7 +25,7 @@ export const createIndex = async ({ index: options.index, }); if (isIndexExist) { - logger.info('${options.index} already exist'); + logger.info(`${options.index} already exist`); return; } diff --git a/x-pack/plugins/security_solution/tsconfig.json b/x-pack/plugins/security_solution/tsconfig.json index 5452acb5e6f0c..d6d5bb4e0676e 100644 --- a/x-pack/plugins/security_solution/tsconfig.json +++ b/x-pack/plugins/security_solution/tsconfig.json @@ -172,6 +172,7 @@ "@kbn/core-lifecycle-browser", "@kbn/security-solution-features", "@kbn/handlebars", - "@kbn/content-management-plugin" + "@kbn/content-management-plugin", + "@kbn/subscription-tracking" ] } diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/index.ts b/x-pack/plugins/security_solution_serverless/public/navigation/index.ts index 84842a90e1f74..19684479e7dd6 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/index.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/index.ts @@ -27,6 +27,7 @@ export const configureNavigation = ( if (!serverConfig.developer.disableManagementUrlRedirect) { management.setLandingPageRedirect(SECURITY_PROJECT_SETTINGS_PATH); } + management.setIsSidebarEnabled(false); serverless.setProjectHome(APP_PATH); serverless.setSideNavComponent(getSecuritySideNavComponent(services)); diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.ts b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.ts index 7210498a97d57..55b82759e6a02 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/navigation_tree.ts @@ -35,6 +35,10 @@ const HIDDEN_BREADCRUMBS = new Set([ SecurityPageName.sessions, ]); +const isBreadcrumbHidden = (id: ProjectPageName): boolean => + HIDDEN_BREADCRUMBS.has(id) || + id.startsWith('management:'); /* management sub-pages set their breadcrumbs themselves */ + export const subscribeNavigationTree = (services: Services): void => { const { serverless, getProjectNavLinks$ } = services; @@ -59,13 +63,12 @@ export const getFormatChromeProjectNavNodes = (services: Services) => { const navLinkId = getNavLinkIdFromProjectPageName(id); if (chrome.navLinks.has(navLinkId)) { - const breadcrumbHidden = HIDDEN_BREADCRUMBS.has(id); const link: ChromeProjectNavigationNode = { id: navLinkId, title, path: [...path, navLinkId], deepLink: chrome.navLinks.get(navLinkId), - ...(breadcrumbHidden && { breadcrumbStatus: 'hidden' }), + ...(isBreadcrumbHidden(id) && { breadcrumbStatus: 'hidden' }), }; // check default navigation for children const defaultChildrenNav = getDefaultChildrenNav(id, link); diff --git a/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.test.ts b/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.test.ts new file mode 100644 index 0000000000000..b75d438bdd5f3 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/server/task_manager/usage_reporting_task.test.ts @@ -0,0 +1,193 @@ +/* + * 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 { CoreSetup, ElasticsearchClient } from '@kbn/core/server'; +import type { TaskManagerSetupContract } from '@kbn/task-manager-plugin/server'; +import type { CloudSetup } from '@kbn/cloud-plugin/server'; +import { TaskStatus } from '@kbn/task-manager-plugin/server'; +import { coreMock } from '@kbn/core/server/mocks'; +import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; +import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; + +import { ProductLine, ProductTier } from '../../common/product'; + +import { usageReportingService } from '../common/services'; +import type { ServerlessSecurityConfig } from '../config'; +import type { + SecurityUsageReportingTaskSetupContract, + UsageRecord, + MeteringCallback, +} from '../types'; + +import { SecurityUsageReportingTask } from './usage_reporting_task'; + +describe('SecurityUsageReportingTask', () => { + const TITLE = 'test-task-title'; + const TYPE = 'test-task-type'; + const VERSION = 'test-task-version'; + const TASK_ID = `${TYPE}:${VERSION}`; + const USAGE_TYPE = 'test-usage-type'; + const PROJECT_ID = 'test-project-id'; + + const { createSetup: coreSetupMock } = coreMock; + const { createSetup: tmSetupMock, createStart: tmStartMock } = taskManagerMock; + + let mockTask: SecurityUsageReportingTask; + let mockEsClient: jest.Mocked; + let mockCore: CoreSetup; + let mockTaskManagerSetup: jest.Mocked; + let meteringCallbackMock: jest.Mock; + let taskArgs: SecurityUsageReportingTaskSetupContract; + let usageRecord: UsageRecord; + + function buildMockTaskInstance() { + return { + id: `${TYPE}:${VERSION}`, + runAt: new Date(), + attempts: 0, + ownerId: '', + status: TaskStatus.Running, + startedAt: new Date(), + scheduledAt: new Date(), + retryAt: new Date(), + params: {}, + state: { + lastSuccessfulReport: new Date().toISOString(), + }, + taskType: TYPE, + }; + } + + function buildUsageRecord() { + const ts = new Date().toISOString(); + return { + id: `endpoint-agentId-${ts}`, + usage_timestamp: ts, + creation_timestamp: ts, + usage: { + type: USAGE_TYPE, + period_seconds: 3600, + quantity: 1, + }, + source: { + id: TASK_ID, + instance_group_id: PROJECT_ID, + metadata: { + tier: ProductTier.complete, + }, + }, + }; + } + + function buildTaskArgs({ + core, + taskManager, + meteringCallback, + }: { + core: CoreSetup; + taskManager: TaskManagerSetupContract; + meteringCallback: MeteringCallback; + }): SecurityUsageReportingTaskSetupContract { + return { + core, + logFactory: loggingSystemMock.create(), + config: { + productTypes: [ + { + product_line: ProductLine.security, + product_tier: ProductTier.complete, + }, + ], + } as ServerlessSecurityConfig, + taskManager, + cloudSetup: { + serverless: { + projectId: PROJECT_ID, + }, + } as CloudSetup, + taskType: TYPE, + taskTitle: TITLE, + version: VERSION, + meteringCallback, + }; + } + + beforeEach(async () => { + mockCore = coreSetupMock(); + mockEsClient = (await mockCore.getStartServices())[0].elasticsearch.client + .asInternalUser as jest.Mocked; + mockTaskManagerSetup = tmSetupMock(); + usageRecord = buildUsageRecord(); + meteringCallbackMock = jest.fn().mockResolvedValueOnce([usageRecord]); + taskArgs = buildTaskArgs({ + core: mockCore, + taskManager: mockTaskManagerSetup, + meteringCallback: meteringCallbackMock, + }); + mockTask = new SecurityUsageReportingTask(taskArgs); + }); + + describe('task lifecycle', () => { + it('should create task', () => { + expect(mockTask).toBeInstanceOf(SecurityUsageReportingTask); + }); + + it('should register task', () => { + expect(mockTaskManagerSetup.registerTaskDefinitions).toHaveBeenCalled(); + }); + + it('should schedule task', async () => { + const mockTaskManagerStart = tmStartMock(); + await mockTask.start({ taskManager: mockTaskManagerStart, interval: '5m' }); + expect(mockTaskManagerStart.ensureScheduled).toHaveBeenCalled(); + }); + }); + + describe('task logic', () => { + async function runTask(taskInstance = buildMockTaskInstance()) { + const mockTaskManagerStart = tmStartMock(); + await mockTask.start({ taskManager: mockTaskManagerStart, interval: '5m' }); + const createTaskRunner = + mockTaskManagerSetup.registerTaskDefinitions.mock.calls[0][0][TYPE].createTaskRunner; + const taskRunner = createTaskRunner({ taskInstance }); + return taskRunner.run(); + } + + it('should call metering callback', async () => { + const task = await runTask(); + expect(meteringCallbackMock).toHaveBeenCalledWith( + expect.objectContaining({ + esClient: mockEsClient, + cloudSetup: taskArgs.cloudSetup, + taskId: TASK_ID, + config: taskArgs.config, + lastSuccessfulReport: task?.state.lastSuccessfulReport, + }) + ); + }); + + it('should report metering records', async () => { + const reportUsageSpy = jest.spyOn(usageReportingService, 'reportUsage'); + await runTask(); + expect(reportUsageSpy).toHaveBeenCalledWith( + expect.arrayContaining([ + expect.objectContaining({ + creation_timestamp: usageRecord.creation_timestamp, + id: usageRecord.id, + source: { + id: TASK_ID, + instance_group_id: PROJECT_ID, + metadata: { tier: ProductTier.complete }, + }, + usage: { period_seconds: 3600, quantity: 1, type: USAGE_TYPE }, + usage_timestamp: usageRecord.usage_timestamp, + }), + ]) + ); + }); + }); +}); diff --git a/x-pack/plugins/serverless/kibana.jsonc b/x-pack/plugins/serverless/kibana.jsonc index 35b21a5fc39b5..d8993d5ac7c72 100644 --- a/x-pack/plugins/serverless/kibana.jsonc +++ b/x-pack/plugins/serverless/kibana.jsonc @@ -14,7 +14,6 @@ ], "requiredPlugins": [ "kibanaReact", - "management", "cloud" ], "optionalPlugins": [], diff --git a/x-pack/plugins/serverless/public/plugin.tsx b/x-pack/plugins/serverless/public/plugin.tsx index d49447e4d36dd..6333d9a5f58a0 100644 --- a/x-pack/plugins/serverless/public/plugin.tsx +++ b/x-pack/plugins/serverless/public/plugin.tsx @@ -49,7 +49,6 @@ export class ServerlessPlugin dependencies: ServerlessPluginStartDependencies ): ServerlessPluginStart { const { developer } = this.config; - const { management } = dependencies; if (developer && developer.projectSwitcher && developer.projectSwitcher.enabled) { const { currentType } = developer.projectSwitcher; @@ -61,13 +60,15 @@ export class ServerlessPlugin } core.chrome.setChromeStyle('project'); - management.setIsSidebarEnabled(false); // Casting the "chrome.projects" service to an "internal" type: this is intentional to obscure the property from Typescript. const { project } = core.chrome as InternalChromeStart; if (dependencies.cloud.projectsUrl) { project.setProjectsUrl(dependencies.cloud.projectsUrl); } + if (dependencies.cloud.serverless.projectName) { + project.setProjectName(dependencies.cloud.serverless.projectName); + } return { setSideNavComponent: (sideNavigationComponent) => diff --git a/x-pack/plugins/serverless/public/types.ts b/x-pack/plugins/serverless/public/types.ts index 1de2e2fd75e1a..84fc2565905d6 100644 --- a/x-pack/plugins/serverless/public/types.ts +++ b/x-pack/plugins/serverless/public/types.ts @@ -12,7 +12,6 @@ import type { SideNavComponent, ChromeProjectNavigationNode, } from '@kbn/core-chrome-browser'; -import type { ManagementSetup, ManagementStart } from '@kbn/management-plugin/public'; import type { CloudSetup, CloudStart } from '@kbn/cloud-plugin/public'; import type { Observable } from 'rxjs'; @@ -31,11 +30,9 @@ export interface ServerlessPluginStart { } export interface ServerlessPluginSetupDependencies { - management: ManagementSetup; cloud: CloudSetup; } export interface ServerlessPluginStartDependencies { - management: ManagementStart; cloud: CloudStart; } diff --git a/x-pack/plugins/serverless/tsconfig.json b/x-pack/plugins/serverless/tsconfig.json index 4bb3e35e34472..e8224182afae9 100644 --- a/x-pack/plugins/serverless/tsconfig.json +++ b/x-pack/plugins/serverless/tsconfig.json @@ -17,7 +17,6 @@ "@kbn/config-schema", "@kbn/core", "@kbn/kibana-react-plugin", - "@kbn/management-plugin", "@kbn/serverless-project-switcher", "@kbn/serverless-types", "@kbn/utils", diff --git a/x-pack/plugins/serverless_observability/public/plugin.ts b/x-pack/plugins/serverless_observability/public/plugin.ts index e208fd5f8cadd..bbc2ac7e0435b 100644 --- a/x-pack/plugins/serverless_observability/public/plugin.ts +++ b/x-pack/plugins/serverless_observability/public/plugin.ts @@ -45,6 +45,7 @@ export class ServerlessObservabilityPlugin observabilityShared.setIsSidebarEnabled(false); serverless.setProjectHome('/app/observability/landing'); serverless.setSideNavComponent(getObservabilitySideNavComponent(core, { serverless, cloud })); + management.setIsSidebarEnabled(false); management.setupCardsNavigation({ enabled: true, hideLinksTo: [appIds.RULES], diff --git a/x-pack/plugins/serverless_search/public/layout/nav.tsx b/x-pack/plugins/serverless_search/public/layout/nav.tsx index 0879f86bc2b73..10d963100f89c 100644 --- a/x-pack/plugins/serverless_search/public/layout/nav.tsx +++ b/x-pack/plugins/serverless_search/public/layout/nav.tsx @@ -93,12 +93,16 @@ const navigationTree: NavigationTreeDefinition = { defaultMessage: 'Index Management', }), link: 'management:index_management', + breadcrumbStatus: + 'hidden' /* management sub-pages set their breadcrumbs themselves */, }, { title: i18n.translate('xpack.serverlessSearch.nav.content.pipelines', { defaultMessage: 'Pipelines', }), link: 'management:ingest_pipelines', + breadcrumbStatus: + 'hidden' /* management sub-pages set their breadcrumbs themselves */, }, ], }, @@ -110,6 +114,8 @@ const navigationTree: NavigationTreeDefinition = { children: [ { link: 'management:api_keys', + breadcrumbStatus: + 'hidden' /* management sub-pages set their breadcrumbs themselves */, }, ], }, diff --git a/x-pack/plugins/serverless_search/public/plugin.ts b/x-pack/plugins/serverless_search/public/plugin.ts index 6bd5b384fd581..dfe19e4dd55d3 100644 --- a/x-pack/plugins/serverless_search/public/plugin.ts +++ b/x-pack/plugins/serverless_search/public/plugin.ts @@ -79,6 +79,7 @@ export class ServerlessSearchPlugin ): ServerlessSearchPluginStart { serverless.setProjectHome('/app/elasticsearch'); serverless.setSideNavComponent(createComponent(core, { serverless, cloud })); + management.setIsSidebarEnabled(false); management.setupCardsNavigation({ enabled: true, hideLinksTo: [appIds.MAINTENANCE_WINDOWS], diff --git a/x-pack/plugins/stack_alerts/common/constants.ts b/x-pack/plugins/stack_alerts/common/constants.ts index cac00873face2..e846b249081e0 100644 --- a/x-pack/plugins/stack_alerts/common/constants.ts +++ b/x-pack/plugins/stack_alerts/common/constants.ts @@ -6,3 +6,5 @@ */ export const STACK_ALERTS_FEATURE_ID = 'stackAlerts'; + +export const MAX_SELECTABLE_GROUP_BY_TERMS = 4; diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/constants.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/constants.ts index 4cce902449d18..f99b97634fc5a 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/constants.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/constants.ts @@ -22,6 +22,7 @@ export const DEFAULT_VALUES = { TERM_SIZE: 5, GROUP_BY: 'all', EXCLUDE_PREVIOUS_HITS: true, + CAN_SELECT_MULTI_TERMS: true, }; export const COMMON_EXPRESSION_ERRORS = { diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.tsx index 2119879c26b39..7a9bb590af73b 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/expression/es_query_expression.tsx @@ -351,6 +351,7 @@ export const EsQueryExpression: React.FC< (exclude) => setParam('excludeHitsFromPreviousRun', exclude), [setParam] )} + canSelectMultiTerms={DEFAULT_VALUES.CAN_SELECT_MULTI_TERMS} /> 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 1cc45801ffe65..b6c4cdd72bf62 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 @@ -14,12 +14,8 @@ import { EuiSpacer, EuiTitle } from '@elastic/eui'; import { IErrorObject } from '@kbn/triggers-actions-ui-plugin/public'; import type { SearchBarProps } from '@kbn/unified-search-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; -import { - mapAndFlattenFilters, - getTime, - type SavedQuery, - type ISearchSource, -} from '@kbn/data-plugin/public'; +import { mapAndFlattenFilters, getTime } from '@kbn/data-plugin/public'; +import type { SavedQuery, ISearchSource } from '@kbn/data-plugin/public'; import { BUCKET_SELECTOR_FIELD, buildAggregation, @@ -51,7 +47,9 @@ interface LocalState extends CommonRuleParams { interface LocalStateAction { type: SearchSourceParamsAction['type'] | keyof CommonRuleParams; - payload: SearchSourceParamsAction['payload'] | (number[] | number | string | boolean | undefined); + payload: + | SearchSourceParamsAction['payload'] + | (number[] | number | string | string[] | boolean | undefined); } type LocalStateReducer = (prevState: LocalState, action: LocalStateAction) => LocalState; @@ -201,7 +199,8 @@ export const SearchSourceExpressionForm = (props: SearchSourceExpressionFormProp ); const onChangeSelectedTermField = useCallback( - (selectedTermField?: string) => dispatch({ type: 'termField', payload: selectedTermField }), + (selectedTermField?: string | string[]) => + dispatch({ type: 'termField', payload: selectedTermField }), [] ); @@ -372,6 +371,7 @@ export const SearchSourceExpressionForm = (props: SearchSourceExpressionFormProp onCopyQuery={onCopyQuery} excludeHitsFromPreviousRun={ruleConfiguration.excludeHitsFromPreviousRun} onChangeExcludeHitsFromPreviousRun={onChangeExcludeHitsFromPreviousRun} + canSelectMultiTerms={DEFAULT_VALUES.CAN_SELECT_MULTI_TERMS} /> diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.test.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.test.tsx index 119f0e02cdca2..267b289cf5ca8 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.test.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.test.tsx @@ -217,6 +217,33 @@ describe('RuleCommonExpressions', () => { ); }); + test(`should use multiple group by terms`, async () => { + const aggType = 'avg'; + const thresholdComparator = 'between'; + const timeWindowSize = 987; + const timeWindowUnit = 's'; + const threshold = [3, 1003]; + const groupBy = 'top'; + const termSize = '27'; + const termField = ['term', 'term2']; + + const wrapper = await setup({ + ruleParams: getCommonParams({ + aggType, + thresholdComparator, + timeWindowSize, + timeWindowUnit, + termSize, + termField, + groupBy, + threshold, + }), + }); + expect(wrapper.find('button[data-test-subj="groupByExpression"]').text()).toEqual( + `grouped over ${groupBy} ${termSize} 'term,term2'` + ); + }); + test(`should disable excludeHitsFromPreviousRuns when groupBy is not all`, async () => { const aggType = 'avg'; const thresholdComparator = 'between'; diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.tsx b/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.tsx index d74fce210354c..cee08144f307e 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.tsx +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/rule_common_expressions/rule_common_expressions.tsx @@ -52,6 +52,7 @@ export interface RuleCommonExpressionsProps extends CommonRuleParams { onTestFetch: TestQueryRowProps['fetch']; onCopyQuery?: TestQueryRowProps['copyQuery']; onChangeExcludeHitsFromPreviousRun: (exclude: boolean) => void; + canSelectMultiTerms?: boolean; } export const RuleCommonExpressions: React.FC = ({ @@ -82,6 +83,7 @@ export const RuleCommonExpressions: React.FC = ({ onCopyQuery, excludeHitsFromPreviousRun, onChangeExcludeHitsFromPreviousRun, + canSelectMultiTerms, }) => { const [isExcludeHitsDisabled, setIsExcludeHitsDisabled] = useState(false); @@ -127,6 +129,7 @@ export const RuleCommonExpressions: React.FC = ({ errors={errors} fields={esFields} display="fullWidth" + canSelectMultiTerms={canSelectMultiTerms} onChangeSelectedGroupBy={onChangeSelectedGroupBy} onChangeSelectedTermField={onChangeSelectedTermField} onChangeSelectedTermSize={onChangeSelectedTermSize} diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/types.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/types.ts index c7a298ebce22a..93b184f855232 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/types.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/types.ts @@ -27,7 +27,7 @@ export interface CommonRuleParams { aggField?: string; groupBy?: string; termSize?: number; - termField?: string; + termField?: string | string[]; excludeHitsFromPreviousRun: boolean; } diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.test.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.test.ts index 90df11eb0c557..54363fe1010f3 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.test.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.test.ts @@ -103,6 +103,46 @@ describe('expression params validation', () => { expect(validateExpression(initialParams).errors.termField[0]).toBe('Term field is required.'); }); + test('if termField property is an array but has no items should return proper error message', () => { + const initialParams: EsQueryRuleParams = { + index: ['test'], + esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, + size: 100, + timeWindowSize: 1, + timeWindowUnit: 's', + threshold: [0], + timeField: '', + excludeHitsFromPreviousRun: true, + aggType: 'count', + groupBy: 'top', + termSize: 10, + termField: [], + }; + expect(validateExpression(initialParams).errors.termField.length).toBeGreaterThan(0); + expect(validateExpression(initialParams).errors.termField[0]).toBe('Term field is required.'); + }); + + test('if termField property is an array but has more than 4 items, should return proper error message', () => { + const initialParams: EsQueryRuleParams = { + index: ['test'], + esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, + size: 100, + timeWindowSize: 1, + timeWindowUnit: 's', + threshold: [0], + timeField: '', + excludeHitsFromPreviousRun: true, + aggType: 'count', + groupBy: 'top', + termSize: 10, + termField: ['term', 'term2', 'term3', 'term4', 'term5'], + }; + expect(validateExpression(initialParams).errors.termField.length).toBeGreaterThan(0); + expect(validateExpression(initialParams).errors.termField[0]).toBe( + 'Cannot select more than 4 terms' + ); + }); + test('if esQuery property is invalid JSON should return proper error message', () => { const initialParams: EsQueryRuleParams = { index: ['test'], diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.ts index f2d1de5ef8695..5830a506a0073 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/validation.ts @@ -14,6 +14,7 @@ import { builtInGroupByTypes, COMPARATORS, } from '@kbn/triggers-actions-ui-plugin/public'; +import { MAX_SELECTABLE_GROUP_BY_TERMS } from '../../../common/constants'; import { EsQueryRuleParams, SearchType } from './types'; import { isEsqlQueryRule, isSearchSourceRule } from './util'; import { @@ -72,7 +73,7 @@ const validateCommonParams = (ruleParams: EsQueryRuleParams) => { groupBy && builtInGroupByTypes[groupBy].validNormalizedTypes && builtInGroupByTypes[groupBy].validNormalizedTypes.length > 0 && - !termField + (!termField || termField.length <= 0) ) { errors.termField.push( i18n.translate('xpack.stackAlerts.esQuery.ui.validation.error.requiredTermFieldText', { @@ -81,6 +82,22 @@ const validateCommonParams = (ruleParams: EsQueryRuleParams) => { ); } + if ( + groupBy && + builtInGroupByTypes[groupBy].validNormalizedTypes && + builtInGroupByTypes[groupBy].validNormalizedTypes.length > 0 && + termField && + Array.isArray(termField) && + termField.length > MAX_SELECTABLE_GROUP_BY_TERMS + ) { + errors.termField.push( + i18n.translate('xpack.stackAlerts.esQuery.ui.validation.error.overNumberedTermFieldText', { + defaultMessage: `Cannot select more than {max} terms`, + values: { max: MAX_SELECTABLE_GROUP_BY_TERMS }, + }) + ); + } + if (!threshold || threshold.length === 0 || threshold[0] === undefined) { errors.threshold0.push( i18n.translate('xpack.stackAlerts.esQuery.ui.validation.error.requiredThreshold0Text', { diff --git a/x-pack/plugins/stack_alerts/public/rule_types/threshold/types.ts b/x-pack/plugins/stack_alerts/public/rule_types/threshold/types.ts index 83679f34fbb53..4e539d1f41784 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/threshold/types.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/threshold/types.ts @@ -34,7 +34,7 @@ export interface IndexThresholdRuleParams extends RuleTypeParams { aggField?: string; groupBy?: string; termSize?: number; - termField?: string; + termField?: string | string[]; thresholdComparator?: string; threshold: number[]; timeWindowSize: number; diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.test.ts index 7e99ded206b2c..b6011e72bbcc7 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.test.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.test.ts @@ -179,15 +179,51 @@ describe('ruleType Params validate()', () => { }); it('fails for invalid termField', async () => { + params.termField = ['term', 'term 2']; + params.termSize = 1; + expect(onValidate()).not.toThrow(); + + params.termField = 'term'; + params.termSize = 1; + expect(onValidate()).not.toThrow(); + + // string or array of string params.groupBy = 'top'; params.termField = 42; - expect(onValidate()).toThrowErrorMatchingInlineSnapshot( - `"[termField]: expected value of type [string] but got [number]"` + expect(onValidate()).toThrow(`[termField]: types that failed validation: +- [termField.0]: expected value of type [string] but got [number] +- [termField.1]: expected value of type [array] but got [number]`); + + // no array other than array of stings + params.termField = [1, 2, 3]; + expect(onValidate()).toThrow( + `[termField]: types that failed validation: +- [termField.0]: expected value of type [string] but got [Array] +- [termField.1.0]: expected value of type [string] but got [number]` ); + // no empty string params.termField = ''; - expect(onValidate()).toThrowErrorMatchingInlineSnapshot( - `"[termField]: value has length [0] but it must have a minimum length of [1]."` + expect(onValidate()).toThrow( + `[termField]: types that failed validation: +- [termField.0]: value has length [0] but it must have a minimum length of [1]. +- [termField.1]: could not parse array value from json input` + ); + + // no array with one element -> has to be a string + params.termField = ['term']; + expect(onValidate()).toThrow( + `[termField]: types that failed validation: +- [termField.0]: expected value of type [string] but got [Array] +- [termField.1]: array size is [1], but cannot be smaller than [2]` + ); + + // no array that has more than 4 elements + params.termField = ['term', 'term2', 'term3', 'term4', 'term4']; + expect(onValidate()).toThrow( + `[termField]: types that failed validation: +- [termField.0]: expected value of type [string] but got [Array] +- [termField.1]: array size is [5], but cannot be greater than [4]` ); }); diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.ts index 1897ebad6c1ee..5469c6fa60247 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type_params.ts @@ -15,6 +15,7 @@ import { } from '@kbn/triggers-actions-ui-plugin/server'; import { RuleTypeState } from '@kbn/alerting-plugin/server'; import { SerializedSearchSourceFields } from '@kbn/data-plugin/common'; +import { MAX_SELECTABLE_GROUP_BY_TERMS } from '../../../common/constants'; import { ComparatorFnNames } from '../../../common'; import { Comparator } from '../../../common/comparator_types'; import { getComparatorSchemaType } from '../lib/comparator'; @@ -48,7 +49,12 @@ const EsQueryRuleParamsSchemaProperties = { // how to group groupBy: schema.string({ validate: validateGroupBy, defaultValue: 'all' }), // field to group on (for groupBy: top) - termField: schema.maybe(schema.string({ minLength: 1 })), + termField: schema.maybe( + schema.oneOf([ + schema.string({ minLength: 1 }), + schema.arrayOf(schema.string(), { minSize: 2, maxSize: MAX_SELECTABLE_GROUP_BY_TERMS }), + ]) + ), // limit on number of groups returned termSize: schema.maybe(schema.number({ min: 1 })), searchType: schema.oneOf( diff --git a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts index eae3fb0082030..561a0e5a90e4c 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts @@ -608,7 +608,7 @@ export class SyntheticsService { await encryptedClient.createPointInTimeFinderDecryptedAsInternalUser({ type: syntheticsParamType, perPage: 1000, - namespaces: spaceId ? [spaceId] : undefined, + namespaces: spaceId ? [spaceId] : [ALL_SPACES_ID], }); for await (const response of finder.find()) { diff --git a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts index 6ff99d482581a..91aa56e3aa921 100644 --- a/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts +++ b/x-pack/plugins/task_manager/server/metrics/create_aggregator.test.ts @@ -8,7 +8,7 @@ import sinon from 'sinon'; import { Subject, Observable } from 'rxjs'; import { take, bufferCount, skip } from 'rxjs/operators'; -import { isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events'; +import { isTaskManagerStatEvent, isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events'; import { TaskLifecycleEvent } from '../polling_lifecycle'; import { AggregatedStat } from '../lib/runtime_statistics_aggregator'; import { taskPollingLifecycleMock } from '../polling_lifecycle.mock'; @@ -16,7 +16,11 @@ import { TaskManagerConfig } from '../config'; import { createAggregator } from './create_aggregator'; import { TaskClaimMetric, TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator'; import { taskClaimFailureEvent, taskClaimSuccessEvent } from './task_claim_metrics_aggregator.test'; -import { getTaskRunFailedEvent, getTaskRunSuccessEvent } from './task_run_metrics_aggregator.test'; +import { + getTaskRunFailedEvent, + getTaskRunSuccessEvent, + getTaskManagerStatEvent, +} from './task_run_metrics_aggregator.test'; import { TaskRunMetric, TaskRunMetricsAggregator } from './task_run_metrics_aggregator'; import * as TaskClaimMetricsAggregatorModule from './task_claim_metrics_aggregator'; import { metricsAggregatorMock } from './metrics_aggregator.mock'; @@ -370,17 +374,27 @@ describe('createAggregator', () => { }); describe('with TaskRunMetricsAggregator', () => { - test('returns a cumulative count of successful task runs and total task runs, broken down by type', async () => { + test('returns a cumulative count of successful task runs, on time task runs and total task runs, broken down by type, along with histogram of run delays', async () => { const taskRunEvents = [ + getTaskManagerStatEvent(3.234), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(10.45), getTaskRunSuccessEvent('telemetry'), + getTaskManagerStatEvent(3.454), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(35.45), getTaskRunSuccessEvent('report'), + getTaskManagerStatEvent(8.85673), getTaskRunFailedEvent('alerting:example'), + getTaskManagerStatEvent(4.5745), getTaskRunSuccessEvent('alerting:.index-threshold'), + getTaskManagerStatEvent(11.564), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(3.78), getTaskRunFailedEvent('alerting:example'), + getTaskManagerStatEvent(3.7863), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(3.245), getTaskRunFailedEvent('actions:webhook'), ]; const events$ = new Subject(); @@ -393,7 +407,8 @@ describe('createAggregator', () => { taskPollingLifecycle, config, resetMetrics$: new Subject(), - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), + taskEventFilter: (taskEvent: TaskLifecycleEvent) => + isTaskRunEvent(taskEvent) || isTaskManagerStatEvent(taskEvent), metricsAggregator: new TaskRunMetricsAggregator(), }); @@ -410,17 +425,53 @@ describe('createAggregator', () => { expect(metrics[0]).toEqual({ key: 'task_run', value: { - overall: { success: 1, not_timed_out: 1, total: 1 }, + overall: { + success: 0, + not_timed_out: 0, + total: 0, + delay: { counts: [1], values: [10] }, + }, + }, + }); + expect(metrics[1]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1], values: [10] }, + }, by_type: { alerting: { success: 1, not_timed_out: 1, total: 1 }, 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, }, }, }); - expect(metrics[1]).toEqual({ + expect(metrics[2]).toEqual({ key: 'task_run', value: { - overall: { success: 2, not_timed_out: 2, total: 2 }, + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[3]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [1, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 1, not_timed_out: 1, total: 1 }, 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, @@ -428,10 +479,31 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[2]).toEqual({ + expect(metrics[4]).toEqual({ key: 'task_run', value: { - overall: { success: 3, not_timed_out: 3, total: 3 }, + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [2, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[5]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 3, + not_timed_out: 3, + total: 3, + delay: { counts: [2, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 2, not_timed_out: 2, total: 2 }, 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, @@ -439,10 +511,31 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[3]).toEqual({ + expect(metrics[6]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 3, + not_timed_out: 3, + total: 3, + delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 2, total: 2 }, + 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[7]).toEqual({ key: 'task_run', value: { - overall: { success: 4, not_timed_out: 4, total: 4 }, + overall: { + success: 4, + not_timed_out: 4, + total: 4, + delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 2, not_timed_out: 2, total: 2 }, 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, @@ -451,10 +544,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[4]).toEqual({ + expect(metrics[8]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 4, + not_timed_out: 4, + total: 4, + delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 2, total: 2 }, + 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, + report: { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[9]).toEqual({ key: 'task_run', value: { - overall: { success: 4, not_timed_out: 5, total: 5 }, + overall: { + success: 4, + not_timed_out: 5, + total: 5, + delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 2, not_timed_out: 3, total: 3 }, 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, @@ -463,10 +578,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[5]).toEqual({ + expect(metrics[10]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 4, + not_timed_out: 5, + total: 5, + delay: { counts: [4, 1, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 3, total: 3 }, + 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, + report: { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[11]).toEqual({ key: 'task_run', value: { - overall: { success: 5, not_timed_out: 6, total: 6 }, + overall: { + success: 5, + not_timed_out: 6, + total: 6, + delay: { counts: [4, 1, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 3, not_timed_out: 4, total: 4 }, 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, @@ -476,10 +613,33 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[6]).toEqual({ + expect(metrics[12]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 5, + not_timed_out: 6, + total: 6, + delay: { counts: [4, 2, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 3, not_timed_out: 4, total: 4 }, + 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, + report: { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[13]).toEqual({ key: 'task_run', value: { - overall: { success: 6, not_timed_out: 7, total: 7 }, + overall: { + success: 6, + not_timed_out: 7, + total: 7, + delay: { counts: [4, 2, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 4, not_timed_out: 5, total: 5 }, 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, @@ -489,10 +649,33 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[7]).toEqual({ + expect(metrics[14]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 6, + not_timed_out: 7, + total: 7, + delay: { counts: [5, 2, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 4, not_timed_out: 5, total: 5 }, + 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, + report: { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[15]).toEqual({ key: 'task_run', value: { - overall: { success: 6, not_timed_out: 8, total: 8 }, + overall: { + success: 6, + not_timed_out: 8, + total: 8, + delay: { counts: [5, 2, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 4, not_timed_out: 6, total: 6 }, 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, @@ -502,10 +685,33 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[8]).toEqual({ + expect(metrics[16]).toEqual({ key: 'task_run', value: { - overall: { success: 7, not_timed_out: 9, total: 9 }, + overall: { + success: 6, + not_timed_out: 8, + total: 8, + delay: { counts: [6, 2, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 4, not_timed_out: 6, total: 6 }, + 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 3, not_timed_out: 5, total: 5 }, + report: { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[17]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 7, + not_timed_out: 9, + total: 9, + delay: { counts: [6, 2, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 5, not_timed_out: 7, total: 7 }, 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, @@ -515,10 +721,33 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[9]).toEqual({ + expect(metrics[18]).toEqual({ key: 'task_run', value: { - overall: { success: 7, not_timed_out: 10, total: 10 }, + overall: { + success: 7, + not_timed_out: 9, + total: 9, + delay: { counts: [7, 2, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 5, not_timed_out: 7, total: 7 }, + 'alerting:__index-threshold': { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 4, not_timed_out: 6, total: 6 }, + report: { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[19]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 7, + not_timed_out: 10, + total: 10, + delay: { counts: [7, 2, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { actions: { success: 0, not_timed_out: 1, total: 1 }, alerting: { success: 5, not_timed_out: 7, total: 7 }, @@ -542,18 +771,28 @@ describe('createAggregator', () => { test('resets count when resetMetric$ event is received', async () => { const resetMetrics$ = new Subject(); const taskRunEvents1 = [ + getTaskManagerStatEvent(3.234), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(10.45), getTaskRunSuccessEvent('telemetry'), + getTaskManagerStatEvent(3.454), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(35.45), getTaskRunSuccessEvent('report'), + getTaskManagerStatEvent(8.85673), getTaskRunFailedEvent('alerting:example'), ]; const taskRunEvents2 = [ + getTaskManagerStatEvent(4.5745), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(11.564), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(3.78), getTaskRunFailedEvent('alerting:example'), + getTaskManagerStatEvent(3.7863), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(3.245), getTaskRunFailedEvent('actions:webhook'), ]; const events$ = new Subject(); @@ -566,7 +805,8 @@ describe('createAggregator', () => { taskPollingLifecycle, config, resetMetrics$, - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), + taskEventFilter: (taskEvent: TaskLifecycleEvent) => + isTaskRunEvent(taskEvent) || isTaskManagerStatEvent(taskEvent), metricsAggregator: new TaskRunMetricsAggregator(), }); @@ -583,17 +823,53 @@ describe('createAggregator', () => { expect(metrics[0]).toEqual({ key: 'task_run', value: { - overall: { success: 1, not_timed_out: 1, total: 1 }, + overall: { + success: 0, + not_timed_out: 0, + total: 0, + delay: { counts: [1], values: [10] }, + }, + }, + }); + expect(metrics[1]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1], values: [10] }, + }, by_type: { alerting: { success: 1, not_timed_out: 1, total: 1 }, 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, }, }, }); - expect(metrics[1]).toEqual({ + expect(metrics[2]).toEqual({ key: 'task_run', value: { - overall: { success: 2, not_timed_out: 2, total: 2 }, + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[3]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [1, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 1, not_timed_out: 1, total: 1 }, 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, @@ -601,10 +877,31 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[2]).toEqual({ + expect(metrics[4]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [2, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[5]).toEqual({ key: 'task_run', value: { - overall: { success: 3, not_timed_out: 3, total: 3 }, + overall: { + success: 3, + not_timed_out: 3, + total: 3, + delay: { counts: [2, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 2, not_timed_out: 2, total: 2 }, 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, @@ -612,10 +909,31 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[3]).toEqual({ + expect(metrics[6]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 3, + not_timed_out: 3, + total: 3, + delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 2, total: 2 }, + 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[7]).toEqual({ key: 'task_run', value: { - overall: { success: 4, not_timed_out: 4, total: 4 }, + overall: { + success: 4, + not_timed_out: 4, + total: 4, + delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 2, not_timed_out: 2, total: 2 }, 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, @@ -624,10 +942,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[4]).toEqual({ + expect(metrics[8]).toEqual({ key: 'task_run', value: { - overall: { success: 4, not_timed_out: 5, total: 5 }, + overall: { + success: 4, + not_timed_out: 4, + total: 4, + delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 2, total: 2 }, + 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, + report: { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[9]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 4, + not_timed_out: 5, + total: 5, + delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 2, not_timed_out: 3, total: 3 }, 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, @@ -637,10 +977,32 @@ describe('createAggregator', () => { }, }); // reset event should have been received here - expect(metrics[5]).toEqual({ + expect(metrics[10]).toEqual({ key: 'task_run', value: { - overall: { success: 1, not_timed_out: 1, total: 1 }, + overall: { + success: 0, + not_timed_out: 0, + total: 0, + delay: { counts: [1], values: [10] }, + }, + by_type: { + alerting: { success: 0, not_timed_out: 0, total: 0 }, + 'alerting:example': { success: 0, not_timed_out: 0, total: 0 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[11]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1], values: [10] }, + }, by_type: { alerting: { success: 1, not_timed_out: 1, total: 1 }, 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, @@ -649,10 +1011,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[6]).toEqual({ + expect(metrics[12]).toEqual({ key: 'task_run', value: { - overall: { success: 2, not_timed_out: 2, total: 2 }, + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[13]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [1, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 2, not_timed_out: 2, total: 2 }, 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, @@ -661,10 +1045,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[7]).toEqual({ + expect(metrics[14]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [2, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 2, total: 2 }, + 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[15]).toEqual({ key: 'task_run', value: { - overall: { success: 2, not_timed_out: 3, total: 3 }, + overall: { + success: 2, + not_timed_out: 3, + total: 3, + delay: { counts: [2, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 2, not_timed_out: 3, total: 3 }, 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, @@ -673,10 +1079,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[8]).toEqual({ + expect(metrics[16]).toEqual({ key: 'task_run', value: { - overall: { success: 3, not_timed_out: 4, total: 4 }, + overall: { + success: 2, + not_timed_out: 3, + total: 3, + delay: { counts: [3, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 3, total: 3 }, + 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[17]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 3, + not_timed_out: 4, + total: 4, + delay: { counts: [3, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 3, not_timed_out: 4, total: 4 }, 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, @@ -685,10 +1113,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[9]).toEqual({ + expect(metrics[18]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 3, + not_timed_out: 4, + total: 4, + delay: { counts: [4, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 3, not_timed_out: 4, total: 4 }, + 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[19]).toEqual({ key: 'task_run', value: { - overall: { success: 3, not_timed_out: 5, total: 5 }, + overall: { + success: 3, + not_timed_out: 5, + total: 5, + delay: { counts: [4, 1], values: [10, 20] }, + }, by_type: { actions: { success: 0, not_timed_out: 1, total: 1 }, alerting: { success: 3, not_timed_out: 4, total: 4 }, @@ -716,18 +1166,28 @@ describe('createAggregator', () => { const clock = sinon.useFakeTimers(); clock.tick(0); const taskRunEvents1 = [ + getTaskManagerStatEvent(3.234), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(10.45), getTaskRunSuccessEvent('telemetry'), + getTaskManagerStatEvent(3.454), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(35.45), getTaskRunSuccessEvent('report'), + getTaskManagerStatEvent(8.85673), getTaskRunFailedEvent('alerting:example'), ]; const taskRunEvents2 = [ + getTaskManagerStatEvent(4.5745), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(11.564), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(3.78), getTaskRunFailedEvent('alerting:example'), + getTaskManagerStatEvent(3.7863), getTaskRunSuccessEvent('alerting:example'), + getTaskManagerStatEvent(3.245), getTaskRunFailedEvent('actions:webhook'), ]; const events$ = new Subject(); @@ -743,7 +1203,8 @@ describe('createAggregator', () => { metrics_reset_interval: 10, }, resetMetrics$: new Subject(), - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), + taskEventFilter: (taskEvent: TaskLifecycleEvent) => + isTaskRunEvent(taskEvent) || isTaskManagerStatEvent(taskEvent), metricsAggregator: new TaskRunMetricsAggregator(), }); @@ -760,17 +1221,53 @@ describe('createAggregator', () => { expect(metrics[0]).toEqual({ key: 'task_run', value: { - overall: { success: 1, not_timed_out: 1, total: 1 }, + overall: { + success: 0, + not_timed_out: 0, + total: 0, + delay: { counts: [1], values: [10] }, + }, + }, + }); + expect(metrics[1]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1], values: [10] }, + }, + by_type: { + alerting: { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[2]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 1, not_timed_out: 1, total: 1 }, 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, }, }, }); - expect(metrics[1]).toEqual({ + expect(metrics[3]).toEqual({ key: 'task_run', value: { - overall: { success: 2, not_timed_out: 2, total: 2 }, + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [1, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 1, not_timed_out: 1, total: 1 }, 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, @@ -778,10 +1275,31 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[2]).toEqual({ + expect(metrics[4]).toEqual({ key: 'task_run', value: { - overall: { success: 3, not_timed_out: 3, total: 3 }, + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [2, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[5]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 3, + not_timed_out: 3, + total: 3, + delay: { counts: [2, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 2, not_timed_out: 2, total: 2 }, 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, @@ -789,10 +1307,31 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[3]).toEqual({ + expect(metrics[6]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 3, + not_timed_out: 3, + total: 3, + delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 2, total: 2 }, + 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[7]).toEqual({ key: 'task_run', value: { - overall: { success: 4, not_timed_out: 4, total: 4 }, + overall: { + success: 4, + not_timed_out: 4, + total: 4, + delay: { counts: [2, 1, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 2, not_timed_out: 2, total: 2 }, 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, @@ -801,10 +1340,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[4]).toEqual({ + expect(metrics[8]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 4, + not_timed_out: 4, + total: 4, + delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 2, total: 2 }, + 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, + report: { success: 1, not_timed_out: 1, total: 1 }, + telemetry: { success: 1, not_timed_out: 1, total: 1 }, + }, + }, + }); + expect(metrics[9]).toEqual({ key: 'task_run', value: { - overall: { success: 4, not_timed_out: 5, total: 5 }, + overall: { + success: 4, + not_timed_out: 5, + total: 5, + delay: { counts: [3, 1, 0, 1], values: [10, 20, 30, 40] }, + }, by_type: { alerting: { success: 2, not_timed_out: 3, total: 3 }, 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, @@ -814,10 +1375,32 @@ describe('createAggregator', () => { }, }); // reset event should have been received here - expect(metrics[5]).toEqual({ + expect(metrics[10]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 0, + not_timed_out: 0, + total: 0, + delay: { counts: [1], values: [10] }, + }, + by_type: { + alerting: { success: 0, not_timed_out: 0, total: 0 }, + 'alerting:example': { success: 0, not_timed_out: 0, total: 0 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[11]).toEqual({ key: 'task_run', value: { - overall: { success: 1, not_timed_out: 1, total: 1 }, + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1], values: [10] }, + }, by_type: { alerting: { success: 1, not_timed_out: 1, total: 1 }, 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, @@ -826,10 +1409,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[6]).toEqual({ + expect(metrics[12]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 1, + not_timed_out: 1, + total: 1, + delay: { counts: [1, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 1, not_timed_out: 1, total: 1 }, + 'alerting:example': { success: 1, not_timed_out: 1, total: 1 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[13]).toEqual({ key: 'task_run', value: { - overall: { success: 2, not_timed_out: 2, total: 2 }, + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [1, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 2, not_timed_out: 2, total: 2 }, 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, @@ -838,10 +1443,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[7]).toEqual({ + expect(metrics[14]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 2, + not_timed_out: 2, + total: 2, + delay: { counts: [2, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 2, total: 2 }, + 'alerting:example': { success: 2, not_timed_out: 2, total: 2 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[15]).toEqual({ key: 'task_run', value: { - overall: { success: 2, not_timed_out: 3, total: 3 }, + overall: { + success: 2, + not_timed_out: 3, + total: 3, + delay: { counts: [2, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 2, not_timed_out: 3, total: 3 }, 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, @@ -850,10 +1477,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[8]).toEqual({ + expect(metrics[16]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 2, + not_timed_out: 3, + total: 3, + delay: { counts: [3, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 2, not_timed_out: 3, total: 3 }, + 'alerting:example': { success: 2, not_timed_out: 3, total: 3 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[17]).toEqual({ key: 'task_run', value: { - overall: { success: 3, not_timed_out: 4, total: 4 }, + overall: { + success: 3, + not_timed_out: 4, + total: 4, + delay: { counts: [3, 1], values: [10, 20] }, + }, by_type: { alerting: { success: 3, not_timed_out: 4, total: 4 }, 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, @@ -862,10 +1511,32 @@ describe('createAggregator', () => { }, }, }); - expect(metrics[9]).toEqual({ + expect(metrics[18]).toEqual({ key: 'task_run', value: { - overall: { success: 3, not_timed_out: 5, total: 5 }, + overall: { + success: 3, + not_timed_out: 4, + total: 4, + delay: { counts: [4, 1], values: [10, 20] }, + }, + by_type: { + alerting: { success: 3, not_timed_out: 4, total: 4 }, + 'alerting:example': { success: 3, not_timed_out: 4, total: 4 }, + report: { success: 0, not_timed_out: 0, total: 0 }, + telemetry: { success: 0, not_timed_out: 0, total: 0 }, + }, + }, + }); + expect(metrics[19]).toEqual({ + key: 'task_run', + value: { + overall: { + success: 3, + not_timed_out: 5, + total: 5, + delay: { counts: [4, 1], values: [10, 20] }, + }, by_type: { actions: { success: 0, not_timed_out: 1, total: 1 }, alerting: { success: 3, not_timed_out: 4, total: 4 }, diff --git a/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts b/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts index 29558308c5196..4b4ce6075d6c6 100644 --- a/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts +++ b/x-pack/plugins/task_manager/server/metrics/metrics_stream.ts @@ -11,7 +11,7 @@ import { set } from '@kbn/safer-lodash-set'; import { TaskLifecycleEvent, TaskPollingLifecycle } from '../polling_lifecycle'; import { TaskManagerConfig } from '../config'; import { AggregatedStatProvider } from '../lib/runtime_statistics_aggregator'; -import { isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events'; +import { isTaskManagerStatEvent, isTaskPollingCycleEvent, isTaskRunEvent } from '../task_events'; import { TaskClaimMetric, TaskClaimMetricsAggregator } from './task_claim_metrics_aggregator'; import { createAggregator } from './create_aggregator'; import { TaskRunMetric, TaskRunMetricsAggregator } from './task_run_metrics_aggregator'; @@ -54,7 +54,8 @@ export function createMetricsAggregators({ taskPollingLifecycle, config, resetMetrics$, - taskEventFilter: (taskEvent: TaskLifecycleEvent) => isTaskRunEvent(taskEvent), + taskEventFilter: (taskEvent: TaskLifecycleEvent) => + isTaskRunEvent(taskEvent) || isTaskManagerStatEvent(taskEvent), metricsAggregator: new TaskRunMetricsAggregator(), }) ); diff --git a/x-pack/plugins/task_manager/server/metrics/simple_histogram.test.ts b/x-pack/plugins/task_manager/server/metrics/simple_histogram.test.ts index 30b5d0bd6b21a..24ae09c743501 100644 --- a/x-pack/plugins/task_manager/server/metrics/simple_histogram.test.ts +++ b/x-pack/plugins/task_manager/server/metrics/simple_histogram.test.ts @@ -176,4 +176,21 @@ describe('SimpleHistogram', () => { expect(histogram.get(true)).toEqual([]); }); + + test('should correctly serialize histogram data', () => { + const histogram = new SimpleHistogram(100, 10); + histogram.record(23); + histogram.record(34); + histogram.record(21); + histogram.record(56); + histogram.record(78); + histogram.record(33); + histogram.record(99); + histogram.record(1); + histogram.record(2); + expect(histogram.serialize()).toEqual({ + counts: [2, 0, 2, 2, 0, 1, 0, 1, 0, 1], + values: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100], + }); + }); }); diff --git a/x-pack/plugins/task_manager/server/metrics/simple_histogram.ts b/x-pack/plugins/task_manager/server/metrics/simple_histogram.ts index 3b2cb89a7f5dd..4b888c8cc4b3d 100644 --- a/x-pack/plugins/task_manager/server/metrics/simple_histogram.ts +++ b/x-pack/plugins/task_manager/server/metrics/simple_histogram.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { JsonObject } from '@kbn/utility-types'; import { last } from 'lodash'; interface Bucket { @@ -13,6 +14,11 @@ interface Bucket { count: number; } +export interface SerializedHistogram extends JsonObject { + counts: number[]; + values: number[]; +} + export class SimpleHistogram { private maxValue: number; private bucketSize: number; @@ -68,6 +74,18 @@ export class SimpleHistogram { })); } + public serialize(): SerializedHistogram { + const counts: number[] = []; + const values: number[] = []; + + for (const { count, value } of this.get(true)) { + counts.push(count); + values.push(value); + } + + return { counts, values }; + } + private initializeBuckets() { let i = 0; while (i < this.maxValue) { diff --git a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts index a10ddf89c77b0..60bb2401f420d 100644 --- a/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts +++ b/x-pack/plugins/task_manager/server/metrics/task_claim_metrics_aggregator.ts @@ -9,7 +9,7 @@ import { JsonObject } from '@kbn/utility-types'; import { isOk } from '../lib/result_type'; import { TaskLifecycleEvent } from '../polling_lifecycle'; import { TaskRun } from '../task_events'; -import { SimpleHistogram } from './simple_histogram'; +import { SerializedHistogram, SimpleHistogram } from './simple_histogram'; import { ITaskMetricsAggregator } from './types'; import { MetricCounterService } from './counter/metric_counter_service'; @@ -26,10 +26,7 @@ interface TaskClaimCounts extends JsonObject { } export type TaskClaimMetric = TaskClaimCounts & { - duration: { - counts: number[]; - values: number[]; - }; + duration: SerializedHistogram; }; export class TaskClaimMetricsAggregator implements ITaskMetricsAggregator { @@ -47,7 +44,7 @@ export class TaskClaimMetricsAggregator implements ITaskMetricsAggregator { + return asTaskManagerStatEvent(id, asOk(value)); +}; + describe('TaskRunMetricsAggregator', () => { let taskRunMetricsAggregator: TaskRunMetricsAggregator; beforeEach(() => { @@ -77,13 +86,14 @@ describe('TaskRunMetricsAggregator', () => { test('should correctly initialize', () => { expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 0 }, + overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [], values: [] } }, }); }); test('should correctly return initialMetrics', () => { expect(taskRunMetricsAggregator.initialMetric()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 0 }, + overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [], values: [] } }, + by_type: {}, }); }); @@ -91,18 +101,34 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 2, not_timed_out: 2, total: 2 }, + overall: { success: 2, not_timed_out: 2, total: 2, delay: { counts: [], values: [] } }, by_type: { telemetry: { success: 2, not_timed_out: 2, total: 2 }, }, }); }); + test('should correctly process task manager runDelay stat', () => { + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskManagerStatEvent(3.343)); + expect(taskRunMetricsAggregator.collect()).toEqual({ + overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [1], values: [10] } }, + }); + }); + + test('should ignore task manager stats that are not runDelays', () => { + taskRunMetricsAggregator.processTaskLifecycleEvent( + getTaskManagerStatEvent(3.343, 'pollingDelay') + ); + expect(taskRunMetricsAggregator.collect()).toEqual({ + overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [], values: [] } }, + }); + }); + test('should correctly process task run success event where task run has timed out', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry', true)); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry', true)); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 2, not_timed_out: 0, total: 2 }, + overall: { success: 2, not_timed_out: 0, total: 2, delay: { counts: [], values: [] } }, by_type: { telemetry: { success: 2, not_timed_out: 0, total: 2 }, }, @@ -113,7 +139,7 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 2, total: 2 }, + overall: { success: 0, not_timed_out: 2, total: 2, delay: { counts: [], values: [] } }, by_type: { telemetry: { success: 0, not_timed_out: 2, total: 2 }, }, @@ -124,7 +150,7 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry', true)); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry', true)); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 2 }, + overall: { success: 0, not_timed_out: 0, total: 2, delay: { counts: [], values: [] } }, by_type: { telemetry: { success: 0, not_timed_out: 0, total: 2 }, }, @@ -137,7 +163,7 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report', true)); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunFailedEvent('telemetry')); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 3, not_timed_out: 3, total: 4 }, + overall: { success: 3, not_timed_out: 3, total: 4, delay: { counts: [], values: [] } }, by_type: { report: { success: 2, not_timed_out: 1, total: 2 }, telemetry: { success: 1, not_timed_out: 2, total: 2 }, @@ -167,7 +193,7 @@ describe('TaskRunMetricsAggregator', () => { getTaskRunSuccessEvent('alerting:.index-threshold', true) ); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 11, not_timed_out: 12, total: 14 }, + overall: { success: 11, not_timed_out: 12, total: 14, delay: { counts: [], values: [] } }, by_type: { actions: { success: 3, not_timed_out: 3, total: 3 }, 'actions:__email': { success: 1, not_timed_out: 1, total: 1 }, @@ -182,6 +208,11 @@ describe('TaskRunMetricsAggregator', () => { }); test('should correctly reset counter', () => { + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskManagerStatEvent(3.343)); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskManagerStatEvent(25.45)); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskManagerStatEvent(6.4478)); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskManagerStatEvent(9.241)); + taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('telemetry')); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); taskRunMetricsAggregator.processTaskLifecycleEvent(getTaskRunSuccessEvent('report')); @@ -203,7 +234,12 @@ describe('TaskRunMetricsAggregator', () => { getTaskRunSuccessEvent('alerting:.index-threshold') ); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 11, not_timed_out: 12, total: 14 }, + overall: { + success: 11, + not_timed_out: 12, + total: 14, + delay: { counts: [3, 0, 1], values: [10, 20, 30] }, + }, by_type: { actions: { success: 3, not_timed_out: 3, total: 3 }, 'actions:__email': { success: 1, not_timed_out: 1, total: 1 }, @@ -218,7 +254,7 @@ describe('TaskRunMetricsAggregator', () => { taskRunMetricsAggregator.reset(); expect(taskRunMetricsAggregator.collect()).toEqual({ - overall: { success: 0, not_timed_out: 0, total: 0 }, + overall: { success: 0, not_timed_out: 0, total: 0, delay: { counts: [], values: [] } }, by_type: { actions: { success: 0, not_timed_out: 0, total: 0 }, 'actions:__email': { success: 0, not_timed_out: 0, total: 0 }, diff --git a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts index 685c5a8cc8838..ced75af5718eb 100644 --- a/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts +++ b/x-pack/plugins/task_manager/server/metrics/task_run_metrics_aggregator.ts @@ -6,14 +6,26 @@ */ import { JsonObject } from '@kbn/utility-types'; -import { isOk, unwrap } from '../lib/result_type'; +import { merge } from 'lodash'; +import { isOk, Ok, unwrap } from '../lib/result_type'; import { TaskLifecycleEvent } from '../polling_lifecycle'; -import { ErroredTask, RanTask, TaskRun } from '../task_events'; +import { + ErroredTask, + RanTask, + TaskRun, + isTaskManagerStatEvent, + isTaskRunEvent, + TaskManagerStat, +} from '../task_events'; import { MetricCounterService } from './counter/metric_counter_service'; +import { SerializedHistogram, SimpleHistogram } from './simple_histogram'; import { ITaskMetricsAggregator } from './types'; const taskTypeGrouping = new Set(['alerting:', 'actions:']); +const HDR_HISTOGRAM_MAX = 1800; // 30 minutes +const HDR_HISTOGRAM_BUCKET_SIZE = 10; // 10 seconds + enum TaskRunKeys { SUCCESS = 'success', NOT_TIMED_OUT = 'not_timed_out', @@ -31,33 +43,53 @@ interface TaskRunCounts extends JsonObject { [TaskRunKeys.TOTAL]: number; } -export interface TaskRunMetric extends JsonObject { +export interface TaskRunMetrics extends JsonObject { [TaskRunMetricKeys.OVERALL]: TaskRunCounts; [TaskRunMetricKeys.BY_TYPE]: { [key: string]: TaskRunCounts; }; } +export interface TaskRunMetric extends JsonObject { + overall: TaskRunMetrics['overall'] & { + delay: SerializedHistogram; + }; + by_type: TaskRunMetrics['by_type']; +} + export class TaskRunMetricsAggregator implements ITaskMetricsAggregator { private counter: MetricCounterService = new MetricCounterService( Object.values(TaskRunKeys), TaskRunMetricKeys.OVERALL ); + private delayHistogram = new SimpleHistogram(HDR_HISTOGRAM_MAX, HDR_HISTOGRAM_BUCKET_SIZE); public initialMetric(): TaskRunMetric { - return this.counter.initialMetrics(); + return merge(this.counter.initialMetrics(), { + by_type: {}, + overall: { delay: { counts: [], values: [] } }, + }); } public collect(): TaskRunMetric { - return this.counter.collect(); + return merge(this.counter.collect(), { overall: { delay: this.delayHistogram.serialize() } }); } public reset() { this.counter.reset(); + this.delayHistogram.reset(); } public processTaskLifecycleEvent(taskEvent: TaskLifecycleEvent) { - const { task, isExpired }: RanTask | ErroredTask = unwrap((taskEvent as TaskRun).event); + if (isTaskRunEvent(taskEvent)) { + this.processTaskRunEvent(taskEvent); + } else if (isTaskManagerStatEvent(taskEvent)) { + this.processTaskManagerStatEvent(taskEvent); + } + } + + private processTaskRunEvent(taskEvent: TaskRun) { + const { task, isExpired }: RanTask | ErroredTask = unwrap(taskEvent.event); const success = isOk((taskEvent as TaskRun).event); const taskType = task.taskType.replaceAll('.', '__'); const taskTypeGroup = this.getTaskTypeGroup(taskType); @@ -76,6 +108,13 @@ export class TaskRunMetricsAggregator implements ITaskMetricsAggregator).value); + this.delayHistogram.record(delayInSec); + } + } + private incrementCounters(key: TaskRunKeys, taskType: string, group?: string) { this.counter.increment(key, TaskRunMetricKeys.OVERALL); this.counter.increment(key, `${TaskRunMetricKeys.BY_TYPE}.${taskType}`); diff --git a/x-pack/plugins/task_manager/server/task_events.ts b/x-pack/plugins/task_manager/server/task_events.ts index 68eaec9d9b28e..63aacd125b1b0 100644 --- a/x-pack/plugins/task_manager/server/task_events.ts +++ b/x-pack/plugins/task_manager/server/task_events.ts @@ -89,7 +89,8 @@ export type TaskManagerStats = | 'claimDuration' | 'queuedEphemeralTasks' | 'ephemeralTaskDelay' - | 'workerUtilization'; + | 'workerUtilization' + | 'runDelay'; export type TaskManagerStat = TaskEvent; export type OkResultOf = EventType extends TaskEvent diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts index 6676c17ccc630..1ae176d6993b3 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts @@ -16,6 +16,7 @@ import { asTaskMarkRunningEvent, TaskRun, TaskPersistence, + asTaskManagerStatEvent, } from '../task_events'; import { ConcreteTaskInstance, TaskStatus } from '../task'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; @@ -927,7 +928,10 @@ describe('TaskManagerRunner', () => { ) ) ); - expect(onTaskEvent).toHaveBeenCalledTimes(1); + expect(onTaskEvent).toHaveBeenCalledWith( + asTaskManagerStatEvent('runDelay', asOk(expect.any(Number))) + ); + expect(onTaskEvent).toHaveBeenCalledTimes(2); }); test('tasks that return runAt override the schedule', async () => { @@ -1300,6 +1304,9 @@ describe('TaskManagerRunner', () => { ) ) ); + expect(onTaskEvent).toHaveBeenCalledWith( + asTaskManagerStatEvent('runDelay', asOk(expect.any(Number))) + ); }); test('emits TaskEvent when a recurring task is run successfully', async () => { @@ -1381,6 +1388,9 @@ describe('TaskManagerRunner', () => { ) ) ); + expect(onTaskEvent).toHaveBeenCalledWith( + asTaskManagerStatEvent('runDelay', asOk(expect.any(Number))) + ); }); test('emits TaskEvent when a recurring task returns a success result with hasError=true', async () => { @@ -1502,7 +1512,7 @@ describe('TaskManagerRunner', () => { ) ) ); - expect(onTaskEvent).toHaveBeenCalledTimes(1); + expect(onTaskEvent).toHaveBeenCalledTimes(2); }); test('emits TaskEvent when a task run throws an error and has timed out', async () => { @@ -1544,7 +1554,10 @@ describe('TaskManagerRunner', () => { ) ) ); - expect(onTaskEvent).toHaveBeenCalledTimes(1); + expect(onTaskEvent).toHaveBeenCalledWith( + asTaskManagerStatEvent('runDelay', asOk(expect.any(Number))) + ); + expect(onTaskEvent).toHaveBeenCalledTimes(2); }); test('emits TaskEvent when a task run returns an error', async () => { @@ -1586,7 +1599,10 @@ describe('TaskManagerRunner', () => { ) ) ); - expect(onTaskEvent).toHaveBeenCalledTimes(1); + expect(onTaskEvent).toHaveBeenCalledWith( + asTaskManagerStatEvent('runDelay', asOk(expect.any(Number))) + ); + expect(onTaskEvent).toHaveBeenCalledTimes(2); }); test('emits TaskEvent when a task returns an error and is marked as failed', async () => { @@ -1639,7 +1655,10 @@ describe('TaskManagerRunner', () => { ) ) ); - expect(onTaskEvent).toHaveBeenCalledTimes(1); + expect(onTaskEvent).toHaveBeenCalledWith( + asTaskManagerStatEvent('runDelay', asOk(expect.any(Number))) + ); + expect(onTaskEvent).toHaveBeenCalledTimes(2); }); }); diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index 1742d88bc8f07..63f520ade1031 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -33,11 +33,13 @@ import { import { asTaskMarkRunningEvent, asTaskRunEvent, + asTaskManagerStatEvent, startTaskTimerWithEventLoopMonitoring, TaskMarkRunning, TaskPersistence, TaskRun, TaskTiming, + TaskManagerStat, } from '../task_events'; import { intervalFromDate, maxIntervalFromDate } from '../lib/intervals'; import { @@ -101,7 +103,7 @@ type Opts = { definitions: TaskTypeDictionary; instance: ConcreteTaskInstance; store: Updatable; - onTaskEvent?: (event: TaskRun | TaskMarkRunning) => void; + onTaskEvent?: (event: TaskRun | TaskMarkRunning | TaskManagerStat) => void; defaultMaxAttempts: number; executionContext: ExecutionContextStart; usageCounter?: UsageCounter; @@ -149,7 +151,7 @@ export class TaskManagerRunner implements TaskRunner { private bufferedTaskStore: Updatable; private beforeRun: Middleware['beforeRun']; private beforeMarkRunning: Middleware['beforeMarkRunning']; - private onTaskEvent: (event: TaskRun | TaskMarkRunning) => void; + private onTaskEvent: (event: TaskRun | TaskMarkRunning | TaskManagerStat) => void; private defaultMaxAttempts: number; private uuid: string; private readonly executionContext: ExecutionContextStart; @@ -310,6 +312,13 @@ export class TaskManagerRunner implements TaskRunner { const stopTaskTimer = startTaskTimerWithEventLoopMonitoring(this.eventLoopDelayConfig); + this.onTaskEvent( + asTaskManagerStatEvent( + 'runDelay', + asOk(getTaskDelayInSeconds(this.instance.task.scheduledAt)) + ) + ); + try { this.task = this.definition.createTaskRunner(modifiedContext); @@ -893,3 +902,8 @@ export function calculateDelay(attempts: number) { return defaultBackoffPerFailure * Math.pow(2, attempts - 2); } } + +export function getTaskDelayInSeconds(scheduledAt: Date) { + const now = new Date(); + return (now.valueOf() - scheduledAt.valueOf()) / 1000; +} diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json index 000d54ade631c..fde387ee53caf 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -6179,6 +6179,18 @@ }, "isElasticStaffOwned": { "type": "boolean" + }, + "deploymentId": { + "type": "keyword", + "_meta": { + "description": "The ESS Deployment ID" + } + }, + "projectId": { + "type": "keyword", + "_meta": { + "description": "The Serverless Project ID" + } } } }, diff --git a/x-pack/plugins/threat_intelligence/public/components/paywall.stories.tsx b/x-pack/plugins/threat_intelligence/public/components/paywall.stories.tsx index 14de7d5b907fb..d607eb1a91d44 100644 --- a/x-pack/plugins/threat_intelligence/public/components/paywall.stories.tsx +++ b/x-pack/plugins/threat_intelligence/public/components/paywall.stories.tsx @@ -14,5 +14,5 @@ export default { }; export function BasicPaywall() { - return ; + return ; } diff --git a/x-pack/plugins/threat_intelligence/public/components/paywall.tsx b/x-pack/plugins/threat_intelligence/public/components/paywall.tsx index 8f095a2fd9baa..a01ca32a06946 100644 --- a/x-pack/plugins/threat_intelligence/public/components/paywall.tsx +++ b/x-pack/plugins/threat_intelligence/public/components/paywall.tsx @@ -6,24 +6,17 @@ */ import React, { VFC } from 'react'; -import { - EuiButton, - EuiButtonEmpty, - EuiEmptyPrompt, - EuiFlexGroup, - EuiFlexItem, - EuiIcon, -} from '@elastic/eui'; +import { EuiButton, EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, EuiIcon } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import { SubscriptionButtonEmpty } from '@kbn/subscription-tracking'; +import type { SubscriptionContextData } from '@kbn/subscription-tracking'; -interface PaywallProps { - /** - * Can be obtained using `http.basePath.prepend('/app/management/stack/license_management')` - */ - licenseManagementHref: string; -} +const subscriptionContext: SubscriptionContextData = { + feature: 'threat-intelligence', + source: 'security__threat-intelligence', +}; -export const Paywall: VFC = ({ licenseManagementHref }) => { +export const Paywall: VFC = () => { return ( } @@ -59,12 +52,12 @@ export const Paywall: VFC = ({ licenseManagementHref }) => {
- + - +
diff --git a/x-pack/plugins/threat_intelligence/public/containers/enterprise_guard.tsx b/x-pack/plugins/threat_intelligence/public/containers/enterprise_guard.tsx index 1378e412b9255..98c79339ad78d 100644 --- a/x-pack/plugins/threat_intelligence/public/containers/enterprise_guard.tsx +++ b/x-pack/plugins/threat_intelligence/public/containers/enterprise_guard.tsx @@ -6,16 +6,13 @@ */ import React, { FC } from 'react'; + import { Paywall } from '../components/paywall'; -import { useKibana } from '../hooks/use_kibana'; import { useSecurityContext } from '../hooks/use_security_context'; import { SecuritySolutionPluginTemplateWrapper } from './security_solution_plugin_template_wrapper'; export const EnterpriseGuard: FC = ({ children }) => { const { licenseService } = useSecurityContext(); - const { - services: { http }, - } = useKibana(); if (licenseService.isEnterprise()) { return <>{children}; @@ -23,9 +20,7 @@ export const EnterpriseGuard: FC = ({ children }) => { return ( - + ); }; diff --git a/x-pack/plugins/threat_intelligence/public/mocks/story_providers.tsx b/x-pack/plugins/threat_intelligence/public/mocks/story_providers.tsx index 249a9d05afbc9..d13c3f561e748 100644 --- a/x-pack/plugins/threat_intelligence/public/mocks/story_providers.tsx +++ b/x-pack/plugins/threat_intelligence/public/mocks/story_providers.tsx @@ -12,6 +12,7 @@ import { CoreStart, IUiSettingsClient } from '@kbn/core/public'; import { TimelinesUIStart } from '@kbn/timelines-plugin/public'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { RequestAdapter } from '@kbn/inspector-plugin/common'; +import { MockSubscriptionTrackingProvider } from '@kbn/subscription-tracking/mocks'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import type { SettingsStart } from '@kbn/core-ui-settings-browser'; import { mockIndicatorsFiltersContext } from './mock_indicators_filters_context'; @@ -107,7 +108,9 @@ export const StoryProvidersComponent: VFC = ({ - {children} + + {children} + diff --git a/x-pack/plugins/threat_intelligence/public/mocks/test_providers.tsx b/x-pack/plugins/threat_intelligence/public/mocks/test_providers.tsx index 37360284b6aa7..12c42052ee26f 100644 --- a/x-pack/plugins/threat_intelligence/public/mocks/test_providers.tsx +++ b/x-pack/plugins/threat_intelligence/public/mocks/test_providers.tsx @@ -17,6 +17,7 @@ import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks import { createTGridMocks } from '@kbn/timelines-plugin/public/mock'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { RequestAdapter } from '@kbn/inspector-plugin/common'; +import { MockSubscriptionTrackingProvider } from '@kbn/subscription-tracking/mocks'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { MemoryRouter } from 'react-router-dom'; import { casesPluginMock } from '@kbn/cases-plugin/public/mocks'; @@ -141,11 +142,13 @@ export const TestProvidersComponent: FC = ({ children }) => ( - - - {children} - - + + + + {children} + + + diff --git a/x-pack/plugins/threat_intelligence/public/plugin.tsx b/x-pack/plugins/threat_intelligence/public/plugin.tsx index 49f6b3b7724bf..e30e9f92c0a5b 100755 --- a/x-pack/plugins/threat_intelligence/public/plugin.tsx +++ b/x-pack/plugins/threat_intelligence/public/plugin.tsx @@ -11,6 +11,7 @@ import { Provider as ReduxStoreProvider } from 'react-redux'; import React, { Suspense } from 'react'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { ExternalReferenceAttachmentType } from '@kbn/cases-plugin/public/client/attachment_framework/types'; +import { SubscriptionTrackingProvider } from '@kbn/subscription-tracking'; import { generateAttachmentType } from './modules/cases/utils/attachments'; import { KibanaContextProvider } from './hooks/use_kibana'; import { @@ -43,11 +44,16 @@ export const createApp = - - }> - - - + + + }> + + + + diff --git a/x-pack/plugins/threat_intelligence/tsconfig.json b/x-pack/plugins/threat_intelligence/tsconfig.json index 5576b8e2ea926..661186c943b54 100644 --- a/x-pack/plugins/threat_intelligence/tsconfig.json +++ b/x-pack/plugins/threat_intelligence/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "outDir": "target/types", + "outDir": "target/types" }, "include": [ "common/**/*", @@ -32,9 +32,8 @@ "@kbn/utility-types", "@kbn/ui-theme", "@kbn/securitysolution-io-ts-list-types", - "@kbn/core-ui-settings-browser" + "@kbn/core-ui-settings-browser", + "@kbn/subscription-tracking" ], - "exclude": [ - "target/**/*", - ] + "exclude": ["target/**/*"] } diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 49fa6be17eb96..c1777305c2be3 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -8271,7 +8271,6 @@ "xpack.apm.mobile.location.metrics.http.requests.title": "Le plus utilisé dans", "xpack.apm.mobile.location.metrics.launches": "La plupart des lancements", "xpack.apm.mobile.location.metrics.sessions": "La plupart des sessions", - "xpack.apm.mobile.metrics.crash.rate": "Taux de panne (pannes par minute)", "xpack.apm.mobile.metrics.http.requests": "Requêtes HTTP", "xpack.apm.mobile.metrics.load.time": "Temps de chargement de l'application le plus lent", "xpack.apm.mobile.metrics.sessions": "Sessions", @@ -11405,13 +11404,11 @@ "xpack.csp.findings.findingsByResourceTable.postureScoreColumnLabel": "Score du niveau", "xpack.csp.findings.findingsErrorToast.searchFailedTitle": "Échec de la recherche", "xpack.csp.findings.findingsFlyout.jsonTabTitle": "JSON", - "xpack.csp.findings.findingsFlyout.overviewTab.actualTitle": "Réel", "xpack.csp.findings.findingsFlyout.overviewTab.cisSectionTitle": "Section CIS", "xpack.csp.findings.findingsFlyout.overviewTab.defaultValueTitle": "Valeur par défaut", "xpack.csp.findings.findingsFlyout.overviewTab.detailsTitle": "Détails", "xpack.csp.findings.findingsFlyout.overviewTab.evaluatedAtTitle": "Évalué à", "xpack.csp.findings.findingsFlyout.overviewTab.evidenceSourcesTitle": "Preuve", - "xpack.csp.findings.findingsFlyout.overviewTab.expectedTitle": "Attendus", "xpack.csp.findings.findingsFlyout.overviewTab.frameworkSourcesTitle": "Sources du framework", "xpack.csp.findings.findingsFlyout.overviewTab.impactTitle": "Impact", "xpack.csp.findings.findingsFlyout.overviewTab.indexTitle": "Index", @@ -17347,7 +17344,6 @@ "xpack.idxMgmt.dataStreamDetailPanel.generationToolTip": "Nombre cumulatif d'index de sauvegarde créés pour le flux de données", "xpack.idxMgmt.dataStreamDetailPanel.healthTitle": "Intégrité", "xpack.idxMgmt.dataStreamDetailPanel.healthToolTip": "Intégrité des index de sauvegarde actuels du flux de données", - "xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyContentNoneMessage": "Aucun", "xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyTitle": "Stratégie de cycle de vie des index", "xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyToolTip": "Stratégie de cycle de vie de l'index qui gère les données du flux de données", "xpack.idxMgmt.dataStreamDetailPanel.indexTemplateTitle": "Modèle d'index", @@ -27128,18 +27124,6 @@ "xpack.observability.slo.update.errorNotification": "Un problème est survenu lors de la mise à jour de {name}", "xpack.observability.slo.update.successNotification": "Mise à jour réussie de {name}", "xpack.observability.syntheticsThrottlingEnabledExperimentDescription": "Activez les paramètres de régulation dans les configurations du moniteur Synthetics. Notez qu’il est possible que la régulation ne soit pas toujours disponible pour vos moniteurs, même si le paramètre est actif. Destiné à un usage interne uniquement. {link}", - "xpack.observability.threshold.rule.alertDetailsAppSection.criterion.subtitle": "Dernière {lookback} {timeLabel}", - "xpack.observability.threshold.rule.alertFlyout.alertPerRedundantFilterError": "Il est possible que cette règle signale {matchedGroups} moins que prévu, car la requête de filtre comporte une correspondance pour {groupCount, plural, one {ce champ} many {ces champs} other {ces champs}}. Pour en savoir plus, consultez notre {filteringAndGroupingLink}.", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.aggregationLabel": "Agrégation {name}", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.filterLabel": "Filtre KQL {name}", - "xpack.observability.threshold.rule.alerts.dataTimeRangeLabel": "Dernière {lookback} {timeLabel}", - "xpack.observability.threshold.rule.alerts.dataTimeRangeLabelWithGrouping": "Dernières {lookback} {timeLabel} de données pour {id}", - "xpack.observability.threshold.rule.threshold.errorAlertReason": "Elasticsearch a échoué lors de l'interrogation des données pour {metric}", - "xpack.observability.threshold.rule.threshold.firedAlertReason": "{metric} est {currentValue} dans les dernières {duration}{group}. Alerte lorsque {comparator} {threshold}.", - "xpack.observability.threshold.rule.threshold.noDataAlertReason": "{metric} n'a signalé aucune donnée dans les dernières {interval} {group}", - "xpack.observability.threshold.rule.threshold.recoveredAlertReason": "{metric} est maintenant {comparator} un seuil de {threshold} (la valeur actuelle est {currentValue}) pour {group}", - "xpack.observability.threshold.rule.threshold.thresholdRange": "{a} et {b}", - "xpack.observability.threshold.rule.thresholdExtraTitle": "Alerte lorsque {comparator} {threshold}.", "xpack.observability.transactionRateLabel": "{value} tpm", "xpack.observability.ux.coreVitals.averageMessage": " et inférieur à {bad}", "xpack.observability.ux.coreVitals.paletteLegend.rankPercentage": "{labelsInd} ({ranksInd} %)", @@ -27586,81 +27570,6 @@ "xpack.observability.statusVisualization.ux.link": "Ajouter des données", "xpack.observability.statusVisualization.ux.title": "Expérience utilisateur", "xpack.observability.syntheticsThrottlingEnabledExperimentName": "Activer la régulation Synthetics (Expérimentale)", - "xpack.observability.threshold.rule..charts.errorMessage": "Oups, un problème est survenu", - "xpack.observability.threshold.rule..charts.noDataMessage": "Aucune donnée graphique disponible", - "xpack.observability.threshold.rule..timeLabels.days": "jours", - "xpack.observability.threshold.rule..timeLabels.hours": "heures", - "xpack.observability.threshold.rule..timeLabels.minutes": "minutes", - "xpack.observability.threshold.rule..timeLabels.seconds": "secondes", - "xpack.observability.threshold.rule.alertDetailsAppSection.summaryField.rule": "Règle", - "xpack.observability.threshold.rule.alertDetailsAppSection.thresholdTitle": "Seuil dépassé", - "xpack.observability.threshold.rule.alertDetailUrlActionVariableDescription": "Lien vers l’affichage de résolution des problèmes d’alerte pour voir plus de contextes et de détails. La chaîne sera vide si server.publicBaseUrl n'est pas configuré.", - "xpack.observability.threshold.rule.alertDropdownTitle": "Alertes et règles", - "xpack.observability.threshold.rule.alertFlyout.addCondition": "Ajouter une condition", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.avg": "Moyenne", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.cardinality": "Cardinalité", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.count": "Compte du document", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.max": "Max", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.min": "Min", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.p95": "95e centile", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.p99": "99e centile", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.rate": "Taux", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.sum": "Somme", - "xpack.observability.threshold.rule.alertFlyout.alertDescription": "Alerter quand un type de données Observability atteint ou dépasse une valeur donnée.", - "xpack.observability.threshold.rule.alertFlyout.alertOnGroupDisappear": "Me prévenir si un groupe cesse de signaler les données", - "xpack.observability.threshold.rule.alertFlyout.alertPerRedundantFilterError.docsLink": "les documents", - "xpack.observability.threshold.rule.alertFlyout.createAlertPerHelpText": "Créer une alerte pour chaque valeur unique. Par exemple : \"host.id\" ou \"cloud.region\".", - "xpack.observability.threshold.rule.alertFlyout.createAlertPerText": "Regrouper les alertes par (facultatif)", - "xpack.observability.threshold.rule.alertFlyout.customEquation": "Équation personnalisée", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.addCustomRow": "Ajouter une agrégation/un champ", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.deleteRowButton": "Supprimer", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.equationHelpMessage": "Prend en charge les expressions mathématiques de base", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.labelHelpMessage": "L'étiquette personnalisée s'affichera sur le graphique d'alerte et dans le titre de raison/d'alerte", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.labelLabel": "Étiquette (facultatif)", - "xpack.observability.threshold.rule.alertFlyout.docCountNoDataDisabledHelpText": "[Ce paramètre n’est pas applicable à l’agrégateur du nombre de documents.]", - "xpack.observability.threshold.rule.alertFlyout.error.aggregationRequired": "L'agrégation est requise.", - "xpack.observability.threshold.rule.alertFlyout.error.equation.invalidCharacters": "Le champ d'équation prend en charge uniquement les caractères suivants : A-Z, +, -, /, *, (, ), ?, !, &, :, |, >, <, =", - "xpack.observability.threshold.rule.alertFlyout.error.invalidFilterQuery": "La requête de filtre n'est pas valide.", - "xpack.observability.threshold.rule.alertFlyout.error.metricRequired": "L'indicateur est requis.", - "xpack.observability.threshold.rule.alertFlyout.error.thresholdRequired": "Le seuil est requis.", - "xpack.observability.threshold.rule.alertFlyout.error.thresholdTypeRequired": "Les seuils doivent contenir un nombre valide.", - "xpack.observability.threshold.rule.alertFlyout.error.timeRequred": "La taille de temps est requise.", - "xpack.observability.threshold.rule.alertFlyout.groupDisappearHelpText": "Activez cette option pour déclencher l’action si un groupe précédemment détecté cesse de signaler des résultats. Ce n’est pas recommandé pour les infrastructures à montée en charge dynamique qui peuvent rapidement lancer ou stopper des nœuds automatiquement.", - "xpack.observability.threshold.rule.alertFlyout.outsideRangeLabel": "N'est pas entre", - "xpack.observability.threshold.rule.alertFlyout.removeCondition": "Retirer la condition", - "xpack.observability.threshold.rule.alerting.noDataFormattedValue": "[AUCUNE DONNÉE]", - "xpack.observability.threshold.rule.alerting.threshold.defaultActionMessage": "\\{\\{alertName\\}\\} - \\{\\{context.group\\}\\} est à l'état \\{\\{context.alertState\\}\\}\n\n Raison :\n \\{\\{context.reason\\}\\}\n ", - "xpack.observability.threshold.rule.alerting.threshold.fired": "Alerte", - "xpack.observability.threshold.rule.alerting.threshold.nodata": "Aucune donnée", - "xpack.observability.threshold.rule.alerting.threshold.noDataFormattedValue": "[AUCUNE DONNÉE]", - "xpack.observability.threshold.rule.alertsButton": "Alertes et règles", - "xpack.observability.threshold.rule.cloudActionVariableDescription": "Objet cloud défini par ECS s'il est disponible dans la source.", - "xpack.observability.threshold.rule.containerActionVariableDescription": "Objet conteneur défini par ECS s'il est disponible dans la source.", - "xpack.observability.threshold.rule.createInventoryRuleButton": "Créer une règle d'inventaire", - "xpack.observability.threshold.rule.createThresholdRuleButton": "Créer une règle de seuil", - "xpack.observability.threshold.rule.groupByKeysActionVariableDescription": "Objet contenant les groupes qui fournissent les données", - "xpack.observability.threshold.rule.hostActionVariableDescription": "Objet hôte défini par ECS s'il est disponible dans la source.", - "xpack.observability.threshold.rule.infrastructureDropdownMenu": "Infrastructure", - "xpack.observability.threshold.rule.infrastructureDropdownTitle": "Règles d'infrastructure", - "xpack.observability.threshold.rule.labelsActionVariableDescription": "Liste d'étiquettes associées avec l'entité sur laquelle l'alerte s'est déclenchée.", - "xpack.observability.threshold.rule.manageRules": "Gérer les règles", - "xpack.observability.threshold.rule.metricsDropdownMenu": "Indicateurs", - "xpack.observability.threshold.rule.metricsDropdownTitle": "Règles d'indicateurs", - "xpack.observability.threshold.rule.orchestratorActionVariableDescription": "Objet orchestrateur défini par ECS s'il est disponible dans la source.", - "xpack.observability.threshold.rule.reasonActionVariableDescription": "Une description concise de la raison du signalement", - "xpack.observability.threshold.rule.sourceConfiguration.missingHttp": "Échec de chargement de la source : Aucun client HTTP disponible.", - "xpack.observability.threshold.rule.sourceConfiguration.updateFailureBody": "Nous n'avons pas pu appliquer les modifications à la configuration des indicateurs. Réessayez plus tard.", - "xpack.observability.threshold.rule.sourceConfiguration.updateFailureTitle": "La mise à jour de la configuration a échoué", - "xpack.observability.threshold.rule.sourceConfiguration.updateSuccessTitle": "Les paramètres d'indicateurs ont bien été mis à jour", - "xpack.observability.threshold.rule.tagsActionVariableDescription": "Liste de balises associées avec l'entité sur laquelle l'alerte s'est déclenchée.", - "xpack.observability.threshold.rule.threshold.aboveRecovery": "supérieur à", - "xpack.observability.threshold.rule.threshold.belowRecovery": "inférieur à", - "xpack.observability.threshold.rule.threshold.betweenRecovery": "entre", - "xpack.observability.threshold.rule.threshold.customEquation": "Équation personnalisée", - "xpack.observability.threshold.rule.threshold.documentCount": "Nombre de documents", - "xpack.observability.threshold.rule.timestampDescription": "Horodatage du moment où l'alerte a été détectée.", - "xpack.observability.threshold.rule.valueActionVariableDescription": "Valeur de l'indicateur dans la condition spécifiée. Utilisation : (ctx.value.condition0, ctx.value.condition1, etc...).", - "xpack.observability.threshold.rule.viewInAppUrlActionVariableDescription": "Lien vers la source de l’alerte", "xpack.observability.threshold.ruleExplorer.groupByAriaLabel": "Graphique par", "xpack.observability.threshold.ruleExplorer.groupByLabel": "Tout", "xpack.observability.threshold.ruleName": "Seuil (Version d'évaluation technique)", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 00df50d572e22..b83d747469b97 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -8287,7 +8287,6 @@ "xpack.apm.mobile.location.metrics.http.requests.title": "最も使用されている", "xpack.apm.mobile.location.metrics.launches": "最も多い起動", "xpack.apm.mobile.location.metrics.sessions": "最も多いセッション", - "xpack.apm.mobile.metrics.crash.rate": "クラッシュ率(毎分のクラッシュ数)", "xpack.apm.mobile.metrics.http.requests": "HTTPリクエスト", "xpack.apm.mobile.metrics.load.time": "最も遅いアプリ読み込み時間", "xpack.apm.mobile.metrics.sessions": "セッション", @@ -11420,13 +11419,11 @@ "xpack.csp.findings.findingsByResourceTable.postureScoreColumnLabel": "態勢スコア", "xpack.csp.findings.findingsErrorToast.searchFailedTitle": "検索失敗", "xpack.csp.findings.findingsFlyout.jsonTabTitle": "JSON", - "xpack.csp.findings.findingsFlyout.overviewTab.actualTitle": "実際", "xpack.csp.findings.findingsFlyout.overviewTab.cisSectionTitle": "CISセクション", "xpack.csp.findings.findingsFlyout.overviewTab.defaultValueTitle": "デフォルト値", "xpack.csp.findings.findingsFlyout.overviewTab.detailsTitle": "詳細", "xpack.csp.findings.findingsFlyout.overviewTab.evaluatedAtTitle": "評価日", "xpack.csp.findings.findingsFlyout.overviewTab.evidenceSourcesTitle": "証拠", - "xpack.csp.findings.findingsFlyout.overviewTab.expectedTitle": "期待値", "xpack.csp.findings.findingsFlyout.overviewTab.frameworkSourcesTitle": "フレームワークソース", "xpack.csp.findings.findingsFlyout.overviewTab.impactTitle": "インパクト", "xpack.csp.findings.findingsFlyout.overviewTab.indexTitle": "インデックス", @@ -17361,7 +17358,6 @@ "xpack.idxMgmt.dataStreamDetailPanel.generationToolTip": "データストリームに作成されたバッキングインデックスの累積数", "xpack.idxMgmt.dataStreamDetailPanel.healthTitle": "ヘルス", "xpack.idxMgmt.dataStreamDetailPanel.healthToolTip": "データストリームの現在のバッキングインデックスのヘルス", - "xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyContentNoneMessage": "なし", "xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyTitle": "インデックスライフサイクルポリシー", "xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyToolTip": "データストリームのデータを管理するインデックスライフサイクルポリシー", "xpack.idxMgmt.dataStreamDetailPanel.indexTemplateTitle": "インデックステンプレート", @@ -27128,18 +27124,6 @@ "xpack.observability.slo.update.errorNotification": "{name}の更新中にエラーが発生しました", "xpack.observability.slo.update.successNotification": "正常に{name}を更新しました", "xpack.observability.syntheticsThrottlingEnabledExperimentDescription": "シンセティック監視構成で調整設定を有効にします。設定が有効でも、モニターで調整を使用できない場合があります。内部使用専用です。{link}", - "xpack.observability.threshold.rule.alertDetailsAppSection.criterion.subtitle": "最後の{lookback} {timeLabel}", - "xpack.observability.threshold.rule.alertFlyout.alertPerRedundantFilterError": "フィルタークエリには{groupCount, plural, other {これらのフィールド}}に対する一致が含まれているため、このルールによって、想定を下回る{matchedGroups}に関するアラートが発行される場合があります。詳細については、{filteringAndGroupingLink}を参照してください。", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.aggregationLabel": "アグリゲーション{name}", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.filterLabel": "KQLフィルター{name}", - "xpack.observability.threshold.rule.alerts.dataTimeRangeLabel": "最後の{lookback} {timeLabel}", - "xpack.observability.threshold.rule.alerts.dataTimeRangeLabelWithGrouping": "{id}のデータの最後の{lookback} {timeLabel}", - "xpack.observability.threshold.rule.threshold.errorAlertReason": "{metric}のデータのクエリを試行しているときに、Elasticsearchが失敗しました", - "xpack.observability.threshold.rule.threshold.firedAlertReason": "{metric}は最後の{duration}{group}の{currentValue}です。{comparator} {threshold}のときにアラートを通知します。", - "xpack.observability.threshold.rule.threshold.noDataAlertReason": "{metric}は最後の{interval}{group}でデータがないことを報告しました", - "xpack.observability.threshold.rule.threshold.recoveredAlertReason": "{metric} が {comparator} に、{group} が {threshold} のしきい値(現在の値は {currentValue})になりました", - "xpack.observability.threshold.rule.threshold.thresholdRange": "{a}および{b}", - "xpack.observability.threshold.rule.thresholdExtraTitle": "{comparator} {threshold}のときにアラートを通知", "xpack.observability.transactionRateLabel": "{value} tpm", "xpack.observability.ux.coreVitals.averageMessage": " {bad}未満", "xpack.observability.ux.coreVitals.paletteLegend.rankPercentage": "{labelsInd}({ranksInd}%)", @@ -27586,81 +27570,6 @@ "xpack.observability.statusVisualization.ux.link": "データの追加", "xpack.observability.statusVisualization.ux.title": "ユーザーエクスペリエンス", "xpack.observability.syntheticsThrottlingEnabledExperimentName": "シンセティック調整を有効にする(実験)", - "xpack.observability.threshold.rule..charts.errorMessage": "問題が発生しました", - "xpack.observability.threshold.rule..charts.noDataMessage": "グラフデータがありません", - "xpack.observability.threshold.rule..timeLabels.days": "日", - "xpack.observability.threshold.rule..timeLabels.hours": "時間", - "xpack.observability.threshold.rule..timeLabels.minutes": "分", - "xpack.observability.threshold.rule..timeLabels.seconds": "秒", - "xpack.observability.threshold.rule.alertDetailsAppSection.summaryField.rule": "ルール", - "xpack.observability.threshold.rule.alertDetailsAppSection.thresholdTitle": "しきい値を超えました", - "xpack.observability.threshold.rule.alertDetailUrlActionVariableDescription": "アラートトラブルシューティングビューにリンクして、さらに詳しい状況や詳細を確認できます。server.publicBaseUrlが構成されていない場合は、空の文字列になります。", - "xpack.observability.threshold.rule.alertDropdownTitle": "アラートとルール", - "xpack.observability.threshold.rule.alertFlyout.addCondition": "条件を追加", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.avg": "平均", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.cardinality": "基数", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.count": "ドキュメントカウント", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.max": "最高", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.min": "最低", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.p95": "95パーセンタイル", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.p99": "99パーセンタイル", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.rate": "レート", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.sum": "合計", - "xpack.observability.threshold.rule.alertFlyout.alertDescription": "オブザーバビリティデータタイプが特定の値以上になったときにアラートを送信します。", - "xpack.observability.threshold.rule.alertFlyout.alertOnGroupDisappear": "グループがデータのレポートを停止する場合にアラートで通知する", - "xpack.observability.threshold.rule.alertFlyout.alertPerRedundantFilterError.docsLink": "ドキュメント", - "xpack.observability.threshold.rule.alertFlyout.createAlertPerHelpText": "すべての一意の値についてアラートを作成します。例:「host.id」または「cloud.region」。", - "xpack.observability.threshold.rule.alertFlyout.createAlertPerText": "アラートのグループ化条件(オプション)", - "xpack.observability.threshold.rule.alertFlyout.customEquation": "カスタム等式", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.addCustomRow": "集約/フィールドを追加", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.deleteRowButton": "削除", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.equationHelpMessage": "基本数学式をサポートします", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.labelHelpMessage": "カスタムラベルにはアラートグラフと理由/アラートタイトルに表示されます", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.labelLabel": "ラベル(任意)", - "xpack.observability.threshold.rule.alertFlyout.docCountNoDataDisabledHelpText": "[この設定は、ドキュメントカウントアグリゲーターには適用されません。]", - "xpack.observability.threshold.rule.alertFlyout.error.aggregationRequired": "集約が必要です。", - "xpack.observability.threshold.rule.alertFlyout.error.equation.invalidCharacters": "等式フィールドでは次の文字のみを使用できます:A-Z、+、-、/、*、(、)、?、!、&、:、|、>、<、=", - "xpack.observability.threshold.rule.alertFlyout.error.invalidFilterQuery": "フィルタークエリは無効です。", - "xpack.observability.threshold.rule.alertFlyout.error.metricRequired": "メトリックが必要です。", - "xpack.observability.threshold.rule.alertFlyout.error.thresholdRequired": "しきい値が必要です。", - "xpack.observability.threshold.rule.alertFlyout.error.thresholdTypeRequired": "しきい値には有効な数値を含める必要があります。", - "xpack.observability.threshold.rule.alertFlyout.error.timeRequred": "ページサイズが必要です。", - "xpack.observability.threshold.rule.alertFlyout.groupDisappearHelpText": "以前に検出されたグループが結果を報告しなくなった場合は、これを有効にすると、アクションがトリガーされます。自動的に急速にノードを開始および停止することがある動的に拡張するインフラストラクチャーでは、これは推奨されません。", - "xpack.observability.threshold.rule.alertFlyout.outsideRangeLabel": "is not between", - "xpack.observability.threshold.rule.alertFlyout.removeCondition": "条件を削除", - "xpack.observability.threshold.rule.alerting.noDataFormattedValue": "[データなし]", - "xpack.observability.threshold.rule.alerting.threshold.defaultActionMessage": "\\{\\{alertName\\}\\} - \\{\\{context.group\\}\\}は状態\\{\\{context.alertState\\}\\}です\n\n 理由:\n \\{\\{context.reason\\}\\}\n ", - "xpack.observability.threshold.rule.alerting.threshold.fired": "アラート", - "xpack.observability.threshold.rule.alerting.threshold.nodata": "データなし", - "xpack.observability.threshold.rule.alerting.threshold.noDataFormattedValue": "[データなし]", - "xpack.observability.threshold.rule.alertsButton": "アラートとルール", - "xpack.observability.threshold.rule.cloudActionVariableDescription": "ソースで使用可能な場合に、ECSで定義されたクラウドオブジェクト。", - "xpack.observability.threshold.rule.containerActionVariableDescription": "ソースで使用可能な場合に、ECSで定義されたコンテナーオブジェクト。", - "xpack.observability.threshold.rule.createInventoryRuleButton": "インベントリルールの作成", - "xpack.observability.threshold.rule.createThresholdRuleButton": "しきい値ルールを作成", - "xpack.observability.threshold.rule.groupByKeysActionVariableDescription": "データを報告しているグループを含むオブジェクト", - "xpack.observability.threshold.rule.hostActionVariableDescription": "ソースで使用可能な場合に、ECSで定義されたホストオブジェクト。", - "xpack.observability.threshold.rule.infrastructureDropdownMenu": "インフラストラクチャー", - "xpack.observability.threshold.rule.infrastructureDropdownTitle": "インフラストラクチャールール", - "xpack.observability.threshold.rule.labelsActionVariableDescription": "このアラートがトリガーされたエンティティに関連付けられたラベルのリスト。", - "xpack.observability.threshold.rule.manageRules": "ルールの管理", - "xpack.observability.threshold.rule.metricsDropdownMenu": "メトリック", - "xpack.observability.threshold.rule.metricsDropdownTitle": "メトリックルール", - "xpack.observability.threshold.rule.orchestratorActionVariableDescription": "ソースで使用可能な場合に、ECSで定義されたオーケストレーターオブジェクト。", - "xpack.observability.threshold.rule.reasonActionVariableDescription": "アラートの理由の簡潔な説明", - "xpack.observability.threshold.rule.sourceConfiguration.missingHttp": "ソースの読み込みに失敗しました:HTTPクライアントがありません。", - "xpack.observability.threshold.rule.sourceConfiguration.updateFailureBody": "変更をメトリック構成に適用できませんでした。しばらくたってから再試行してください。", - "xpack.observability.threshold.rule.sourceConfiguration.updateFailureTitle": "構成の更新が失敗しました", - "xpack.observability.threshold.rule.sourceConfiguration.updateSuccessTitle": "メトリック設定は正常に更新されました", - "xpack.observability.threshold.rule.tagsActionVariableDescription": "このアラートがトリガーされたエンティティに関連付けられたタグのリスト。", - "xpack.observability.threshold.rule.threshold.aboveRecovery": "より大", - "xpack.observability.threshold.rule.threshold.belowRecovery": "より小", - "xpack.observability.threshold.rule.threshold.betweenRecovery": "の間", - "xpack.observability.threshold.rule.threshold.customEquation": "カスタム等式", - "xpack.observability.threshold.rule.threshold.documentCount": "ドキュメントカウント", - "xpack.observability.threshold.rule.timestampDescription": "アラートが検出された時点のタイムスタンプ。", - "xpack.observability.threshold.rule.valueActionVariableDescription": "指定された条件のメトリックの値。使用方法:(ctx.value.condition0、ctx.value.condition1など)。", - "xpack.observability.threshold.rule.viewInAppUrlActionVariableDescription": "アラートソースにリンク", "xpack.observability.threshold.ruleExplorer.groupByAriaLabel": "graph/", "xpack.observability.threshold.ruleExplorer.groupByLabel": "すべて", "xpack.observability.threshold.ruleName": "しきい値(テクニカルプレビュー)", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 7c0d74cc40459..303f08601b52e 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -8286,7 +8286,6 @@ "xpack.apm.mobile.location.metrics.http.requests.title": "最常用于", "xpack.apm.mobile.location.metrics.launches": "大多数启动", "xpack.apm.mobile.location.metrics.sessions": "大多数会话", - "xpack.apm.mobile.metrics.crash.rate": "崩溃速率(每分钟崩溃数)", "xpack.apm.mobile.metrics.http.requests": "HTTP 请求", "xpack.apm.mobile.metrics.load.time": "最慢应用加载时间", "xpack.apm.mobile.metrics.sessions": "会话", @@ -11420,13 +11419,11 @@ "xpack.csp.findings.findingsByResourceTable.postureScoreColumnLabel": "态势分数", "xpack.csp.findings.findingsErrorToast.searchFailedTitle": "搜索失败", "xpack.csp.findings.findingsFlyout.jsonTabTitle": "JSON", - "xpack.csp.findings.findingsFlyout.overviewTab.actualTitle": "实际", "xpack.csp.findings.findingsFlyout.overviewTab.cisSectionTitle": "CIS 部分", "xpack.csp.findings.findingsFlyout.overviewTab.defaultValueTitle": "默认值", "xpack.csp.findings.findingsFlyout.overviewTab.detailsTitle": "详情", "xpack.csp.findings.findingsFlyout.overviewTab.evaluatedAtTitle": "评估时间", "xpack.csp.findings.findingsFlyout.overviewTab.evidenceSourcesTitle": "证据", - "xpack.csp.findings.findingsFlyout.overviewTab.expectedTitle": "预期", "xpack.csp.findings.findingsFlyout.overviewTab.frameworkSourcesTitle": "框架源", "xpack.csp.findings.findingsFlyout.overviewTab.impactTitle": "影响", "xpack.csp.findings.findingsFlyout.overviewTab.indexTitle": "索引", @@ -17361,7 +17358,6 @@ "xpack.idxMgmt.dataStreamDetailPanel.generationToolTip": "为数据流创建的后备索引的累积计数", "xpack.idxMgmt.dataStreamDetailPanel.healthTitle": "运行状况", "xpack.idxMgmt.dataStreamDetailPanel.healthToolTip": "数据流的当前后备索引的运行状况", - "xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyContentNoneMessage": "无", "xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyTitle": "索引生命周期策略", "xpack.idxMgmt.dataStreamDetailPanel.ilmPolicyToolTip": "用于管理数据流数据的索引生命周期策略", "xpack.idxMgmt.dataStreamDetailPanel.indexTemplateTitle": "索引模板", @@ -27126,18 +27122,6 @@ "xpack.observability.slo.update.errorNotification": "更新 {name} 时出现问题", "xpack.observability.slo.update.successNotification": "成功更新 {name}", "xpack.observability.syntheticsThrottlingEnabledExperimentDescription": "在 Synthetics 监测配置中启用限制设置。请注意,即使该设置处于活动状态,可能仍然无法对您的监测应用限制。仅限内部使用。{link}", - "xpack.observability.threshold.rule.alertDetailsAppSection.criterion.subtitle": "过去 {lookback} {timeLabel}", - "xpack.observability.threshold.rule.alertFlyout.alertPerRedundantFilterError": "此规则可能针对低于预期的 {matchedGroups} 告警,因为筛选查询包含{groupCount, plural, other {这些字段}}的匹配项。有关更多信息,请参阅 {filteringAndGroupingLink}。", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.aggregationLabel": "聚合 {name}", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.filterLabel": "KQL 筛选 {name}", - "xpack.observability.threshold.rule.alerts.dataTimeRangeLabel": "过去 {lookback} {timeLabel}", - "xpack.observability.threshold.rule.alerts.dataTimeRangeLabelWithGrouping": "{id} 过去 {lookback} {timeLabel}的数据", - "xpack.observability.threshold.rule.threshold.errorAlertReason": "Elasticsearch 尝试查询 {metric} 的数据时出现故障", - "xpack.observability.threshold.rule.threshold.firedAlertReason": "过去 {duration}{group},{metric} 为 {currentValue}。{comparator} {threshold} 时告警。", - "xpack.observability.threshold.rule.threshold.noDataAlertReason": "对于 {group},{metric} 在过去 {interval}中未报告数据", - "xpack.observability.threshold.rule.threshold.recoveredAlertReason": "对于 {group},{metric} 现在{comparator}阈值 {threshold}(当前值为 {currentValue})", - "xpack.observability.threshold.rule.threshold.thresholdRange": "{a} 和 {b}", - "xpack.observability.threshold.rule.thresholdExtraTitle": "{comparator} {threshold} 时告警", "xpack.observability.transactionRateLabel": "{value} tpm", "xpack.observability.ux.coreVitals.averageMessage": " 且小于 {bad}", "xpack.observability.ux.coreVitals.paletteLegend.rankPercentage": "{labelsInd} ({ranksInd}%)", @@ -27584,81 +27568,6 @@ "xpack.observability.statusVisualization.ux.link": "添加数据", "xpack.observability.statusVisualization.ux.title": "用户体验", "xpack.observability.syntheticsThrottlingEnabledExperimentName": "启用 Synthetics 限制(实验性)", - "xpack.observability.threshold.rule..charts.errorMessage": "哇哦,出问题了", - "xpack.observability.threshold.rule..charts.noDataMessage": "没有可用图表数据", - "xpack.observability.threshold.rule..timeLabels.days": "天", - "xpack.observability.threshold.rule..timeLabels.hours": "小时", - "xpack.observability.threshold.rule..timeLabels.minutes": "分钟", - "xpack.observability.threshold.rule..timeLabels.seconds": "秒", - "xpack.observability.threshold.rule.alertDetailsAppSection.summaryField.rule": "规则", - "xpack.observability.threshold.rule.alertDetailsAppSection.thresholdTitle": "超出阈值", - "xpack.observability.threshold.rule.alertDetailUrlActionVariableDescription": "链接到告警故障排除视图获取进一步的上下文和详情。如果未配置 server.publicBaseUrl,这将为空字符串。", - "xpack.observability.threshold.rule.alertDropdownTitle": "告警和规则", - "xpack.observability.threshold.rule.alertFlyout.addCondition": "添加条件", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.avg": "平均值", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.cardinality": "基数", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.count": "文档计数", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.max": "最大值", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.min": "最小值", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.p95": "第 95 个百分位", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.p99": "第 99 个百分位", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.rate": "比率", - "xpack.observability.threshold.rule.alertFlyout.aggregationText.sum": "求和", - "xpack.observability.threshold.rule.alertFlyout.alertDescription": "任何 Observability 数据类型到达或超出给定值时告警。", - "xpack.observability.threshold.rule.alertFlyout.alertOnGroupDisappear": "组停止报告数据时提醒我", - "xpack.observability.threshold.rule.alertFlyout.alertPerRedundantFilterError.docsLink": "文档", - "xpack.observability.threshold.rule.alertFlyout.createAlertPerHelpText": "为每个唯一值创建告警。例如:“host.id”或“cloud.region”。", - "xpack.observability.threshold.rule.alertFlyout.createAlertPerText": "告警分组依据(可选)", - "xpack.observability.threshold.rule.alertFlyout.customEquation": "定制方程", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.addCustomRow": "添加聚合/字段", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.deleteRowButton": "删除", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.equationHelpMessage": "支持基本匹配表达式", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.labelHelpMessage": "定制标签将在告警图表上以及原因/告警标题中显示", - "xpack.observability.threshold.rule.alertFlyout.customEquationEditor.labelLabel": "标签(可选)", - "xpack.observability.threshold.rule.alertFlyout.docCountNoDataDisabledHelpText": "[此设置不适用于文档计数聚合器。]", - "xpack.observability.threshold.rule.alertFlyout.error.aggregationRequired": "“聚合”必填。", - "xpack.observability.threshold.rule.alertFlyout.error.equation.invalidCharacters": "方程字段仅支持以下字符:A-Z、+、-、/、*、(、)、?、!、&、:、|、>、<、=", - "xpack.observability.threshold.rule.alertFlyout.error.invalidFilterQuery": "筛选查询无效。", - "xpack.observability.threshold.rule.alertFlyout.error.metricRequired": "“指标”必填。", - "xpack.observability.threshold.rule.alertFlyout.error.thresholdRequired": "“阈值”必填。", - "xpack.observability.threshold.rule.alertFlyout.error.thresholdTypeRequired": "阈值必须包含有效数字。", - "xpack.observability.threshold.rule.alertFlyout.error.timeRequred": "“时间大小”必填。", - "xpack.observability.threshold.rule.alertFlyout.groupDisappearHelpText": "启用此选项可在之前检测的组开始不报告任何数据时触发操作。不建议将此选项用于可能会快速自动启动和停止节点的动态扩展基础架构。", - "xpack.observability.threshold.rule.alertFlyout.outsideRangeLabel": "不介于", - "xpack.observability.threshold.rule.alertFlyout.removeCondition": "删除条件", - "xpack.observability.threshold.rule.alerting.noDataFormattedValue": "[无数据]", - "xpack.observability.threshold.rule.alerting.threshold.defaultActionMessage": "\\{\\{alertName\\}\\} - \\{\\{context.group\\}\\} 处于 \\{\\{context.alertState\\}\\} 状态\n\n 原因:\n \\{\\{context.reason\\}\\}\n ", - "xpack.observability.threshold.rule.alerting.threshold.fired": "告警", - "xpack.observability.threshold.rule.alerting.threshold.nodata": "无数据", - "xpack.observability.threshold.rule.alerting.threshold.noDataFormattedValue": "[无数据]", - "xpack.observability.threshold.rule.alertsButton": "告警和规则", - "xpack.observability.threshold.rule.cloudActionVariableDescription": "ECS 定义的云对象(如果在源中可用)。", - "xpack.observability.threshold.rule.containerActionVariableDescription": "ECS 定义的容器对象(如果在源中可用)。", - "xpack.observability.threshold.rule.createInventoryRuleButton": "创建库存规则", - "xpack.observability.threshold.rule.createThresholdRuleButton": "创建阈值规则", - "xpack.observability.threshold.rule.groupByKeysActionVariableDescription": "包含正报告数据的组的对象", - "xpack.observability.threshold.rule.hostActionVariableDescription": "ECS 定义的主机对象(如果在源中可用)。", - "xpack.observability.threshold.rule.infrastructureDropdownMenu": "基础设施", - "xpack.observability.threshold.rule.infrastructureDropdownTitle": "基础设施规则", - "xpack.observability.threshold.rule.labelsActionVariableDescription": "与在其上触发此告警的实体关联的标签列表。", - "xpack.observability.threshold.rule.manageRules": "管理规则", - "xpack.observability.threshold.rule.metricsDropdownMenu": "指标", - "xpack.observability.threshold.rule.metricsDropdownTitle": "指标规则", - "xpack.observability.threshold.rule.orchestratorActionVariableDescription": "ECS 定义的 Orchestrator 对象(如果在源中可用)。", - "xpack.observability.threshold.rule.reasonActionVariableDescription": "告警原因的简洁描述", - "xpack.observability.threshold.rule.sourceConfiguration.missingHttp": "无法加载源:无 HTTP 客户端可用。", - "xpack.observability.threshold.rule.sourceConfiguration.updateFailureBody": "无法对指标配置应用更改。请稍后重试。", - "xpack.observability.threshold.rule.sourceConfiguration.updateFailureTitle": "配置更新失败", - "xpack.observability.threshold.rule.sourceConfiguration.updateSuccessTitle": "已成功更新指标设置", - "xpack.observability.threshold.rule.tagsActionVariableDescription": "与在其上触发此告警的实体关联的标记列表。", - "xpack.observability.threshold.rule.threshold.aboveRecovery": "高于", - "xpack.observability.threshold.rule.threshold.belowRecovery": "低于", - "xpack.observability.threshold.rule.threshold.betweenRecovery": "介于", - "xpack.observability.threshold.rule.threshold.customEquation": "定制方程", - "xpack.observability.threshold.rule.threshold.documentCount": "文档计数", - "xpack.observability.threshold.rule.timestampDescription": "检测到告警时的时间戳。", - "xpack.observability.threshold.rule.valueActionVariableDescription": "指定条件中的指标值。用法:(ctx.value.condition0, ctx.value.condition1, 诸如此类)。", - "xpack.observability.threshold.rule.viewInAppUrlActionVariableDescription": "链接到告警源", "xpack.observability.threshold.ruleExplorer.groupByAriaLabel": "图表绘制依据", "xpack.observability.threshold.ruleExplorer.groupByLabel": "所有内容", "xpack.observability.threshold.ruleName": "阈值(技术预览)", diff --git a/x-pack/plugins/triggers_actions_ui/README.md b/x-pack/plugins/triggers_actions_ui/README.md index c65ac1eff0347..4678324fdbef4 100644 --- a/x-pack/plugins/triggers_actions_ui/README.md +++ b/x-pack/plugins/triggers_actions_ui/README.md @@ -535,10 +535,10 @@ Props definition: interface GroupByExpressionProps { groupBy: string; termSize?: number; - termField?: string; + termField?: string | string[]; errors: { [key: string]: string[] }; onChangeSelectedTermSize: (selectedTermSize?: number) => void; - onChangeSelectedTermField: (selectedTermField?: string) => void; + onChangeSelectedTermField: (selectedTermField?: string | string[]) => void; onChangeSelectedGroupBy: (selectedGroupBy?: string) => void; fields: Record; customGroupByTypes?: { @@ -555,9 +555,9 @@ interface GroupByExpressionProps { | termSize | Selected term size that will be set as the alert type property. | | termField | Selected term field that will be set as the alert type property. | | errors | List of errors with proper messages for the alert params that should be validated. In current component is validated `termSize` and `termField`. | -| onChangeSelectedTermSize | Event handler that will be excuted if selected term size is changed. | -| onChangeSelectedTermField | Event handler that will be excuted if selected term field is changed. | -| onChangeSelectedGroupBy | Event handler that will be excuted if selected group by is changed. | +| onChangeSelectedTermSize | Event handler that will be executed if selected term size is changed. | +| onChangeSelectedTermField | Event handler that will be executed if selected term field is changed. | +| onChangeSelectedGroupBy | Event handler that will be executed if selected group by is changed. | | fields | Fields list with options for the `termField` dropdown. | | customGroupByTypes | (Optional) List of group by types that replaces the default options defined in constants `x-pack/plugins/triggers_actions_ui/public/common/constants/group_by_types.ts`. | | popupPosition | (Optional) expression popup position. Default is `downLeft`. Recommend changing it for a small parent window space. | diff --git a/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.test.ts b/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.test.ts index 42278057d124c..1925954ea7bb9 100644 --- a/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.test.ts +++ b/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.test.ts @@ -247,6 +247,67 @@ describe('buildAgg', () => { }); }); + it('should create correct aggregation when condition params are defined and timeSeries is defined and multi terms selected', async () => { + expect( + buildAggregation({ + timeSeries: { + timeField: 'time-field', + timeWindowSize: 5, + timeWindowUnit: 'm', + dateStart: '2021-04-22T15:19:31Z', + dateEnd: '2021-04-22T15:20:31Z', + interval: '1m', + }, + aggType: 'count', + aggField: undefined, + termField: ['the-term', 'second-term'], + termSize: 10, + condition: { + resultLimit: 1000, + conditionScript: `params.compareValue > 1`, + }, + }) + ).toEqual({ + groupAgg: { + multi_terms: { + size: 10, + terms: [{ field: 'the-term' }, { field: 'second-term' }], + }, + aggs: { + conditionSelector: { + bucket_selector: { + buckets_path: { + compareValue: '_count', + }, + script: `params.compareValue > 1`, + }, + }, + dateAgg: { + date_range: { + field: 'time-field', + format: 'strict_date_time', + ranges: [ + { + from: '2021-04-22T15:14:31.000Z', + to: '2021-04-22T15:19:31.000Z', + }, + { + from: '2021-04-22T15:15:31.000Z', + to: '2021-04-22T15:20:31.000Z', + }, + ], + }, + }, + }, + }, + groupAggCount: { + stats_bucket: { + buckets_path: 'groupAgg._count', + }, + }, + }); + }); + it('should create correct aggregation when condition params are defined and timeSeries is undefined', async () => { expect( buildAggregation({ diff --git a/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts b/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts index 5362682e0b848..2c6ccac04c638 100644 --- a/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts +++ b/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts @@ -19,7 +19,7 @@ export interface BuildAggregationOpts { aggType: string; aggField?: string; termSize?: number; - termField?: string; + termField?: string | string[]; topHitsSize?: number; condition?: { resultLimit?: number; @@ -32,7 +32,7 @@ export const BUCKET_SELECTOR_FIELD = `params.${BUCKET_SELECTOR_PATH_NAME}`; export const DEFAULT_GROUPS = 100; export const isCountAggregation = (aggType: string) => aggType === 'count'; -export const isGroupAggregation = (termField?: string) => !!termField; +export const isGroupAggregation = (termField?: string | string[]) => !!termField; export const buildAggregation = ({ timeSeries, @@ -48,6 +48,7 @@ export const buildAggregation = ({ }; const isCountAgg = isCountAggregation(aggType); const isGroupAgg = isGroupAggregation(termField); + const isMultiTerms = Array.isArray(termField); const isDateAgg = !!timeSeries; const includeConditionInQuery = !!condition; @@ -82,10 +83,19 @@ export const buildAggregation = ({ if (isGroupAgg) { aggParent.aggs = { groupAgg: { - terms: { - field: termField, - size: terms, - }, + ...(isMultiTerms + ? { + multi_terms: { + terms: termField.map((field) => ({ field })), + size: terms, + }, + } + : { + terms: { + field: termField, + size: terms, + }, + }), }, ...(includeConditionInQuery ? { diff --git a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.test.tsx b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.test.tsx index 07c1378eee85e..a80d3ac3299cc 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.test.tsx @@ -6,146 +6,216 @@ */ import * as React from 'react'; -import { shallow } from 'enzyme'; -import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; -import { act } from 'react-dom/test-utils'; import { GroupByExpression } from './group_by_over'; -import { FormattedMessage } from '@kbn/i18n-react'; +import { render, screen, fireEvent, configure } from '@testing-library/react'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; describe('group by expression', () => { - it('renders with builtin group by types', () => { + configure({ testIdAttribute: 'data-test-subj' }); + it('renders with builtin group by types', async () => { const onChangeSelectedTermField = jest.fn(); const onChangeSelectedGroupBy = jest.fn(); const onChangeSelectedTermSize = jest.fn(); - const wrapper = shallow( - + render( + + + ); - expect(wrapper.find('[data-test-subj="overExpressionSelect"]')).toMatchInlineSnapshot(` - - `); + fireEvent.click(screen.getByTestId('groupByExpression')); + + expect(await screen.findByRole('dialog')).toBeInTheDocument(); + + expect(screen.getByRole('option', { name: 'all documents' })).toBeInTheDocument(); + expect(screen.getByRole('option', { name: 'top' })).toBeInTheDocument(); }); - it('renders with aggregation type fields', () => { + it('clears selected agg field if fields does not contain current selection', async () => { const onChangeSelectedTermField = jest.fn(); - const onChangeSelectedGroupBy = jest.fn(); - const onChangeSelectedTermSize = jest.fn(); - const wrapper = shallow( - + render( + + {}} + onChangeSelectedTermSize={() => {}} + onChangeSelectedTermField={onChangeSelectedTermField} + /> + ); + expect(onChangeSelectedTermField).toHaveBeenCalledTimes(1); + expect(onChangeSelectedTermField).toHaveBeenCalledWith(undefined); + }); - expect(wrapper.find('[data-test-subj="fieldsExpressionSelect"]')).toMatchInlineSnapshot(` - { + const onChangeSelectedTermField = jest.fn(); + render( + + {}} + onChangeSelectedTermSize={() => {}} + onChangeSelectedTermField={onChangeSelectedTermField} /> - `); + + ); + expect(onChangeSelectedTermField).toHaveBeenCalledTimes(1); + expect(onChangeSelectedTermField).toHaveBeenCalledWith(undefined); }); - it('renders with default aggreagation type preselected if no aggType was set', () => { + it('clears selected agg field if groupBy field is all', async () => { const onChangeSelectedTermField = jest.fn(); - const onChangeSelectedGroupBy = jest.fn(); - const onChangeSelectedTermSize = jest.fn(); - const wrapper = shallow( - + render( + + {}} + onChangeSelectedTermSize={() => {}} + onChangeSelectedTermField={onChangeSelectedTermField} + /> + ); - wrapper.simulate('click'); - expect(wrapper.find('[value="all"]').length > 0).toBeTruthy(); - expect( - wrapper.contains( - { + const onChangeSelectedTermField = jest.fn(); + render( + + {}} + onChangeSelectedTermSize={() => {}} + onChangeSelectedTermField={onChangeSelectedTermField} /> - ) - ).toBeTruthy(); + + ); + + expect(onChangeSelectedTermField).not.toHaveBeenCalled(); + + fireEvent.click(screen.getByTestId('groupByExpression')); + + expect(await screen.findByText(/You are in a dialog/)).toBeInTheDocument(); + + fireEvent.click(screen.getByTestId('comboBoxToggleListButton')); + + const option1 = screen.getByText('field1'); + expect(option1).toBeInTheDocument(); + fireEvent.click(option1); + expect(onChangeSelectedTermField).toHaveBeenCalledWith('field1'); + + const option2 = screen.getByText('field2'); + expect(option2).toBeInTheDocument(); + fireEvent.click(option2); + expect(onChangeSelectedTermField).toHaveBeenCalledWith('field2'); }); - it('clears selected agg field if fields does not contain current selection', async () => { + it('calls onChangeSelectedTermField when multiple termFields are selected', async () => { const onChangeSelectedTermField = jest.fn(); - const wrapper = mountWithIntl( - {}} - onChangeSelectedTermSize={() => {}} - onChangeSelectedTermField={onChangeSelectedTermField} - /> + render( + + {}} + onChangeSelectedTermSize={() => {}} + onChangeSelectedTermField={onChangeSelectedTermField} + canSelectMultiTerms={true} + /> + ); + expect(onChangeSelectedTermField).not.toHaveBeenCalled(); + + fireEvent.click(screen.getByTestId('groupByExpression')); + + expect(await screen.findByText(/You are in a dialog/)).toBeInTheDocument(); + + // dropdown is closed + expect(screen.queryByText('field1')).not.toBeInTheDocument(); + fireEvent.click(screen.getByTestId('comboBoxToggleListButton')); - await act(async () => { - await nextTick(); - wrapper.update(); - }); + // dropdown is open + expect(screen.getByText('field1')).toBeInTheDocument(); + fireEvent.click(screen.getByText('field1')); + expect(onChangeSelectedTermField).toHaveBeenCalledWith('field1'); - expect(onChangeSelectedTermField).toHaveBeenCalledWith(''); + fireEvent.click(screen.getByText('field2')); + expect(onChangeSelectedTermField).toHaveBeenCalledTimes(2); + expect(onChangeSelectedTermField).toHaveBeenCalledWith(['field1', 'field2']); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.tsx b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.tsx index 0819f7541d1cc..1a6901ffb5dec 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/common/expression_items/group_by_over.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { css } from '@emotion/react'; import { i18n } from '@kbn/i18n'; @@ -17,6 +17,8 @@ import { EuiFormRow, EuiSelect, EuiFieldNumber, + EuiComboBoxOptionOption, + EuiComboBox, } from '@elastic/eui'; import { builtInGroupByTypes } from '../constants'; import { FieldOption, GroupByType } from '../types'; @@ -24,18 +26,17 @@ import { ClosablePopoverTitle } from './components'; import { IErrorObject } from '../../types'; interface GroupByOverFieldOption { - text: string; - value: string; + label: string; } export interface GroupByExpressionProps { groupBy: string; errors: IErrorObject; onChangeSelectedTermSize: (selectedTermSize?: number) => void; - onChangeSelectedTermField: (selectedTermField?: string) => void; + onChangeSelectedTermField: (selectedTermField?: string | string[]) => void; onChangeSelectedGroupBy: (selectedGroupBy?: string) => void; fields: FieldOption[]; termSize?: number; - termField?: string; + termField?: string | string[]; customGroupByTypes?: { [key: string]: GroupByType; }; @@ -53,6 +54,7 @@ export interface GroupByExpressionProps { | 'rightUp' | 'rightDown'; display?: 'fullWidth' | 'inline'; + canSelectMultiTerms?: boolean; } export const GroupByExpression = ({ @@ -67,45 +69,55 @@ export const GroupByExpression = ({ termField, customGroupByTypes, popupPosition, + canSelectMultiTerms, }: GroupByExpressionProps) => { const groupByTypes = customGroupByTypes ?? builtInGroupByTypes; const [groupByPopoverOpen, setGroupByPopoverOpen] = useState(false); const MIN_TERM_SIZE = 1; const MAX_TERM_SIZE = 1000; - const firstFieldOption: GroupByOverFieldOption = { - text: i18n.translate( - 'xpack.triggersActionsUI.common.expressionItems.groupByType.timeFieldOptionLabel', - { - defaultMessage: 'Select a field', - } - ), - value: '', - }; - const availableFieldOptions: GroupByOverFieldOption[] = fields.reduce( - (options: GroupByOverFieldOption[], field: FieldOption) => { - if (groupByTypes[groupBy].validNormalizedTypes.includes(field.normalizedType)) { - options.push({ - text: field.name, - value: field.name, - }); - } - return options; - }, - [firstFieldOption] + const availableFieldOptions: GroupByOverFieldOption[] = useMemo( + () => + fields.reduce((options: GroupByOverFieldOption[], field: FieldOption) => { + if (groupByTypes[groupBy].validNormalizedTypes.includes(field.normalizedType)) { + options.push({ label: field.name }); + } + return options; + }, []), + [groupByTypes, fields, groupBy] ); + const initialTermFieldOptions = useMemo(() => { + let initialFields: string[] = []; + + if (!!termField) { + initialFields = Array.isArray(termField) ? termField : [termField]; + } + return initialFields.map((field: string) => ({ + label: field, + })); + }, [termField]); + + const [selectedTermsFieldsOptions, setSelectedTermsFieldsOptions] = + useState(initialTermFieldOptions); + + useEffect(() => { + if (groupBy === builtInGroupByTypes.all.value && selectedTermsFieldsOptions.length > 0) { + setSelectedTermsFieldsOptions([]); + onChangeSelectedTermField(undefined); + } + }, [selectedTermsFieldsOptions, groupBy, onChangeSelectedTermField]); + useEffect(() => { // if current field set doesn't contain selected field, clear selection - if ( - termField && - termField.length > 0 && - fields.length > 0 && - !fields.find((field: FieldOption) => field.name === termField) - ) { - onChangeSelectedTermField(''); + const hasUnknownField = selectedTermsFieldsOptions.some( + (fieldOption) => !fields.some((field) => field.name === fieldOption.label) + ); + if (hasUnknownField) { + setSelectedTermsFieldsOptions([]); + onChangeSelectedTermField(undefined); } - }, [termField, fields, onChangeSelectedTermField]); + }, [selectedTermsFieldsOptions, fields, onChangeSelectedTermField]); return ( 0))} /> } isOpen={groupByPopoverOpen} @@ -157,7 +169,7 @@ export const GroupByExpression = ({ /> - + - + 0} error={errors.termSize}> - - 0 && termField !== undefined} - error={errors.termField} - > - + 0} error={errors.termField}> + 0 && termField !== undefined} - onChange={(e) => { - onChangeSelectedTermField(e.target.value); + isInvalid={errors.termField.length > 0} + selectedOptions={selectedTermsFieldsOptions} + onChange={( + selectedOptions: Array> + ) => { + const selectedTermFields = selectedOptions.map((option) => option.label); + + const termsToSave = + Array.isArray(selectedTermFields) && selectedTermFields.length > 1 + ? selectedTermFields + : selectedTermFields[0]; + + onChangeSelectedTermField(termsToSave); + setSelectedTermsFieldsOptions(selectedOptions); }} options={availableFieldOptions} - onBlur={() => { - if (termField === undefined) { - onChangeSelectedTermField(''); - } - }} /> diff --git a/x-pack/test/alerting_api_integration/observability/threshold_rule/avg_pct_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts similarity index 90% rename from x-pack/test/alerting_api_integration/observability/threshold_rule/avg_pct_fired.ts rename to x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts index 7bb8874dafed9..8df0f20e88de7 100644 --- a/x-pack/test/alerting_api_integration/observability/threshold_rule/avg_pct_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_fired.ts @@ -6,8 +6,11 @@ */ import { cleanup, generate } from '@kbn/infra-forge'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; @@ -22,8 +25,8 @@ export default function ({ getService }: FtrProviderContext) { const esDeleteAllIndices = getService('esDeleteAllIndices'); const logger = getService('log'); - describe('Threshold rule - AVG - PCT - FIRED', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe('Custom Threshold rule - AVG - PCT - FIRED', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id'; let infraDataIndex: string; @@ -44,7 +47,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest.delete(`/api/alerting/rule/${ruleId}`).set('kbn-xsrf', 'foo'); await supertest.delete(`/api/actions/connector/${actionId}`).set('kbn-xsrf', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -131,13 +134,13 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await waitForAlertInIndex({ esClient, - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -145,14 +148,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.fired'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.fired' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', '*'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); diff --git a/x-pack/test/alerting_api_integration/observability/threshold_rule/avg_pct_no_data.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts similarity index 90% rename from x-pack/test/alerting_api_integration/observability/threshold_rule/avg_pct_no_data.ts rename to x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts index c0138d993e6bd..d57398def6381 100644 --- a/x-pack/test/alerting_api_integration/observability/threshold_rule/avg_pct_no_data.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_pct_no_data.ts @@ -5,8 +5,11 @@ * 2.0. */ -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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'; @@ -20,8 +23,8 @@ export default function ({ getService }: FtrProviderContext) { const esClient = getService('es'); const supertest = getService('supertest'); - describe('Threshold rule - AVG - PCT - NoData', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe('Custom Threshold rule - AVG - PCT - NoData', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id-no-data'; let actionId: string; @@ -40,7 +43,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest.delete(`/api/alerting/rule/${ruleId}`).set('kbn-xsrf', 'foo'); await supertest.delete(`/api/actions/connector/${actionId}`).set('kbn-xsrf', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -125,13 +128,13 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await waitForAlertInIndex({ esClient, - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -139,14 +142,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.nodata'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.nodata' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', '*'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); diff --git a/x-pack/test/alerting_api_integration/observability/threshold_rule/avg_us_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts similarity index 92% rename from x-pack/test/alerting_api_integration/observability/threshold_rule/avg_us_fired.ts rename to x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts index 1c35793e04337..b4570771b9f2f 100644 --- a/x-pack/test/alerting_api_integration/observability/threshold_rule/avg_us_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/avg_us_fired.ts @@ -8,8 +8,11 @@ import moment from 'moment'; import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; import { format } from 'url'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { FtrProviderContext } from '../../common/ftr_provider_context'; @@ -33,8 +36,8 @@ export default function ({ getService }: FtrProviderContext) { const kibanaUrl = format(kibanaServerConfig); const supertest = getService('supertest'); - describe('Threshold rule - AVG - US - FIRED', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe('Custom Threshold rule - AVG - US - FIRED', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id'; @@ -60,7 +63,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest.delete(`/api/actions/connector/${actionId}`).set('kbn-xsrf', 'foo'); await esDeleteAllIndices([ALERT_ACTION_INDEX]); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -149,7 +152,7 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await waitForAlertInIndex({ esClient, - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; @@ -157,7 +160,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -165,14 +168,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.fired'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.fired' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', '*'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); @@ -210,7 +216,7 @@ export default function ({ getService }: FtrProviderContext) { indexName: ALERT_ACTION_INDEX, }); - expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.threshold'); + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( `https://localhost:5601/app/observability/alerts?_a=(kuery:%27kibana.alert.uuid:%20%22${alertId}%22%27%2CrangeFrom:%27${rangeFrom}%27%2CrangeTo:now%2Cstatus:all)` ); diff --git a/x-pack/test/alerting_api_integration/observability/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 similarity index 91% rename from x-pack/test/alerting_api_integration/observability/threshold_rule/custom_eq_avg_bytes_fired.ts rename to x-pack/test/alerting_api_integration/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index 794902f19688f..8499511391ab6 100644 --- a/x-pack/test/alerting_api_integration/observability/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 @@ -12,8 +12,11 @@ */ import { cleanup, generate } from '@kbn/infra-forge'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; @@ -28,8 +31,8 @@ export default function ({ getService }: FtrProviderContext) { const esDeleteAllIndices = getService('esDeleteAllIndices'); const logger = getService('log'); - describe('Threshold rule - CUSTOM_EQ - AVG - BYTES - FIRED', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe('Custom Threshold rule - CUSTOM_EQ - AVG - BYTES - FIRED', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id'; let infraDataIndex: string; @@ -50,7 +53,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest.delete(`/api/alerting/rule/${ruleId}`).set('kbn-xsrf', 'foo'); await supertest.delete(`/api/actions/connector/${actionId}`).set('kbn-xsrf', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -139,13 +142,13 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await waitForAlertInIndex({ esClient, - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -153,14 +156,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.fired'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.fired' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', '*'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); diff --git a/x-pack/test/alerting_api_integration/observability/threshold_rule/documents_count_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts similarity index 90% rename from x-pack/test/alerting_api_integration/observability/threshold_rule/documents_count_fired.ts rename to x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts index 3361f4a04e185..99f313960fa6b 100644 --- a/x-pack/test/alerting_api_integration/observability/threshold_rule/documents_count_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts @@ -6,8 +6,11 @@ */ import { cleanup, generate } from '@kbn/infra-forge'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; @@ -22,8 +25,8 @@ export default function ({ getService }: FtrProviderContext) { const esDeleteAllIndices = getService('esDeleteAllIndices'); const logger = getService('log'); - describe('Threshold rule - DOCUMENTS_COUNT - FIRED', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe('Custom Threshold rule - DOCUMENTS_COUNT - FIRED', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id'; let infraDataIndex: string; @@ -44,7 +47,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest.delete(`/api/alerting/rule/${ruleId}`).set('kbn-xsrf', 'foo'); await supertest.delete(`/api/actions/connector/${actionId}`).set('kbn-xsrf', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -129,13 +132,13 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await waitForAlertInIndex({ esClient, - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -143,14 +146,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.fired'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.fired' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', '*'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); diff --git a/x-pack/test/alerting_api_integration/observability/threshold_rule/group_by_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts similarity index 92% rename from x-pack/test/alerting_api_integration/observability/threshold_rule/group_by_fired.ts rename to x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts index 9d3e5e2bd17ad..5925907b471b6 100644 --- a/x-pack/test/alerting_api_integration/observability/threshold_rule/group_by_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/group_by_fired.ts @@ -13,8 +13,11 @@ import moment from 'moment'; import { cleanup, generate } from '@kbn/infra-forge'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { createIndexConnector, createRule } from '../helpers/alerting_api_helper'; @@ -35,8 +38,8 @@ export default function ({ getService }: FtrProviderContext) { let alertId: string; let startedAt: string; - describe('Threshold rule - GROUP_BY - FIRED', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe('Custom Threshold rule - GROUP_BY - FIRED', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id'; let infraDataIndex: string; @@ -57,7 +60,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest.delete(`/api/alerting/rule/${ruleId}`).set('kbn-xsrf', 'foo'); await supertest.delete(`/api/actions/connector/${actionId}`).set('kbn-xsrf', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -149,7 +152,7 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await waitForAlertInIndex({ esClient, - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; @@ -157,7 +160,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -165,14 +168,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.fired'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.fired' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', 'host-0'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); @@ -220,7 +226,7 @@ export default function ({ getService }: FtrProviderContext) { indexName: ALERT_ACTION_INDEX, }); - expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.threshold'); + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( `https://localhost:5601/app/observability/alerts?_a=(kuery:%27kibana.alert.uuid:%20%22${alertId}%22%27%2CrangeFrom:%27${rangeFrom}%27%2CrangeTo:now%2Cstatus:all)` ); diff --git a/x-pack/test/alerting_api_integration/observability/threshold_rule_data_view.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule_data_view.ts similarity index 96% rename from x-pack/test/alerting_api_integration/observability/threshold_rule_data_view.ts rename to x-pack/test/alerting_api_integration/observability/custom_threshold_rule_data_view.ts index f4d26f961c234..3119a0ae46e63 100644 --- a/x-pack/test/alerting_api_integration/observability/threshold_rule_data_view.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule_data_view.ts @@ -6,7 +6,10 @@ */ import expect from '@kbn/expect'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; +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 { FtrProviderContext } from '../common/ftr_provider_context'; @@ -20,7 +23,7 @@ export default function ({ getService }: FtrProviderContext) { const objectRemover = new ObjectRemover(supertest); const es = getService('es'); - describe('Threshold rule data view >', () => { + describe('Custom Threshold rule data view >', () => { const DATA_VIEW_ID = 'data-view-id'; let ruleId: string; diff --git a/x-pack/test/alerting_api_integration/observability/helpers/alerting_api_helper.ts b/x-pack/test/alerting_api_integration/observability/helpers/alerting_api_helper.ts index a50e1b4e85c14..4bde235e97dd2 100644 --- a/x-pack/test/alerting_api_integration/observability/helpers/alerting_api_helper.ts +++ b/x-pack/test/alerting_api_integration/observability/helpers/alerting_api_helper.ts @@ -6,7 +6,7 @@ */ import { MetricThresholdParams } from '@kbn/infra-plugin/common/alerting/metrics'; -import { ThresholdParams } from '@kbn/observability-plugin/common/threshold_rule/types'; +import { ThresholdParams } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import type { SuperTest, Test } from 'supertest'; export async function createIndexConnector({ diff --git a/x-pack/test/alerting_api_integration/observability/index.ts b/x-pack/test/alerting_api_integration/observability/index.ts index 7bc5a5caab0b2..884c17d2abfd1 100644 --- a/x-pack/test/alerting_api_integration/observability/index.ts +++ b/x-pack/test/alerting_api_integration/observability/index.ts @@ -10,13 +10,13 @@ export default function ({ loadTestFile }: any) { describe('Observability Rules', () => { describe('Rules Endpoints', () => { loadTestFile(require.resolve('./metric_threshold_rule')); - loadTestFile(require.resolve('./threshold_rule/avg_pct_fired')); - loadTestFile(require.resolve('./threshold_rule/avg_pct_no_data')); - loadTestFile(require.resolve('./threshold_rule/avg_us_fired')); - loadTestFile(require.resolve('./threshold_rule/custom_eq_avg_bytes_fired')); - loadTestFile(require.resolve('./threshold_rule/documents_count_fired')); - loadTestFile(require.resolve('./threshold_rule/group_by_fired')); - loadTestFile(require.resolve('./threshold_rule_data_view')); + loadTestFile(require.resolve('./custom_threshold_rule/avg_pct_fired')); + loadTestFile(require.resolve('./custom_threshold_rule/avg_pct_no_data')); + loadTestFile(require.resolve('./custom_threshold_rule/avg_us_fired')); + loadTestFile(require.resolve('./custom_threshold_rule/custom_eq_avg_bytes_fired')); + loadTestFile(require.resolve('./custom_threshold_rule/documents_count_fired')); + loadTestFile(require.resolve('./custom_threshold_rule/group_by_fired')); + loadTestFile(require.resolve('./custom_threshold_rule_data_view')); }); describe('Synthetics', () => { loadTestFile(require.resolve('./synthetics_rule')); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group3/builtin_alert_types/es_query/rule.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group3/builtin_alert_types/es_query/rule.ts index c0b9113fa6143..25ca53c52e429 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group3/builtin_alert_types/es_query/rule.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group3/builtin_alert_types/es_query/rule.ts @@ -368,6 +368,75 @@ export default function ruleTests({ getService }: FtrProviderContext) { }) ); + [ + [ + 'esQuery', + async () => { + await createRule({ + name: 'always fire', + esQuery: `{\n \"query\":{\n \"match_all\" : {}\n }\n}`, + size: 100, + thresholdComparator: '>', + threshold: [-1], + groupBy: 'top', + termField: ['group', 'testedValue'], + termSize: 2, + }); + }, + ] as const, + [ + 'searchSource', + async () => { + const esTestDataView = await indexPatterns.create( + { title: ES_TEST_INDEX_NAME, timeFieldName: 'date' }, + { override: true }, + getUrlPrefix(Spaces.space1.id) + ); + await createRule({ + name: 'always fire', + size: 100, + thresholdComparator: '>', + threshold: [-1], + searchType: 'searchSource', + searchConfiguration: { + query: { + query: '', + language: 'kuery', + }, + index: esTestDataView.id, + filter: [], + }, + groupBy: 'top', + termField: ['group', 'testedValue'], + termSize: 2, + }); + }, + ] as const, + ].forEach(([searchType, initData]) => + it(`runs correctly: threshold on grouped with multi term hit count < > for ${searchType} search type`, async () => { + // write documents from now to the future end date in groups + await createGroupedEsDocumentsInGroups(ES_GROUPS_TO_WRITE, endDate); + await initData(); + + const docs = await waitForDocs(2); + for (let i = 0; i < docs.length; i++) { + const doc = docs[i]; + const { previousTimestamp, hits } = doc._source; + const { name, title, message } = doc._source.params; + + expect(name).to.be('always fire'); + const titlePattern = /rule 'always fire' matched query for group group-\d/; + expect(title).to.match(titlePattern); + const messagePattern = + /rule 'always fire' is active:\n\n- Value: \d+\n- Conditions Met: Number of matching documents for group \"group-\d,\d{1,2}\" is greater than -1 over 20s\n- Timestamp: \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/; + expect(message).to.match(messagePattern); + expect(hits).not.to.be.empty(); + + expect(previousTimestamp).to.be.empty(); + } + }) + ); + [ [ 'esQuery', @@ -1044,7 +1113,7 @@ export default function ruleTests({ getService }: FtrProviderContext) { aggType?: string; aggField?: string; groupBy?: string; - termField?: string; + termField?: string | string[]; termSize?: number; } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/check_registered_rule_types.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/check_registered_rule_types.ts index 40197f1e18783..e748478b18432 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/check_registered_rule_types.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/check_registered_rule_types.ts @@ -63,7 +63,7 @@ export default function createRegisteredRuleTypeTests({ getService }: FtrProvide 'monitoring_alert_elasticsearch_version_mismatch', 'monitoring_ccr_read_exceptions', 'monitoring_shard_size', - 'observability.rules.threshold', + 'observability.rules.custom_threshold', 'apm.transaction_duration', 'apm.anomaly', 'apm.error_rate', diff --git a/x-pack/test/api_integration/apis/management/index_management/data_streams.ts b/x-pack/test/api_integration/apis/management/index_management/data_streams.ts index 0117204343285..520396ad46283 100644 --- a/x-pack/test/api_integration/apis/management/index_management/data_streams.ts +++ b/x-pack/test/api_integration/apis/management/index_management/data_streams.ts @@ -112,6 +112,9 @@ export default function ({ getService }: FtrProviderContext) { expect(testDataStream).to.eql({ name: testDataStreamName, + lifecycle: { + enabled: true, + }, privileges: { delete_index: true, }, @@ -166,6 +169,9 @@ export default function ({ getService }: FtrProviderContext) { indexTemplateName: testDataStreamName, maxTimeStamp: 0, hidden: false, + lifecycle: { + enabled: true, + }, }); }); @@ -197,6 +203,9 @@ export default function ({ getService }: FtrProviderContext) { indexTemplateName: testDataStreamName, maxTimeStamp: 0, hidden: false, + lifecycle: { + enabled: true, + }, }); }); }); diff --git a/x-pack/test/api_integration/apis/management/ingest_pipelines/lib/api.ts b/x-pack/test/api_integration/apis/management/ingest_pipelines/lib/api.ts index 1e185b88b7587..04d157e79fe65 100644 --- a/x-pack/test/api_integration/apis/management/ingest_pipelines/lib/api.ts +++ b/x-pack/test/api_integration/apis/management/ingest_pipelines/lib/api.ts @@ -55,8 +55,14 @@ export function IngestPipelinesAPIProvider({ getService }: FtrProviderContext) { }, async createIndex(index: { index: string; id: string; body: object }) { - log.debug(`Creating index: '${index.index}'`); + const indexExists = await es.indices.exists({ index: index.index }); + + // Index should not exist, but in the case that it already does, we bypass the create request + if (indexExists) { + return; + } + log.debug(`Creating index: '${index.index}'`); return await es.index(index); }, diff --git a/x-pack/test/apm_api_integration/tests/mobile/mobile_location_stats.spec.ts b/x-pack/test/apm_api_integration/tests/mobile/mobile_location_stats.spec.ts index 447aebf727767..94193f2946ece 100644 --- a/x-pack/test/apm_api_integration/tests/mobile/mobile_location_stats.spec.ts +++ b/x-pack/test/apm_api_integration/tests/mobile/mobile_location_stats.spec.ts @@ -219,6 +219,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(response.currentPeriod.mostRequests.timeseries.every((item) => item.y === 0)).to.eql( true ); + expect(response.currentPeriod.mostCrashes.timeseries.every((item) => item.y === 0)).to.eql( + true + ); }); }); }); @@ -253,6 +256,11 @@ export default function ApiTest({ getService }: FtrProviderContext) { const { location } = response.currentPeriod.mostRequests; expect(location).to.be('China'); }); + + it('returns location for most crashes', () => { + const { location } = response.currentPeriod.mostCrashes; + expect(location).to.be('China'); + }); }); describe('when filters are applied', () => { @@ -265,6 +273,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(response.currentPeriod.mostSessions.value).to.eql(0); expect(response.currentPeriod.mostRequests.value).to.eql(0); + expect(response.currentPeriod.mostCrashes.value).to.eql(0); expect(response.currentPeriod.mostSessions.timeseries.every((item) => item.y === 0)).to.eql( true @@ -272,6 +281,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(response.currentPeriod.mostRequests.timeseries.every((item) => item.y === 0)).to.eql( true ); + expect(response.currentPeriod.mostCrashes.timeseries.every((item) => item.y === 0)).to.eql( + true + ); }); it('returns the correct values when single filter is applied', async () => { @@ -283,6 +295,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(response.currentPeriod.mostSessions.value).to.eql(3); expect(response.currentPeriod.mostRequests.value).to.eql(3); + expect(response.currentPeriod.mostCrashes.value).to.eql(3); }); it('returns the correct values when multiple filters are applied', async () => { @@ -293,6 +306,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(response.currentPeriod.mostSessions.value).to.eql(3); expect(response.currentPeriod.mostRequests.value).to.eql(3); + expect(response.currentPeriod.mostCrashes.value).to.eql(3); }); }); }); diff --git a/x-pack/test/apm_api_integration/tests/mobile/mobile_stats.spec.ts b/x-pack/test/apm_api_integration/tests/mobile/mobile_stats.spec.ts index 477d5456315cf..edc852d97ad2a 100644 --- a/x-pack/test/apm_api_integration/tests/mobile/mobile_stats.spec.ts +++ b/x-pack/test/apm_api_integration/tests/mobile/mobile_stats.spec.ts @@ -10,7 +10,7 @@ import { apm, timerange } from '@kbn/apm-synthtrace-client'; import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; import { APIReturnType } from '@kbn/apm-plugin/public/services/rest/create_call_apm_api'; import { ENVIRONMENT_ALL } from '@kbn/apm-plugin/common/environment_filter_values'; -import { sumBy } from 'lodash'; +import { sumBy, meanBy } from 'lodash'; import { FtrProviderContext } from '../../common/ftr_provider_context'; type MobileStats = APIReturnType<'GET /internal/apm/mobile-services/{serviceName}/stats'>; @@ -103,7 +103,7 @@ async function generateData({ return [ galaxy10 .transaction('Start View - View Appearing', 'Android Activity') - .errors(galaxy10.crash({ message: 'error' }).timestamp(timestamp)) + .errors(galaxy10.crash({ message: 'error C' }).timestamp(timestamp)) .timestamp(timestamp) .duration(500) .success() @@ -120,7 +120,11 @@ async function generateData({ ), huaweiP2 .transaction('Start View - View Appearing', 'huaweiP2 Activity') - .errors(huaweiP2.crash({ message: 'error' }).timestamp(timestamp)) + .errors( + huaweiP2.crash({ message: 'error A' }).timestamp(timestamp), + huaweiP2.crash({ message: 'error B' }).timestamp(timestamp), + huaweiP2.crash({ message: 'error D' }).timestamp(timestamp) + ) .timestamp(timestamp) .duration(20) .success(), @@ -211,6 +215,15 @@ export default function ApiTest({ getService }: FtrProviderContext) { const timeseriesTotal = sumBy(timeseries, 'y'); expect(value).to.be(timeseriesTotal); }); + + it('returns same crashes', () => { + const { value, timeseries } = response.currentPeriod.crashRate; + const timeseriesMean = meanBy( + timeseries.filter((bucket) => bucket.y !== 0), + 'y' + ); + expect(value).to.be(timeseriesMean); + }); }); describe('when filters are applied', () => { @@ -223,6 +236,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(response.currentPeriod.sessions.value).to.eql(0); expect(response.currentPeriod.requests.value).to.eql(0); + expect(response.currentPeriod.crashRate.value).to.eql(0); expect(response.currentPeriod.sessions.timeseries.every((item) => item.y === 0)).to.eql( true @@ -230,6 +244,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(response.currentPeriod.requests.timeseries.every((item) => item.y === 0)).to.eql( true ); + expect(response.currentPeriod.crashRate.timeseries.every((item) => item.y === 0)).to.eql( + true + ); }); it('returns the correct values when single filter is applied', async () => { @@ -241,6 +258,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(response.currentPeriod.sessions.value).to.eql(3); expect(response.currentPeriod.requests.value).to.eql(0); + expect(response.currentPeriod.crashRate.value).to.eql(3); }); it('returns the correct values when multiple filters are applied', async () => { @@ -248,9 +266,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { serviceName: 'synth-android', kuery: `service.version:"1.2" and service.environment: "production"`, }); - expect(response.currentPeriod.sessions.value).to.eql(3); expect(response.currentPeriod.requests.value).to.eql(3); + expect(response.currentPeriod.crashRate.value).to.eql(1); }); }); }); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/check_privileges.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/check_privileges.ts index 5fb1f0d87a585..3a016fe68618d 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/check_privileges.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/check_privileges.ts @@ -82,7 +82,7 @@ export default ({ getService }: FtrProviderContext) => { // TODO: https://github.com/elastic/kibana/pull/121644 clean up, make type-safe expect(body?.execution_summary?.last_execution.message).to.eql( - `This rule may not have the required read privileges to the following indices/index patterns: ["${index[0]}"]` + `This rule may not have the required read privileges to the following index patterns: ["${index[0]}"]` ); await deleteUserAndRole(getService, ROLES.detections_admin); @@ -121,7 +121,7 @@ export default ({ getService }: FtrProviderContext) => { // TODO: https://github.com/elastic/kibana/pull/121644 clean up, make type-safe expect(body?.execution_summary?.last_execution.message).to.eql( - `This rule may not have the required read privileges to the following indices/index patterns: ["${index[0]}"]` + `This rule may not have the required read privileges to the following index patterns: ["${index[0]}"]` ); await deleteUserAndRole(getService, ROLES.detections_admin); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/create_rules.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/create_rules.ts index d8fc2ec1439be..7df1ae742640f 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/create_rules.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/create_rules.ts @@ -165,7 +165,7 @@ export default ({ getService }: FtrProviderContext) => { // TODO: https://github.com/elastic/kibana/pull/121644 clean up, make type-safe expect(rule?.execution_summary?.last_execution.status).to.eql('partial failure'); expect(rule?.execution_summary?.last_execution.message).to.eql( - 'This rule is attempting to query data from Elasticsearch indices listed in the "Index pattern" section of the rule definition, however no index matching: ["does-not-exist-*"] was found. This warning will continue to appear until a matching index is created or this rule is disabled.' + 'This rule is attempting to query data from Elasticsearch indices listed in the "Index patterns" section of the rule definition, however no index matching: ["does-not-exist-*"] was found. This warning will continue to appear until a matching index is created or this rule is disabled.' ); }); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/get_rule_execution_results.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/get_rule_execution_results.ts index b7cca9fd005df..acb8043ab3a25 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/get_rule_execution_results.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/get_rule_execution_results.ts @@ -126,7 +126,7 @@ export default ({ getService }: FtrProviderContext) => { expect(response.body.events[0].security_status).to.eql('partial failure'); expect( response.body.events[0].security_message.startsWith( - 'This rule is attempting to query data from Elasticsearch indices listed in the "Index pattern" section of the rule definition, however no index matching: ["no-name-index"] was found.' + 'This rule is attempting to query data from Elasticsearch indices listed in the "Index patterns" section of the rule definition, however no index matching: ["no-name-index"] was found.' ) ).to.eql(true); }); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group8/exception_operators_data_types/keyword_array.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group8/exception_operators_data_types/keyword_array.ts index 7d95f6c9ec6bc..ff3611b4ab583 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group8/exception_operators_data_types/keyword_array.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group8/exception_operators_data_types/keyword_array.ts @@ -154,8 +154,7 @@ export default ({ getService }: FtrProviderContext) => { await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsOpen = await getSignalsById(supertest, log, id); const hits = signalsOpen.hits.hits.map((hit) => hit._source?.keyword).sort(); - // @ts-expect-error ts upgrade v4.7.4 - expect(hits.flat(Number.MAX_SAFE_INTEGER)).to.eql([]); + expect(hits.flat(10)).to.eql([]); }); }); @@ -283,7 +282,7 @@ export default ({ getService }: FtrProviderContext) => { await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsOpen = await getSignalsById(supertest, log, id); const hits = signalsOpen.hits.hits.map((hit) => hit._source?.keyword).sort(); - expect(hits.flat(Number.MAX_SAFE_INTEGER)).to.eql([]); + expect(hits.flat(10)).to.eql([]); }); }); @@ -345,7 +344,7 @@ export default ({ getService }: FtrProviderContext) => { await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsOpen = await getSignalsById(supertest, log, id); const hits = signalsOpen.hits.hits.map((hit) => hit._source?.keyword).sort(); - expect(hits.flat(Number.MAX_SAFE_INTEGER)).to.eql([]); + expect(hits.flat(10)).to.eql([]); }); }); @@ -525,7 +524,7 @@ export default ({ getService }: FtrProviderContext) => { await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsOpen = await getSignalsById(supertest, log, id); const hits = signalsOpen.hits.hits.map((hit) => hit._source?.keyword).sort(); - expect(hits.flat(Number.MAX_SAFE_INTEGER)).to.eql([]); + expect(hits.flat(10)).to.eql([]); }); }); @@ -695,7 +694,7 @@ export default ({ getService }: FtrProviderContext) => { await waitForSignalsToBePresent(supertest, log, 1, [id]); const signalsOpen = await getSignalsById(supertest, log, id); const hits = signalsOpen.hits.hits.map((hit) => hit._source?.keyword).sort(); - expect(hits.flat(Number.MAX_SAFE_INTEGER)).to.eql([]); + expect(hits.flat(10)).to.eql([]); }); }); diff --git a/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts b/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts index 7cc75446036e9..5deaac7e3a579 100644 --- a/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts +++ b/x-pack/test/functional/apps/dashboard/group1/feature_controls/dashboard_security.ts @@ -183,13 +183,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it(`allows a visualization to be edited`, async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardEditMode('A Dashboard'); await panelActions.expectExistsEditPanelAction(); }); it(`allows a map to be edited`, async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardEditMode('dashboard with map'); await panelActions.expectExistsEditPanelAction(); }); diff --git a/x-pack/test/functional/apps/dashboard/group1/feature_controls/time_to_visualize_security.ts b/x-pack/test/functional/apps/dashboard/group1/feature_controls/time_to_visualize_security.ts index 1ed0e1535a828..7b36b19c32da8 100644 --- a/x-pack/test/functional/apps/dashboard/group1/feature_controls/time_to_visualize_security.ts +++ b/x-pack/test/functional/apps/dashboard/group1/feature_controls/time_to_visualize_security.ts @@ -88,7 +88,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('lens by value works without library save permissions', () => { before(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); }); @@ -169,13 +169,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const modifiedMarkdownText = 'Modified markdown text'; before(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); }); it('can add a markdown panel by value', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.waitForRenderComplete(); diff --git a/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts b/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts index 608d29a6b7abb..baab3bbeb52f7 100644 --- a/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts +++ b/x-pack/test/functional/apps/dashboard/group1/preserve_url.ts @@ -35,7 +35,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('goes back to last opened url', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('A Dashboard'); await PageObjects.common.navigateToApp('home'); await appsMenu.clickLink('Dashboard', { category: 'kibana' }); @@ -47,7 +47,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('remembers url after switching spaces', async function () { // default space - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('A Dashboard'); await PageObjects.spaceSelector.openSpacesNav(); diff --git a/x-pack/test/functional/apps/dashboard/group2/_async_dashboard.ts b/x-pack/test/functional/apps/dashboard/group2/_async_dashboard.ts index bf76152a459c4..66b31842df00a 100644 --- a/x-pack/test/functional/apps/dashboard/group2/_async_dashboard.ts +++ b/x-pack/test/functional/apps/dashboard/group2/_async_dashboard.ts @@ -128,7 +128,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should launch sample flights data set dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('[Flights] Global Flight Dashboard'); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.timePicker.setCommonlyUsedTime('sample_data range'); diff --git a/x-pack/test/functional/apps/dashboard/group2/dashboard_lens_by_value.ts b/x-pack/test/functional/apps/dashboard/group2/dashboard_lens_by_value.ts index 2604b942f7313..423c9819a048f 100644 --- a/x-pack/test/functional/apps/dashboard/group2/dashboard_lens_by_value.ts +++ b/x-pack/test/functional/apps/dashboard/group2/dashboard_lens_by_value.ts @@ -22,7 +22,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); }); diff --git a/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts b/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts index 5503d1a08dc4e..1d898940a0bf3 100644 --- a/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts +++ b/x-pack/test/functional/apps/dashboard/group2/dashboard_maps_by_value.ts @@ -73,7 +73,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { } async function createNewDashboard() { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); } diff --git a/x-pack/test/functional/apps/dashboard/group2/dashboard_search_by_value.ts b/x-pack/test/functional/apps/dashboard/group2/dashboard_search_by_value.ts index beb87afce4549..92cc910313615 100644 --- a/x-pack/test/functional/apps/dashboard/group2/dashboard_search_by_value.ts +++ b/x-pack/test/functional/apps/dashboard/group2/dashboard_search_by_value.ts @@ -41,7 +41,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await filterBar.ensureFieldEditorModalIsClosed(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/controls_migration_smoke_test.ts b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/controls_migration_smoke_test.ts index d36d2b579ae62..f2c8d67d16b7e 100644 --- a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/controls_migration_smoke_test.ts +++ b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/controls_migration_smoke_test.ts @@ -23,8 +23,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const queryBar = getService('queryBar'); - const { common, settings, savedObjects, dashboard, dashboardControls } = getPageObjects([ - 'common', + const { settings, savedObjects, dashboard, dashboardControls } = getPageObjects([ 'settings', 'dashboard', 'savedObjects', @@ -57,7 +56,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('should render all panels on the dashboard', async () => { await dashboardControls.enableControlsLab(); - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.loadSavedDashboard('[8.0.0] Controls Dashboard'); // dashboard should load properly diff --git a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/lens_migration_smoke_test.ts b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/lens_migration_smoke_test.ts index 024c045c4ff87..0dc6f36662952 100644 --- a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/lens_migration_smoke_test.ts +++ b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/lens_migration_smoke_test.ts @@ -46,7 +46,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render all panels on the dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('[7.12.1] Lens By Value Test Dashboard'); // dashboard should load properly diff --git a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/tsvb_migration_smoke_test.ts b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/tsvb_migration_smoke_test.ts index 8485f85dd35a0..c6d947337da21 100644 --- a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/tsvb_migration_smoke_test.ts +++ b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/tsvb_migration_smoke_test.ts @@ -36,7 +36,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render all panels on the dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('TSVB Index Pattern Smoke Test'); // dashboard should load properly @@ -101,7 +101,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render all panels on the dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('TSVB 7.13.3'); // dashboard should load properly diff --git a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/visualize_migration_smoke_test.ts b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/visualize_migration_smoke_test.ts index 4824fcb421828..6f8a387d276a0 100644 --- a/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/visualize_migration_smoke_test.ts +++ b/x-pack/test/functional/apps/dashboard/group2/migration_smoke_tests/visualize_migration_smoke_test.ts @@ -46,7 +46,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should render all panels on the dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('[7.12.1] Visualize Test Dashboard'); // dashboard should load properly diff --git a/x-pack/test/functional/apps/dashboard/group2/panel_time_range.ts b/x-pack/test/functional/apps/dashboard/group2/panel_time_range.ts index 2295c90d60c65..bbf5877f80327 100644 --- a/x-pack/test/functional/apps/dashboard/group2/panel_time_range.ts +++ b/x-pack/test/functional/apps/dashboard/group2/panel_time_range.ts @@ -34,7 +34,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.saveDashboard(DASHBOARD_NAME); diff --git a/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts b/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts index 14970ba7764ab..2c0ac33107fea 100644 --- a/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts +++ b/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts @@ -36,7 +36,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.importExport.load( 'x-pack/test/functional/fixtures/kbn_archiver/lens/lens_basic.json' ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.saveDashboard(DASHBOARD_NAME); diff --git a/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts b/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts index 2692c40af0adf..5d1f590490c4d 100644 --- a/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts +++ b/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts @@ -52,7 +52,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should sync colors on dashboard by default', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await elasticChart.setNewChartUiDebugFlag(true); await PageObjects.dashboard.clickCreateDashboardPrompt(); await dashboardAddPanel.clickCreateNewLink(); diff --git a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts index e7afd4f9761da..deb5195040800 100644 --- a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts +++ b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts @@ -129,7 +129,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { log.debug('Dashboard Drilldowns:initTests'); await security.testUser.setRoles(['test_logstash_reader', 'global_dashboard_all']); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await elasticChart.setNewChartUiDebugFlag(); @@ -399,7 +399,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Actually use copied dashboards in a new space: - await PageObjects.common.navigateToApp('dashboard', { + await PageObjects.common.navigateToApp('dashboards', { basePath: `/s/${destinationSpaceId}`, }); await PageObjects.dashboard.preserveCrossAppState(); diff --git a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts index ca057b7421b7c..24e9a249377fa 100644 --- a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts +++ b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts @@ -22,7 +22,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Dashboard to URL drilldown', function () { before(async () => { log.debug('Dashboard to URL:initTests'); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); }); diff --git a/x-pack/test/functional/apps/dashboard/group3/drilldowns/explore_data_chart_action.ts b/x-pack/test/functional/apps/dashboard/group3/drilldowns/explore_data_chart_action.ts index 6e91362e4adfd..dff41ef2ead73 100644 --- a/x-pack/test/functional/apps/dashboard/group3/drilldowns/explore_data_chart_action.ts +++ b/x-pack/test/functional/apps/dashboard/group3/drilldowns/explore_data_chart_action.ts @@ -28,7 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('Explore underlying data - chart action', () => { describe('value click action', () => { it('action exists in chart click popup menu', async () => { - await common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await dashboard.preserveCrossAppState(); await dashboard.loadSavedDashboard(drilldowns.DASHBOARD_WITH_PIE_CHART_NAME); await pieChart.clickOnPieSlice('160,000'); @@ -60,7 +60,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { let originalTimeRangeDurationHours: number | undefined; it('action exists in chart brush popup menu', async () => { - await common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await dashboard.preserveCrossAppState(); await dashboard.loadSavedDashboard(drilldowns.DASHBOARD_WITH_AREA_CHART_NAME); diff --git a/x-pack/test/functional/apps/dashboard/group3/drilldowns/explore_data_panel_action.ts b/x-pack/test/functional/apps/dashboard/group3/drilldowns/explore_data_panel_action.ts index 8e943c2b3104d..ed504f3711565 100644 --- a/x-pack/test/functional/apps/dashboard/group3/drilldowns/explore_data_panel_action.ts +++ b/x-pack/test/functional/apps/dashboard/group3/drilldowns/explore_data_panel_action.ts @@ -13,7 +13,7 @@ const ACTION_TEST_SUBJ = `embeddablePanelAction-${ACTION_ID}`; export default function ({ getService, getPageObjects }: FtrProviderContext) { const drilldowns = getService('dashboardDrilldownsManage'); - const { dashboard, discover, common, timePicker } = getPageObjects([ + const { dashboard, discover, timePicker } = getPageObjects([ 'dashboard', 'discover', 'common', @@ -33,7 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); before('start on Dashboard landing page', async () => { - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.preserveCrossAppState(); }); @@ -42,7 +42,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); after('clean-up custom time range on panel', async () => { - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.gotoDashboardEditMode(drilldowns.DASHBOARD_WITH_PIE_CHART_NAME); await panelActions.customizePanel(); @@ -75,7 +75,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('carries over panel time range', async () => { - await common.navigateToApp('dashboard'); + await dashboard.navigateToApp(); await dashboard.gotoDashboardEditMode(drilldowns.DASHBOARD_WITH_PIE_CHART_NAME); diff --git a/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts b/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts index c8808e179d70d..c23f991f69f07 100644 --- a/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts +++ b/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts @@ -33,7 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const navigateToDashboardApp = async () => { log.debug('in navigateToDashboardApp'); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await retry.tryForTime(10000, async () => { expect(await PageObjects.dashboard.onDashboardLandingPage()).to.be(true); }); diff --git a/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts b/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts index 4450224d0456c..490ba84c8496c 100644 --- a/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts +++ b/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts @@ -84,7 +84,7 @@ export default function ({ describe('Print PDF button', () => { it('is available if new', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.reporting.openPdfReportingPanel(); expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); @@ -110,7 +110,7 @@ export default function ({ // Generating and then comparing reports can take longer than the default 60s timeout because the comparePngs // function is taking about 15 seconds per comparison in jenkins. this.timeout(300000); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard'); await PageObjects.reporting.openPdfReportingPanel(); await PageObjects.reporting.checkUsePrintLayout(); @@ -133,7 +133,7 @@ export default function ({ }); it('is available if new', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.reporting.openPngReportingPanel(); expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); @@ -158,7 +158,7 @@ export default function ({ it('downloads a PDF file with saved search given EuiDataGrid enabled', async function () { await kibanaServer.uiSettings.update({ 'doc_table:legacy': false }); this.timeout(300000); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard'); await PageObjects.reporting.openPdfReportingPanel(); await PageObjects.reporting.clickGenerateReportButton(); @@ -187,7 +187,7 @@ export default function ({ 'x-pack/test/functional/fixtures/kbn_archiver/reporting/ecommerce_76.json' ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('[K7.6-eCommerce] Revenue Dashboard'); await PageObjects.reporting.openPngReportingPanel(); diff --git a/x-pack/test/functional/apps/discover/async_scripted_fields.js b/x-pack/test/functional/apps/discover/async_scripted_fields.js index d86298405b72d..f5143e5fcc084 100644 --- a/x-pack/test/functional/apps/discover/async_scripted_fields.js +++ b/x-pack/test/functional/apps/discover/async_scripted_fields.js @@ -97,7 +97,7 @@ export default function ({ getService, getPageObjects }) { await PageObjects.discover.saveSearch('search with warning'); await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); diff --git a/x-pack/test/functional/apps/discover/saved_searches.ts b/x-pack/test/functional/apps/discover/saved_searches.ts index 8b6f830a11406..85a4d91eabc3c 100644 --- a/x-pack/test/functional/apps/discover/saved_searches.ts +++ b/x-pack/test/functional/apps/discover/saved_searches.ts @@ -48,7 +48,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // FLAKY: https://github.com/elastic/kibana/issues/104578 describe.skip('Customize time range', () => { it('should be possible to customize time range for saved searches on dashboards', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.addSavedSearch('Ecommerce Data'); diff --git a/x-pack/test/functional/apps/lens/group3/add_to_dashboard.ts b/x-pack/test/functional/apps/lens/group3/add_to_dashboard.ts index 9213c8459ebe3..91ec034295e2e 100644 --- a/x-pack/test/functional/apps/lens/group3/add_to_dashboard.ts +++ b/x-pack/test/functional/apps/lens/group3/add_to_dashboard.ts @@ -41,7 +41,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; const createAndSaveDashboard = async (dashboardName: string) => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); diff --git a/x-pack/test/functional/apps/lens/group4/dashboard.ts b/x-pack/test/functional/apps/lens/group4/dashboard.ts index e94f935323235..50e8c427567d2 100644 --- a/x-pack/test/functional/apps/lens/group4/dashboard.ts +++ b/x-pack/test/functional/apps/lens/group4/dashboard.ts @@ -42,7 +42,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('lens dashboard tests', () => { before(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await security.testUser.setRoles( [ 'global_dashboard_all', @@ -68,7 +68,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to add filters/timerange by clicking in XYChart', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); @@ -97,7 +97,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to add filters by right clicking in XYChart', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); @@ -121,7 +121,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // Requires xpack.discoverEnhanced.actions.exploreDataInContextMenu.enabled // setting set in kibana.yml to test (not enabled by default) it('should hide old "explore underlying data" action', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); @@ -135,7 +135,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should be able to add filters by clicking in pie chart', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsPieVis'); @@ -156,7 +156,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not carry over filters if creating a new lens visualization from within dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.timePicker.setDefaultAbsoluteRange(); await filterBar.addFilter({ field: 'geo.src', operation: 'is', value: 'US' }); @@ -174,7 +174,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('CSV export action exists in panel context menu', async () => { const ACTION_ID = 'ACTION_EXPORT_CSV'; const ACTION_TEST_SUBJ = `embeddablePanelAction-${ACTION_ID}`; - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsPieVis'); @@ -190,7 +190,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show all data from all layers in the inspector', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickCreateNewLink(); await PageObjects.header.waitUntilLoadingHasFinished(); @@ -234,7 +234,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('unlink lens panel from embeddable library', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsPieVis'); @@ -270,7 +270,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should show validation messages if any error appears', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickCreateNewLink(); @@ -300,7 +300,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should recover lens panel in an error state when fixing search query', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickOpenAddPanel(); await dashboardAddPanel.filterEmbeddableNames('lnsXYvis'); diff --git a/x-pack/test/functional/apps/lens/group6/error_handling.ts b/x-pack/test/functional/apps/lens/group6/error_handling.ts index 50e1ab439308d..f268e829ca5fb 100644 --- a/x-pack/test/functional/apps/lens/group6/error_handling.ts +++ b/x-pack/test/functional/apps/lens/group6/error_handling.ts @@ -87,7 +87,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'x-pack/test/functional/fixtures/kbn_archiver/lens/missing_fields' ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard( 'dashboard containing vis with missing fields' ); @@ -135,7 +135,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'x-pack/test/functional/fixtures/kbn_archiver/lens/fundamental_config_errors_on_dashboard' ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('lens fundamental config errors dash'); const failureElements = await testSubjects.findAll('errorMessageMarkdown'); diff --git a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts index dc241c7f3ac49..3141d2d7651fc 100644 --- a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts +++ b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts @@ -53,7 +53,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('should not cause PDF reports to fail', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await listingTable.clickItemLink('dashboard', 'Lens reportz'); await PageObjects.reporting.openPdfReportingPanel(); await PageObjects.reporting.clickGenerateReportButton(); diff --git a/x-pack/test/functional/apps/lens/group6/lens_tagging.ts b/x-pack/test/functional/apps/lens/group6/lens_tagging.ts index 42bb90e84a903..c3b279f591cdb 100644 --- a/x-pack/test/functional/apps/lens/group6/lens_tagging.ts +++ b/x-pack/test/functional/apps/lens/group6/lens_tagging.ts @@ -33,7 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.clickNewDashboard(); }); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js b/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js index 1b4c1914a156b..fcd3d06115508 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/add_to_dashboard.js @@ -83,7 +83,7 @@ export default function ({ getPageObjects, getService }) { }); it('should allow new map be added by value to an existing dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.saveDashboard('My Very Cool Dashboard'); @@ -113,7 +113,7 @@ export default function ({ getPageObjects, getService }) { }); it('should allow existing maps be added by value to an existing dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.saveDashboard('My Wonderful Dashboard'); @@ -185,7 +185,7 @@ export default function ({ getPageObjects, getService }) { }); it('should allow new map be added by reference to an existing dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.saveDashboard('My Super Cool Dashboard'); @@ -215,7 +215,7 @@ export default function ({ getPageObjects, getService }) { }); it('should allow existing maps be added by reference to an existing dashboard', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await PageObjects.dashboard.saveDashboard('My Amazing Dashboard'); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/dashboard.js b/x-pack/test/functional/apps/maps/group2/embeddable/dashboard.js index 69c12ed786d23..2750bf3a7f68d 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/dashboard.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/dashboard.js @@ -35,7 +35,7 @@ export default function ({ getPageObjects, getService }) { defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', [UI_SETTINGS.COURIER_IGNORE_FILTER_IF_FIELD_NOT_IN_INDEX]: true, }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('map embeddable example'); await PageObjects.dashboard.waitForRenderComplete(); }); @@ -164,7 +164,7 @@ export default function ({ getPageObjects, getService }) { // see https://github.com/elastic/kibana/issues/61596 on why it is specific to maps it("dashboard's back button should navigate to previous page", async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('map embeddable example'); await PageObjects.dashboard.waitForRenderComplete(); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.js b/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.js index aa54a54196f95..45b1754722153 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_library.js @@ -31,7 +31,7 @@ export default function ({ getPageObjects, getService }) { await kibanaServer.uiSettings.replace({ defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickEditorMenuButton(); await PageObjects.visualize.clickMapsApp(); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.js b/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.js index ba0ac1153aa53..036edc77df796 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/embeddable_state.js @@ -21,7 +21,7 @@ export default function ({ getPageObjects, getService }) { await kibanaServer.uiSettings.replace({ defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.addEmbeddable('document example', 'map'); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js b/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js index b08c284506e18..4da0d2af33894 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js @@ -19,7 +19,7 @@ export default function ({ getPageObjects, getService }) { ['test_logstash_reader', 'global_maps_all', 'global_dashboard_all'], { skipBrowserRefresh: true } ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardEditMode('filter by map extent dashboard'); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.dashboard.waitForRenderComplete(); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.js b/x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.js index faa65d6ab183a..14ff01e4da46f 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/save_and_return.js @@ -41,7 +41,7 @@ export default function ({ getPageObjects, getService }) { describe('new map', () => { beforeEach(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.clickEditorMenuButton(); await dashboardAddPanel.clickVisType('maps'); @@ -73,7 +73,7 @@ export default function ({ getPageObjects, getService }) { describe('edit existing map', () => { beforeEach(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('map embeddable example'); await PageObjects.dashboard.switchToEditMode(); await dashboardPanelActions.editPanelByTitle('join example'); diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.js b/x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.js index c3c014447a36d..e7265f4d7883d 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/tooltip_filter_actions.js @@ -30,7 +30,7 @@ export default function ({ getPageObjects, getService }) { defaultIndex: 'c698b940-e149-11e8-a35a-370a8516603a', }); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.preserveCrossAppState(); await PageObjects.dashboard.loadSavedDashboard('dash for tooltip filter action test'); diff --git a/x-pack/test/functional/apps/maps/group3/reports/index.ts b/x-pack/test/functional/apps/maps/group3/reports/index.ts index cb4f64b348ba5..0249658b70055 100644 --- a/x-pack/test/functional/apps/maps/group3/reports/index.ts +++ b/x-pack/test/functional/apps/maps/group3/reports/index.ts @@ -61,7 +61,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('PNG file matches the baseline image, using sample geo data', async function () { await reporting.initEcommerce(); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('Ecommerce Map'); await PageObjects.reporting.openPngReportingPanel(); await PageObjects.reporting.clickGenerateReportButton(); @@ -73,7 +73,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('PNG file matches the baseline image, using embeddable example', async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('map embeddable example'); await PageObjects.reporting.openPngReportingPanel(); await PageObjects.reporting.clickGenerateReportButton(); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_charts_dashboard_embeddables.ts b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_charts_dashboard_embeddables.ts index f2273b168489b..9927f37a6c8f9 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_charts_dashboard_embeddables.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_charts_dashboard_embeddables.ts @@ -59,7 +59,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { testData.jobConfig, testData.datafeedConfig ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); after(async () => { diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_embeddables_migration.ts b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_embeddables_migration.ts index 7058286f3d5b3..2760c3c136557 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_embeddables_migration.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_embeddables_migration.ts @@ -80,7 +80,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { testDataList.map((d) => d.dashboardSavedObject) ); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); after(async () => { @@ -92,7 +92,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const { dashboardSavedObject, panelTitle, type } = testData; describe(`for ${panelTitle}`, function () { before(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); after(async () => { diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml.ts b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml.ts index 90884b1644774..eef7461bec609 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml.ts @@ -55,7 +55,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); afterEach(async () => { diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml_with_wizard.ts b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml_with_wizard.ts index b8e39eaa3ba2c..089141ba663e7 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml_with_wizard.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml_with_wizard.ts @@ -107,7 +107,7 @@ export default function ({ getService, getPageObject, getPageObjects }: FtrProvi }); beforeEach(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); let tabsCount = 1; diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/map_to_ml.ts b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/map_to_ml.ts index 63cac23c5ed1d..3ce45876f77b1 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/map_to_ml.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/map_to_ml.ts @@ -47,7 +47,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); beforeEach(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); }); afterEach(async () => { diff --git a/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer_grid_in_dashboard.ts b/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer_grid_in_dashboard.ts index d4814a6f0ec11..47c6e7725686d 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer_grid_in_dashboard.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer_grid_in_dashboard.ts @@ -58,7 +58,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it(`displays Field statistics table in Dashboard when enabled`, async function () { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.clickNewDashboard(); await dashboardAddPanel.addSavedSearch(savedSearchTitle); @@ -96,7 +96,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it(`doesn't display Field statistics table in Dashboard when disabled`, async function () { await ml.testResources.setAdvancedSettingProperty(SHOW_FIELD_STATISTICS, false); - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.gotoDashboardEditMode(dashboardTitle); await PageObjects.header.waitUntilLoadingHasFinished(); diff --git a/x-pack/test/functional/apps/saved_objects_management/import_saved_objects_between_versions.ts b/x-pack/test/functional/apps/saved_objects_management/import_saved_objects_between_versions.ts index 7761af2684cbb..b6f1e94e83af3 100644 --- a/x-pack/test/functional/apps/saved_objects_management/import_saved_objects_between_versions.ts +++ b/x-pack/test/functional/apps/saved_objects_management/import_saved_objects_between_versions.ts @@ -59,7 +59,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(newObjectCount - initialObjectCount).to.eql(82); // logstash by reference dashboard with drilldowns - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('by_reference_drilldown'); // dashboard should load properly await PageObjects.dashboard.expectOnDashboard('by_reference_drilldown'); diff --git a/x-pack/test/functional/apps/spaces/spaces_selection.ts b/x-pack/test/functional/apps/spaces/spaces_selection.ts index 56f6e7b987873..113282e5a80d6 100644 --- a/x-pack/test/functional/apps/spaces/spaces_selection.ts +++ b/x-pack/test/functional/apps/spaces/spaces_selection.ts @@ -171,7 +171,7 @@ export default function spaceSelectorFunctionalTests({ describe('displays separate data for each space', () => { it('in the default space', async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await expectDashboardRenders('[Logs] Web Traffic'); }); diff --git a/x-pack/test/functional/apps/visualize/telemetry.ts b/x-pack/test/functional/apps/visualize/telemetry.ts index 6bf1ae510a5f4..773a21d120c93 100644 --- a/x-pack/test/functional/apps/visualize/telemetry.ts +++ b/x-pack/test/functional/apps/visualize/telemetry.ts @@ -38,7 +38,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await retry.try(async () => { - await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.navigateToApp(); await PageObjects.dashboard.loadSavedDashboard('visualizations'); await PageObjects.timePicker.setDefaultAbsoluteRange(); await PageObjects.dashboard.waitForRenderComplete(); diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts index 7a0507959c117..faf3f63712ce4 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/metrics_route.ts @@ -207,13 +207,20 @@ export default function ({ getService }: FtrProviderContext) { .send({ task: { id: ruleId } }) .expect(200); - await getMetrics( - false, - (metrics) => - metrics?.metrics?.task_run?.value.by_type.alerting?.total === i + 2 && - metrics?.metrics?.task_run?.value.by_type.alerting?.not_timed_out === i + 2 && - metrics?.metrics?.task_run?.value.by_type.alerting?.success === i + 2 - ); + const metrics = ( + await getMetrics( + false, + (m) => + m?.metrics?.task_run?.value.by_type.alerting?.total === i + 2 && + m?.metrics?.task_run?.value.by_type.alerting?.not_timed_out === i + 2 && + m?.metrics?.task_run?.value.by_type.alerting?.success === i + 2 + ) + ).metrics; + + // check that delay histogram exists + expect(metrics?.task_run?.value?.overall?.delay).not.to.be(null); + expect(Array.isArray(metrics?.task_run?.value?.overall?.delay.counts)).to.be(true); + expect(Array.isArray(metrics?.task_run?.value?.overall?.delay.values)).to.be(true); } // counter should reset on its own diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/fleet.ts b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/fleet.ts index 95647649259dc..5295b033fc7cf 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/fleet.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/api_calls/fleet.ts @@ -25,13 +25,21 @@ const deleteAgentPolicies = () => { return rootRequest<{ items: Array<{ id: string }> }>({ method: 'GET', url: 'api/fleet/agent_policies', - 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) => { response.body.items.forEach((item: { id: string }) => { rootRequest({ method: 'POST', url: `api/fleet/agent_policies/delete`, - 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', + }, body: { agentPolicyId: item.id, }, @@ -44,12 +52,20 @@ const deletePackagePolicies = () => { return rootRequest<{ items: Array<{ id: string }> }>({ method: 'GET', url: 'api/fleet/package_policies', - 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) => { rootRequest({ method: 'POST', url: `api/fleet/package_policies/delete`, - 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', + }, body: { packagePolicyIds: response.body.items.map((item: { id: string }) => item.id), }, @@ -61,7 +77,11 @@ const deletePackages = () => { return rootRequest<{ items: Array<{ status: string; name: string; version: string }> }>({ method: 'GET', url: 'api/fleet/epm/packages', - 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) => { response.body.items.forEach((item) => { if (item.status === 'installed') { @@ -71,6 +91,7 @@ const deletePackages = () => { headers: { 'kbn-xsrf': 'cypress-creds', 'x-elastic-internal-origin': 'security-solution', + 'elastic-api-version': '2023-10-31', }, }); } diff --git a/x-pack/test_serverless/api_integration/services/alerting_api.ts b/x-pack/test_serverless/api_integration/services/alerting_api.ts index 8eb771d7eb11d..668dcdab82aa0 100644 --- a/x-pack/test_serverless/api_integration/services/alerting_api.ts +++ b/x-pack/test_serverless/api_integration/services/alerting_api.ts @@ -11,7 +11,7 @@ import type { } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { MetricThresholdParams } from '@kbn/infra-plugin/common/alerting/metrics'; -import { ThresholdParams } from '@kbn/observability-plugin/common/threshold_rule/types'; +import { ThresholdParams } from '@kbn/observability-plugin/common/custom_threshold_rule/types'; import { FtrProviderContext } from '../ftr_provider_context'; diff --git a/x-pack/test_serverless/api_integration/test_suites/common/index_management/indices.ts b/x-pack/test_serverless/api_integration/test_suites/common/index_management/indices.ts index 28b88190b2f53..9c4fd7b196337 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/index_management/indices.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/index_management/indices.ts @@ -17,12 +17,19 @@ export default function ({ getService }: FtrProviderContext) { const es = getService('es'); const log = getService('log'); - // FLAKY: https://github.com/elastic/kibana/issues/165565 - describe.skip('Indices', function () { + describe('Indices', function () { const indexName = `index-${Math.random()}`; before(async () => { // Create a new index to test against + const indexExists = await es.indices.exists({ index: indexName }); + + // Index should not exist, but in the case that it already does, we bypass the create request + if (indexExists) { + return; + } + + log.debug(`Creating index: '${indexName}'`); try { await es.indices.create({ index: indexName }); } catch (err) { @@ -99,6 +106,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .put(`${INTERNAL_API_BASE_PATH}/indices/create`) .set('kbn-xsrf', 'xxx') + .set('x-elastic-internal-origin', 'xxx') .send({ indexName: createIndexName, }) @@ -119,6 +127,7 @@ export default function ({ getService }: FtrProviderContext) { await supertest .put(`${INTERNAL_API_BASE_PATH}/indices/create`) .set('kbn-xsrf', 'xxx') + .set('x-elastic-internal-origin', 'xxx') .send({ indexName: createIndexName, }) diff --git a/x-pack/test_serverless/api_integration/test_suites/common/ingest_pipelines.ts b/x-pack/test_serverless/api_integration/test_suites/common/ingest_pipelines.ts index 3a1ffba020246..1e5ee6d39bb71 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/ingest_pipelines.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/ingest_pipelines.ts @@ -350,8 +350,7 @@ export default function ({ getService }: FtrProviderContext) { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/165539 - describe.skip('Fetch documents', () => { + describe('Fetch documents', () => { const INDEX = 'test_index'; const DOCUMENT_ID = '1'; const DOCUMENT = { diff --git a/x-pack/test_serverless/api_integration/test_suites/common/security/user_profiles.ts b/x-pack/test_serverless/api_integration/test_suites/common/security/user_profiles.ts index 64650c5f47548..83ef0c4335679 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/security/user_profiles.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/security/user_profiles.ts @@ -16,8 +16,7 @@ export default function ({ getService }: FtrProviderContext) { describe('security/user_profiles', function () { describe('route access', () => { - // FLAKY: https://github.com/elastic/kibana/issues/165391 - describe.skip('internal', () => { + describe('internal', () => { // When we run tests on MKI, SAML realm is configured differently, and we cannot handcraft SAML responses to // log in as SAML users. this.tags(['skipMKI']); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/avg_pct_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts similarity index 90% rename from x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/avg_pct_fired.ts rename to x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts index 77114463eb89f..f75faa2b2f686 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/avg_pct_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_fired.ts @@ -6,8 +6,11 @@ */ import { cleanup, generate } from '@kbn/infra-forge'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { FtrProviderContext } from '../../../ftr_provider_context'; @@ -22,8 +25,8 @@ export default function ({ getService }: FtrProviderContext) { // Blocked API: index_not_found_exception: no such index [.alerts-observability.threshold.alerts-default] // Issue: https://github.com/elastic/kibana/issues/165138 - describe.skip('Threshold rule - AVG - PCT - FIRED', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe.skip('Custom Threshold rule - AVG - PCT - FIRED', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id'; let infraDataIndex: string; @@ -49,7 +52,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'foo') .set('x-elastic-internal-origin', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -131,13 +134,13 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await alertingApi.waitForAlertInIndex({ - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -145,14 +148,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.fired'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.fired' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', '*'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/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 similarity index 90% rename from x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/avg_pct_no_data.ts rename to x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/avg_pct_no_data.ts index cbfdf251ba602..fbcb7a1404293 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/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 @@ -5,8 +5,11 @@ * 2.0. */ -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { FtrProviderContext } from '../../../ftr_provider_context'; @@ -19,8 +22,8 @@ export default function ({ getService }: FtrProviderContext) { // Blocked API: index_not_found_exception: no such index [.alerts-observability.threshold.alerts-default] // Issue: https://github.com/elastic/kibana/issues/165138 - describe.skip('Threshold rule - AVG - PCT - NoData', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe.skip('Custom Threshold rule - AVG - PCT - NoData', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id-no-data'; let actionId: string; @@ -44,7 +47,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'foo') .set('x-elastic-internal-origin', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -124,13 +127,13 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await alertingApi.waitForAlertInIndex({ - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -138,14 +141,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.nodata'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.nodata' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', '*'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/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 similarity index 91% rename from x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/custom_eq_avg_bytes_fired.ts rename to x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/custom_eq_avg_bytes_fired.ts index 81b57e492f100..3e996e555b092 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/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 @@ -12,8 +12,11 @@ */ import { cleanup, generate } from '@kbn/infra-forge'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { FtrProviderContext } from '../../../ftr_provider_context'; @@ -27,8 +30,8 @@ export default function ({ getService }: FtrProviderContext) { const dataViewApi = getService('dataViewApi'); // Issue: https://github.com/elastic/kibana/issues/165138 - describe.skip('Threshold rule - CUSTOM_EQ - AVG - BYTES - FIRED', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe.skip('Custom Threshold rule - CUSTOM_EQ - AVG - BYTES - FIRED', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id'; let infraDataIndex: string; @@ -54,7 +57,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'foo') .set('x-elastic-internal-origin', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -138,13 +141,13 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await alertingApi.waitForAlertInIndex({ - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -152,14 +155,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.fired'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.fired' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', '*'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/documents_count_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts similarity index 90% rename from x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/documents_count_fired.ts rename to x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts index ad0624a91dfb1..1fa95b8cab8a9 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/documents_count_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/documents_count_fired.ts @@ -6,8 +6,11 @@ */ import { cleanup, generate } from '@kbn/infra-forge'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { FtrProviderContext } from '../../../ftr_provider_context'; @@ -21,8 +24,8 @@ export default function ({ getService }: FtrProviderContext) { const dataViewApi = getService('dataViewApi'); // Issue: https://github.com/elastic/kibana/issues/165138 - describe.skip('Threshold rule - DOCUMENTS_COUNT - FIRED', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe.skip('Custom Threshold rule - DOCUMENTS_COUNT - FIRED', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id'; let infraDataIndex: string; @@ -48,7 +51,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'foo') .set('x-elastic-internal-origin', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -128,13 +131,13 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await alertingApi.waitForAlertInIndex({ - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -142,14 +145,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.fired'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.fired' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', '*'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/group_by_fired.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts similarity index 92% rename from x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/group_by_fired.ts rename to x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts index 5cadfbc6b3d9d..8bd8312a5184a 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/group_by_fired.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/group_by_fired.ts @@ -14,8 +14,11 @@ import { kbnTestConfig } from '@kbn/test'; import moment from 'moment'; import { cleanup, generate } from '@kbn/infra-forge'; -import { Aggregators, Comparator } from '@kbn/observability-plugin/common/threshold_rule/types'; -import { FIRED_ACTIONS_ID } from '@kbn/observability-plugin/server/lib/rules/threshold/threshold_executor'; +import { + Aggregators, + Comparator, +} 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 { FtrProviderContext } from '../../../ftr_provider_context'; @@ -31,8 +34,8 @@ export default function ({ getService }: FtrProviderContext) { let startedAt: string; // Issue: https://github.com/elastic/kibana/issues/165138 - describe.skip('Threshold rule - GROUP_BY - FIRED', () => { - const THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; + describe.skip('Custom Threshold rule - GROUP_BY - FIRED', () => { + const CUSTOM_THRESHOLD_RULE_ALERT_INDEX = '.alerts-observability.threshold.alerts-default'; const ALERT_ACTION_INDEX = 'alert-action-threshold'; const DATA_VIEW_ID = 'data-view-id'; let infraDataIndex: string; @@ -58,7 +61,7 @@ export default function ({ getService }: FtrProviderContext) { .set('kbn-xsrf', 'foo') .set('x-elastic-internal-origin', 'foo'); await esClient.deleteByQuery({ - index: THRESHOLD_RULE_ALERT_INDEX, + index: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, query: { term: { 'kibana.alert.rule.uuid': ruleId } }, }); await esClient.deleteByQuery({ @@ -145,7 +148,7 @@ export default function ({ getService }: FtrProviderContext) { it('should set correct information in the alert document', async () => { const resp = await alertingApi.waitForAlertInIndex({ - indexName: THRESHOLD_RULE_ALERT_INDEX, + indexName: CUSTOM_THRESHOLD_RULE_ALERT_INDEX, ruleId, }); alertId = (resp.hits.hits[0]._source as any)['kibana.alert.uuid']; @@ -153,7 +156,7 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.category', - 'Threshold (Technical Preview)' + '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.name', 'Threshold rule'); @@ -161,14 +164,17 @@ export default function ({ getService }: FtrProviderContext) { expect(resp.hits.hits[0]._source).property('kibana.alert.rule.revision', 0); expect(resp.hits.hits[0]._source).property( 'kibana.alert.rule.rule_type_id', - 'observability.rules.threshold' + 'observability.rules.custom_threshold' ); expect(resp.hits.hits[0]._source).property('kibana.alert.rule.uuid', ruleId); expect(resp.hits.hits[0]._source).property('kibana.space_ids').contain('default'); expect(resp.hits.hits[0]._source) .property('kibana.alert.rule.tags') .contain('observability'); - expect(resp.hits.hits[0]._source).property('kibana.alert.action_group', 'threshold.fired'); + expect(resp.hits.hits[0]._source).property( + 'kibana.alert.action_group', + 'custom_threshold.fired' + ); expect(resp.hits.hits[0]._source).property('tags').contain('observability'); expect(resp.hits.hits[0]._source).property('kibana.alert.instance.id', 'host-0'); expect(resp.hits.hits[0]._source).property('kibana.alert.workflow_status', 'open'); @@ -216,7 +222,7 @@ export default function ({ getService }: FtrProviderContext) { }); const { protocol, hostname, port } = kbnTestConfig.getUrlParts(); - expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.threshold'); + expect(resp.hits.hits[0]._source?.ruleType).eql('observability.rules.custom_threshold'); expect(resp.hits.hits[0]._source?.alertDetailsUrl).eql( `${protocol}://${hostname}:${port}/app/observability/alerts?_a=(kuery:%27kibana.alert.uuid:%20%22${alertId}%22%27%2CrangeFrom:%27${rangeFrom}%27%2CrangeTo:now%2Cstatus:all)` ); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/index.ts b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/index.ts similarity index 93% rename from x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/index.ts rename to x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/index.ts index dbb8968d2d946..944068af6a21b 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/threshold_rule/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/custom_threshold_rule/index.ts @@ -8,7 +8,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - describe('Threshold Rule', function () { + describe('Custom Threshold Rule', function () { loadTestFile(require.resolve('./avg_pct_fired')); loadTestFile(require.resolve('./avg_pct_no_data')); loadTestFile(require.resolve('./documents_count_fired')); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/index.feature_flags.ts b/x-pack/test_serverless/api_integration/test_suites/observability/index.feature_flags.ts index d9643f91d70ae..a3a5ab552ee3f 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/index.feature_flags.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/index.feature_flags.ts @@ -9,6 +9,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('Serverless observability API - feature flags', function () { - loadTestFile(require.resolve('./threshold_rule')); + loadTestFile(require.resolve('./custom_threshold_rule')); }); } diff --git a/x-pack/test_serverless/functional/page_objects/svl_common_navigation.ts b/x-pack/test_serverless/functional/page_objects/svl_common_navigation.ts index 8d3edb04d640a..3c3b10a5d03c8 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_common_navigation.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_common_navigation.ts @@ -151,6 +151,25 @@ export function SvlCommonNavigationProvider(ctx: FtrProviderContext) { }); } }, + async expectBreadcrumbMissing(by: { deepLinkId: AppDeepLinkId } | { text: string }) { + if ('deepLinkId' in by) { + await testSubjects.missingOrFail(`~breadcrumb-deepLinkId-${by.deepLinkId}`); + } else { + await retry.try(async () => { + expect(await getByVisibleText('~breadcrumb', by.text)).be(null); + }); + } + }, + async expectBreadcrumbTexts(expectedBreadcrumbTexts: string[]) { + await retry.try(async () => { + const breadcrumbsContainer = await testSubjects.find('breadcrumbs'); + const breadcrumbs = await breadcrumbsContainer.findAllByTestSubject('~breadcrumb'); + breadcrumbs.shift(); // remove home + expect(expectedBreadcrumbTexts.length).to.eql(breadcrumbs.length); + const texts = await Promise.all(breadcrumbs.map((b) => b.getVisibleText())); + expect(expectedBreadcrumbTexts).to.eql(texts); + }); + }, }, search: new SvlNavigationSearchPageObject(ctx), recent: { diff --git a/x-pack/test_serverless/functional/test_suites/common/examples/data_view_field_editor_example/index.ts b/x-pack/test_serverless/functional/test_suites/common/examples/data_view_field_editor_example/index.ts index a840abb55f3a7..106f504cae82b 100644 --- a/x-pack/test_serverless/functional/test_suites/common/examples/data_view_field_editor_example/index.ts +++ b/x-pack/test_serverless/functional/test_suites/common/examples/data_view_field_editor_example/index.ts @@ -11,25 +11,36 @@ import type { FtrProviderContext } from '../../../../ftr_provider_context'; export default function ({ getService, getPageObjects, loadTestFile }: FtrProviderContext) { const browser = getService('browser'); const es = getService('es'); - const PageObjects = getPageObjects(['common', 'header', 'settings', 'svlCommonNavigation']); + const PageObjects = getPageObjects([ + 'common', + 'header', + 'settings', + 'svlCommonNavigation', + 'svlCommonPage', + ]); const testSubjects = getService('testSubjects'); const find = getService('find'); const retry = getService('retry'); const kibanaServer = getService('kibanaServer'); - // FLAKY: https://github.com/elastic/kibana/issues/165384 - describe.skip('data view field editor example', function () { + describe('data view field editor example', function () { before(async () => { + // TODO: Serverless tests require login first + await PageObjects.svlCommonPage.login(); // TODO: emptyKibanaIndex fails in Serverless with // "index_not_found_exception: no such index [.kibana_ingest]", // so it was switched to `savedObjects.cleanStandardList()` await kibanaServer.savedObjects.cleanStandardList(); await browser.setWindowSize(1300, 900); - await es.transport.request({ - path: '/blogs/_doc', - method: 'POST', - body: { user: 'matt', message: 20 }, - }); + await es.transport.request( + { + path: '/blogs/_doc', + method: 'POST', + body: { user: 'matt', message: 20 }, + }, + // TODO: Extend timeout in Serverless + { requestTimeout: '1m' } + ); // TODO: Navigation to Data View Management is different in Serverless await PageObjects.common.navigateToApp('management'); diff --git a/x-pack/test_serverless/functional/test_suites/common/examples/discover_customization_examples/customizations.ts b/x-pack/test_serverless/functional/test_suites/common/examples/discover_customization_examples/customizations.ts index cb0c5cc9c36ba..d653c6f8505ba 100644 --- a/x-pack/test_serverless/functional/test_suites/common/examples/discover_customization_examples/customizations.ts +++ b/x-pack/test_serverless/functional/test_suites/common/examples/discover_customization_examples/customizations.ts @@ -12,7 +12,7 @@ const TEST_START_TIME = 'Sep 19, 2015 @ 06:31:44.000'; const TEST_END_TIME = 'Sep 23, 2015 @ 18:31:44.000'; export default ({ getService, getPageObjects }: FtrProviderContext) => { - const PageObjects = getPageObjects(['common', 'timePicker', 'header']); + const PageObjects = getPageObjects(['common', 'timePicker', 'header', 'svlCommonPage']); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const testSubjects = getService('testSubjects'); @@ -20,10 +20,10 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { const dataGrid = getService('dataGrid'); const defaultSettings = { defaultIndex: 'logstash-*' }; - // Flaky in serverless tests (before hook) - // Failing: See https://github.com/elastic/kibana/issues/165396 - describe.skip('Customizations', () => { + describe('Customizations', () => { before(async () => { + // TODO: Serverless tests require login first + await PageObjects.svlCommonPage.login(); await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/logstash_functional'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts index e0296f26e773e..91d5072a8162c 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/configure.ts @@ -24,8 +24,6 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await svlObltNavigation.navigateToLandingPage(); await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'observability-overview:cases' }); - - await common.clickAndValidate('configure-case-button', 'case-configure-title'); }); after(async () => { @@ -34,6 +32,10 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); describe('Closure options', function () { + before(async () => { + await common.clickAndValidate('configure-case-button', 'case-configure-title'); + }); + it('defaults the closure option correctly', async () => { await cases.common.assertRadioGroupValue('closure-options-radio-group', 'close-by-user'); }); diff --git a/x-pack/test_serverless/functional/test_suites/observability/landing_page.ts b/x-pack/test_serverless/functional/test_suites/observability/landing_page.ts index 08b3879d5f6d3..68263e5ce2c39 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/landing_page.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/landing_page.ts @@ -9,11 +9,19 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getPageObject, getService }: FtrProviderContext) { const svlObltOnboardingPage = getPageObject('svlObltOnboardingPage'); + const svlCommonPage = getPageObject('svlCommonPage'); const svlObltNavigation = getService('svlObltNavigation'); const SvlObltOnboardingStreamLogFilePage = getPageObject('SvlObltOnboardingStreamLogFilePage'); - // FLAKY: https://github.com/elastic/kibana/issues/165885 - describe.skip('landing page', function () { + describe('landing page', function () { + before(async () => { + await svlCommonPage.login(); + }); + + after(async () => { + await svlCommonPage.forceLogout(); + }); + it('has quickstart badge', async () => { await svlObltNavigation.navigateToLandingPage(); await svlObltOnboardingPage.assertQuickstartBadgeExists(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/navigation.ts b/x-pack/test_serverless/functional/test_suites/observability/navigation.ts index b2761fbaa7f3e..57b636efa6a75 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/navigation.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/navigation.ts @@ -11,15 +11,20 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getPageObject, getService }: FtrProviderContext) { const svlObltOnboardingPage = getPageObject('svlObltOnboardingPage'); const svlObltNavigation = getService('svlObltNavigation'); + const svlCommonPage = getPageObject('svlCommonPage'); const svlCommonNavigation = getPageObject('svlCommonNavigation'); const browser = getService('browser'); - // Failing: See https://github.com/elastic/kibana/issues/165924 - describe.skip('navigation', function () { + describe('navigation', function () { before(async () => { + await svlCommonPage.login(); await svlObltNavigation.navigateToLandingPage(); }); + after(async () => { + await svlCommonPage.forceLogout(); + }); + it('navigate observability sidenav & breadcrumbs', async () => { const expectNoPageReload = await svlCommonNavigation.createNoPageReloadCheck(); diff --git a/x-pack/test_serverless/functional/test_suites/search/navigation.ts b/x-pack/test_serverless/functional/test_suites/search/navigation.ts index 52369c12c66bb..4852c0a369b58 100644 --- a/x-pack/test_serverless/functional/test_suites/search/navigation.ts +++ b/x-pack/test_serverless/functional/test_suites/search/navigation.ts @@ -71,6 +71,28 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { await expectNoPageReload(); }); + it("management apps from the sidenav hide the 'stack management' root from the breadcrumbs", async () => { + await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management:triggersActions' }); + await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Explore', 'Alerts', 'Rules']); + + await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management:index_management' }); + await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Content', 'Index Management']); + + await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management:ingest_pipelines' }); + await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Content', 'Ingest Pipelines']); + + await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management:api_keys' }); + await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Security', 'API keys']); + }); + + it('navigate management', async () => { + await svlCommonNavigation.sidenav.openSection('project_settings_project_nav'); + await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management' }); + await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Management']); + await testSubjects.click('app-card-dataViews'); + await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Management', 'Data views']); + }); + it('navigate using search', async () => { await svlCommonNavigation.search.showSearch(); // TODO: test something search project specific instead of generic discover diff --git a/yarn.lock b/yarn.lock index 3b48ab0815088..6be56695260b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2950,6 +2950,13 @@ resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== +"@kayahr/text-encoding@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@kayahr/text-encoding/-/text-encoding-1.2.0.tgz#9d75de6b40d7694e524c8ce39fc6e08994680746" + integrity sha512-61R84DjOQvO4bakOl4Vwuw0wU3FLbFtfUf4ApJquQ2+N3AY2VlN0j9te8rpGFHx2mzvhWKetyDgVZiLeU2/dhA== + dependencies: + tslib "^2.5.2" + "@kbn/aad-fixtures-plugin@link:x-pack/test/alerting_api_integration/common/plugins/aad": version "0.0.0" uid "" @@ -5818,6 +5825,10 @@ version "0.0.0" uid "" +"@kbn/subscription-tracking@link:packages/kbn-subscription-tracking": + version "0.0.0" + uid "" + "@kbn/synthetics-plugin@link:x-pack/plugins/synthetics": version "0.0.0" uid "" @@ -23390,10 +23401,10 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -openpgp@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.3.0.tgz#e8fc97e538865b8c095dbd91c7be4203bd1dd1df" - integrity sha512-qjCj0vYpV3dmmkE+vURiJ5kVAJwrMk8BPukvpWJiHcTNWKwPVsRS810plIe4klIcHVf1ScgUQwqtBbv99ff+kQ== +openpgp@5.10.1: + version "5.10.1" + resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.10.1.tgz#3b137470187b79281719ced16fb9e60b822cfd24" + integrity sha512-SR5Ft+ej51d0+p53ld5Ney0Yiz0y8Mh1YYLJrvpRMbTaNhvS1QcDX0Oq1rW9sjBnQXtgrpWw2Zve3rm7K5C/pw== dependencies: asn1.js "^5.0.0" @@ -29150,6 +29161,11 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== +tslib@^2.5.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tslib@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"