diff --git a/.buildkite/scripts/steps/check_types_commits.sh b/.buildkite/scripts/steps/check_types_commits.sh index 113f516efc0234..2fe1af46825fb0 100755 --- a/.buildkite/scripts/steps/check_types_commits.sh +++ b/.buildkite/scripts/steps/check_types_commits.sh @@ -2,25 +2,34 @@ set -euo pipefail - if [[ "${CI-}" == "true" ]]; then .buildkite/scripts/bootstrap.sh sha1=$(git merge-base $GITHUB_PR_TARGET_BRANCH $GITHUB_PR_TRIGGERED_SHA) sha2="${GITHUB_PR_TRIGGERED_SHA-}" else - # Script take between 0 and 2 arguments representing two commit SHA's: - # If 0, it will diff HEAD and HEAD^ - # If 1 (SHA1), it will diff SHA1 and SHA1^ - # If 2 (SHA1, SHA2), it will diff SHA1 and SHA2 - sha1="${1-HEAD}" - sha2="${2-$sha1^}" + if [[ "${1-}" == "--cached" ]]; then + # Only check staged files + sha1=$1 + sha2="" + else + # Script take between 0 and 2 arguments representing two commit SHA's: + # If 0, it will diff HEAD and HEAD^ + # If 1 (SHA1), it will diff SHA1 and SHA1^ + # If 2 (SHA1, SHA2), it will diff SHA1 and SHA2 + sha1="${1-HEAD}" + sha2="${2-$sha1^}" + fi fi uniq_dirs=() uniq_tsconfigs=() -echo "Detecting files changed between $sha1 and $sha2..." +if [[ "$sha1" == "--cached" ]]; then + echo "Detecting files changed in staging area..." +else + echo "Detecting files changed between $sha1 and $sha2..." +fi files=($(git diff --name-only $sha1 $sha2)) @@ -96,19 +105,35 @@ done echo "Looking for related tsconfig.json files..." -for dir in "${uniq_dirs[@]}" -do - find_tsconfig $dir -done +if [ ${#uniq_dirs[@]} -gt 0 ]; then + for dir in "${uniq_dirs[@]}" + do + find_tsconfig $dir + done +fi if [ ${#uniq_tsconfigs[@]} -eq 0 ]; then - echo "No tsconfig.json files found for changes in $sha1 $sha2" + if [[ "$sha1" == "--cached" ]]; then + echo "No tsconfig.json files found for staged changes" + else + echo "No tsconfig.json files found for changes between $sha1 and $sha2" + fi exit fi echo "Running scripts/type_check for each found tsconfig.json file..." +finalExitCode=0 + for tsconfig in "${uniq_tsconfigs[@]}" do + set +e node scripts/type_check --project $tsconfig -done \ No newline at end of file + exitCode=$? + set -e + if [ "$exitCode" -gt "$finalExitCode" ]; then + finalExitCode=$exitCode + fi +done + +exit $finalExitCode diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9a6a585abd68cc..b443075cf7555b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -388,6 +388,7 @@ src/plugins/chart_expressions/expression_xy @elastic/kibana-visualizations examples/expressions_explorer @elastic/kibana-app-services src/plugins/expressions @elastic/kibana-visualizations packages/kbn-failed-test-reporter-cli @elastic/kibana-operations @elastic/appex-qa +examples/feature_control_examples @elastic/kibana-security x-pack/test/plugin_api_integration/plugins/feature_usage_test @elastic/kibana-security x-pack/plugins/features @elastic/kibana-core x-pack/test/functional_execution_context/plugins/alerts @elastic/kibana-core diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index ec6acc7abe98d8..12b91c8371bb1f 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-26 +date: 2023-09-27 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 529e5f913ac7ef..e3214171faf714 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-26 +date: 2023-09-27 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 97cc1d7cb21de6..2e4a76b9141afa 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-26 +date: 2023-09-27 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 5e72f84f48ad8b..da3be79e6776e3 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -4846,27 +4846,9 @@ "section": "def-common.IExecutionErrorsResult", "text": "IExecutionErrorsResult" }, - ">; bulkDeleteRules: (options: ", - "BulkOptions", - ") => Promise<{ errors: ", - { - "pluginId": "alerting", - "scope": "server", - "docId": "kibAlertingPluginApi", - "section": "def-server.BulkOperationError", - "text": "BulkOperationError" - }, - "[]; total: number; rules: (", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.Rule", - "text": "Rule" - }, - " | ", - "RuleWithLegacyId", - ")[]; taskIdsFailedToBeDeleted: string[]; }>; bulkEdit: ; bulkDeleteRules: (options: Readonly<{ filter?: string | undefined; ids?: string[] | undefined; } & {}>) => Promise<", + "BulkDeleteRulesResult", + ">>; bulkEdit: ; query: ", + "IntersectionC", + "<[", "TypeC", "<{ start: ", "Type", "; end: ", "Type", - "; }>; }> | undefined; handler: ({}: ", + "; }>, ", + "TypeC", + "<{ environment: ", + "UnionC", + "<[", + "LiteralC", + "<\"ENVIRONMENT_NOT_DEFINED\">, ", + "LiteralC", + "<\"ENVIRONMENT_ALL\">, ", + "BrandC", + "<", + "StringC", + ", ", + { + "pluginId": "@kbn/io-ts-utils", + "scope": "common", + "docId": "kibKbnIoTsUtilsPluginApi", + "section": "def-common.NonEmptyStringBrand", + "text": "NonEmptyStringBrand" + }, + ">]>; }>]>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", - " & { params: { path: { serviceName: string; }; query: { start: number; end: number; }; }; }) => Promise<", + " & { params: { path: { serviceName: string; }; query: { start: number; end: number; } & { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", + "Branded", + "; }; }; }) => Promise<", "ServiceMetadataDetails", ">; } & ", "APMRouteCreateOptions", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 0c90cf79c9974f..2e853b562576ed 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-26 +date: 2023-09-27 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 00c1bdefa5cfb3..3c7d9c1c1c4ff3 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-26 +date: 2023-09-27 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 11fb62a7fde7dd..e267a022137341 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-26 +date: 2023-09-27 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 a9cbbab0920e20..00cd00b3d8b7ca 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-26 +date: 2023-09-27 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 421ac4b1bdfc68..b76a791d578649 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-26 +date: 2023-09-27 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 8c71da99962b10..973968148c9e28 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-26 +date: 2023-09-27 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 b26e5fdc1bec65..40e94f9c574a07 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-26 +date: 2023-09-27 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 d6edcef304cfa0..68cb43f4cdcf82 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-26 +date: 2023-09-27 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 8770378fa77136..723d476304190a 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-26 +date: 2023-09-27 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 d3be97d80040a9..10ea75521a594c 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-26 +date: 2023-09-27 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 bd056a9cab82c4..b144fc2eccc4c3 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-26 +date: 2023-09-27 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 15e2cb08a13483..6582ca6dafac6f 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-26 +date: 2023-09-27 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 b67cc1ca1c15b9..039ccab8b05b7a 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-26 +date: 2023-09-27 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 1934cb490d159b..297e9465c0dbc3 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-26 +date: 2023-09-27 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 da9f05b5883860..e0f9d6a8153af6 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-26 +date: 2023-09-27 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 4474707f4dd514..7f2fad0fdbbca9 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-26 +date: 2023-09-27 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 8155448ed06939..9bd36e06920279 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-26 +date: 2023-09-27 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 635d1eb9d7dc11..9ffbb619fc035e 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-26 +date: 2023-09-27 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 1437ef65bd31f9..bde1fee9211b44 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-26 +date: 2023-09-27 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 a4df4f9d5b6290..8e0d9fe3a3f8f3 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-26 +date: 2023-09-27 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 8e2207a743ba85..6a9123356ad835 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-26 +date: 2023-09-27 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 c472d757594f52..372461cf97e4e0 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -12848,6 +12848,10 @@ "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/choropleth_map.tsx" }, + { + "plugin": "dataVisualizer", + "path": "x-pack/plugins/data_visualizer/public/application/data_drift/charts/default_value_formatter.ts" + }, { "plugin": "stackAlerts", "path": "x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.tsx" @@ -13808,6 +13812,10 @@ "plugin": "canvas", "path": "x-pack/plugins/canvas/public/components/datasource/datasource_component.js" }, + { + "plugin": "presentationUtil", + "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" + }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/public/applications/analytics/utils/find_or_create_data_view.ts" @@ -14012,10 +14020,6 @@ "plugin": "inputControlVis", "path": "src/plugins/input_control_vis/public/test_utils/get_index_pattern_mock.ts" }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" - }, { "plugin": "visTypeTimelion", "path": "src/plugins/vis_types/timelion/public/helpers/arg_value_suggestions.ts" @@ -21553,6 +21557,10 @@ "plugin": "canvas", "path": "x-pack/plugins/canvas/public/components/datasource/datasource_component.js" }, + { + "plugin": "presentationUtil", + "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" + }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/public/applications/analytics/utils/find_or_create_data_view.ts" @@ -21757,10 +21765,6 @@ "plugin": "inputControlVis", "path": "src/plugins/input_control_vis/public/test_utils/get_index_pattern_mock.ts" }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" - }, { "plugin": "visTypeTimelion", "path": "src/plugins/vis_types/timelion/public/helpers/arg_value_suggestions.ts" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 556287b22aa60a..c821f234780e62 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-26 +date: 2023-09-27 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 644aec8b976e24..84ff30a00dfaa6 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 853e83d7d02d61..36a9790b3c52ca 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.devdocs.json b/api_docs/data_view_editor.devdocs.json index 6ecfaa57fcaa8f..ce62a71b7b2107 100644 --- a/api_docs/data_view_editor.devdocs.json +++ b/api_docs/data_view_editor.devdocs.json @@ -1,7 +1,309 @@ { "id": "dataViewEditor", "client": { - "classes": [], + "classes": [ + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService", + "type": "Class", + "tags": [], + "label": "DataViewEditorService", + "description": [], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "{\n services: { http, dataViews },\n initialValues: {\n type: initialType = INDEX_PATTERN_TYPE.DEFAULT,\n indexPattern: initialIndexPattern = '',\n name: initialName = '',\n },\n requireTimestampField = false,\n }", + "description": [], + "signature": [ + "DataViewEditorServiceConstructorArgs" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.dataViewNames$", + "type": "Object", + "tags": [], + "label": "dataViewNames$", + "description": [], + "signature": [ + "Observable", + "" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.rollupIndicesCaps$", + "type": "Object", + "tags": [], + "label": "rollupIndicesCaps$", + "description": [], + "signature": [ + "Observable", + "<", + "RollupIndicesCapsResponse", + ">" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.isLoadingSources$", + "type": "Object", + "tags": [], + "label": "isLoadingSources$", + "description": [], + "signature": [ + "Observable", + "" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.loadingTimestampFields$", + "type": "Object", + "tags": [], + "label": "loadingTimestampFields$", + "description": [], + "signature": [ + "Observable", + "" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.timestampFieldOptions$", + "type": "Object", + "tags": [], + "label": "timestampFieldOptions$", + "description": [], + "signature": [ + "Observable", + "<", + "TimestampOption", + "[]>" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.rollupIndex$", + "type": "Object", + "tags": [], + "label": "rollupIndex$", + "description": [], + "signature": [ + "Observable", + "" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.matchedIndices$", + "type": "Object", + "tags": [], + "label": "matchedIndices$", + "description": [], + "signature": [ + "Observable", + "<", + "MatchedIndicesSet", + ">" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.setIndexPattern", + "type": "Function", + "tags": [], + "label": "setIndexPattern", + "description": [], + "signature": [ + "(indexPattern: string) => void" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.setIndexPattern.$1", + "type": "string", + "tags": [], + "label": "indexPattern", + "description": [], + "signature": [ + "string" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.setAllowHidden", + "type": "Function", + "tags": [], + "label": "setAllowHidden", + "description": [], + "signature": [ + "(allowHidden: boolean) => void" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.setAllowHidden.$1", + "type": "boolean", + "tags": [], + "label": "allowHidden", + "description": [], + "signature": [ + "boolean" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.setType", + "type": "Function", + "tags": [], + "label": "setType", + "description": [], + "signature": [ + "(type: ", + { + "pluginId": "dataViews", + "scope": "public", + "docId": "kibDataViewsPluginApi", + "section": "def-public.INDEX_PATTERN_TYPE", + "text": "INDEX_PATTERN_TYPE" + }, + ") => void" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.setType.$1", + "type": "Enum", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "public", + "docId": "kibDataViewsPluginApi", + "section": "def-public.INDEX_PATTERN_TYPE", + "text": "INDEX_PATTERN_TYPE" + } + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.indexPatternValidationProvider", + "type": "Function", + "tags": [], + "label": "indexPatternValidationProvider", + "description": [], + "signature": [ + "() => Promise<{ rollupIndex: string | null | undefined; matchedIndices: ", + "MatchedIndicesSet", + "; }>" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.DataViewEditorService.destroy", + "type": "Function", + "tags": [], + "label": "destroy", + "description": [], + "signature": [ + "() => void" + ], + "path": "src/plugins/data_view_editor/public/data_view_editor_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "functions": [], "interfaces": [ { @@ -298,6 +600,28 @@ "path": "src/plugins/data_view_editor/public/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "dataViewEditor", + "id": "def-public.PluginStart.dataViewEditorServiceFactory", + "type": "Function", + "tags": [], + "label": "dataViewEditorServiceFactory", + "description": [ + "\nHelper method to generate a new data view editor service." + ], + "signature": [ + "() => Promise" + ], + "path": "src/plugins/data_view_editor/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [ + "DataViewEditorService" + ] } ], "lifecycle": "start", diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 10ad3cbc157428..9faca8b31e54fe 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; @@ -21,13 +21,16 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 16 | 0 | 7 | 0 | +| 35 | 0 | 25 | 5 | ## Client ### Start +### Classes + + ### Interfaces diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 10c172ab937ecb..8bcfd4d30daadc 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-26 +date: 2023-09-27 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 84cd5b94c54f4c..3eb4fe4a74a2f5 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-26 +date: 2023-09-27 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 1d36021b830423..d975cfb1c88261 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -575,6 +575,10 @@ "plugin": "canvas", "path": "x-pack/plugins/canvas/public/components/datasource/datasource_component.js" }, + { + "plugin": "presentationUtil", + "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" + }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/public/applications/analytics/utils/find_or_create_data_view.ts" @@ -779,10 +783,6 @@ "plugin": "inputControlVis", "path": "src/plugins/input_control_vis/public/test_utils/get_index_pattern_mock.ts" }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" - }, { "plugin": "visTypeTimelion", "path": "src/plugins/vis_types/timelion/public/helpers/arg_value_suggestions.ts" @@ -8568,6 +8568,10 @@ "plugin": "canvas", "path": "x-pack/plugins/canvas/public/components/datasource/datasource_component.js" }, + { + "plugin": "presentationUtil", + "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" + }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/public/applications/analytics/utils/find_or_create_data_view.ts" @@ -8772,10 +8776,6 @@ "plugin": "inputControlVis", "path": "src/plugins/input_control_vis/public/test_utils/get_index_pattern_mock.ts" }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" - }, { "plugin": "visTypeTimelion", "path": "src/plugins/vis_types/timelion/public/helpers/arg_value_suggestions.ts" @@ -15622,6 +15622,10 @@ "plugin": "canvas", "path": "x-pack/plugins/canvas/public/components/datasource/datasource_component.js" }, + { + "plugin": "presentationUtil", + "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" + }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/public/applications/analytics/utils/find_or_create_data_view.ts" @@ -15826,10 +15830,6 @@ "plugin": "inputControlVis", "path": "src/plugins/input_control_vis/public/test_utils/get_index_pattern_mock.ts" }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/data_views/data_views.story.ts" - }, { "plugin": "visTypeTimelion", "path": "src/plugins/vis_types/timelion/public/helpers/arg_value_suggestions.ts" diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 1e0f35b08fd896..5c7c7d91590af3 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.devdocs.json b/api_docs/data_visualizer.devdocs.json index d583f8f3d85b7e..058013cc04b0fe 100644 --- a/api_docs/data_visualizer.devdocs.json +++ b/api_docs/data_visualizer.devdocs.json @@ -302,24 +302,24 @@ "misc": [ { "parentPluginId": "dataVisualizer", - "id": "def-public.DataComparisonSpec", + "id": "def-public.DataDriftSpec", "type": "Type", "tags": [], - "label": "DataComparisonSpec", + "label": "DataDriftSpec", "description": [], "signature": [ "React.FunctionComponent<", - "DataComparisonDetectionAppStateProps", + "DataDriftDetectionAppStateProps", ">" ], - "path": "x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_app_state.tsx", + "path": "x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_app_state.tsx", "deprecated": false, "trackAdoption": false, "returnComment": [], "children": [ { "parentPluginId": "dataVisualizer", - "id": "def-public.DataComparisonSpec.$1", + "id": "def-public.DataDriftSpec.$1", "type": "CompoundType", "tags": [], "label": "props", @@ -333,7 +333,7 @@ }, { "parentPluginId": "dataVisualizer", - "id": "def-public.DataComparisonSpec.$2", + "id": "def-public.DataDriftSpec.$2", "type": "Any", "tags": [], "label": "context", @@ -481,8 +481,8 @@ "label": "DataVisualizerPluginStart", "description": [], "signature": [ - "{ getFileDataVisualizerComponent: () => Promise<() => React.FC>; getIndexDataVisualizerComponent: () => Promise<() => React.FC>; getDataComparisonComponent: () => Promise<() => React.FC<", - "DataComparisonDetectionAppStateProps", + "{ getFileDataVisualizerComponent: () => Promise<() => React.FC>; getIndexDataVisualizerComponent: () => Promise<() => React.FC>; getDataDriftComponent: () => Promise<() => React.FC<", + "DataDriftDetectionAppStateProps", ">>; getMaxBytesFormatted: () => string; }" ], "path": "x-pack/plugins/data_visualizer/public/plugin.ts", diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 03205c22a0910f..b26b5722348b63 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-26 +date: 2023-09-27 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 3977a95f479c18..02d5eca6f24b77 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -18,14 +18,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | ml, stackAlerts | - | | | ruleRegistry, ml, securitySolution, observability, infra, monitoring, stackAlerts, synthetics, transform, uptime | - | -| | @kbn/es-query, @kbn/visualization-ui-components, securitySolution, observability, timelines, lists, threatIntelligence, savedSearch, dataViews, logsShared, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, lens, triggersActionsUi, dataVisualizer, ml, apm, exploratoryView, fleet, stackAlerts, infra, canvas, enterpriseSearch, graph, visTypeTimeseries, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, data | - | -| | @kbn/es-query, @kbn/visualization-ui-components, securitySolution, observability, timelines, lists, threatIntelligence, savedSearch, dataViews, logsShared, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, lens, triggersActionsUi, dataVisualizer, ml, apm, exploratoryView, fleet, stackAlerts, infra, canvas, enterpriseSearch, graph, visTypeTimeseries, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, data | - | -| | @kbn/es-query, @kbn/visualization-ui-components, securitySolution, observability, timelines, lists, threatIntelligence, savedSearch, data, logsShared, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, lens, triggersActionsUi, dataVisualizer, ml, apm, exploratoryView, fleet, stackAlerts, infra, canvas, enterpriseSearch, graph, visTypeTimeseries, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega | - | +| | @kbn/es-query, @kbn/visualization-ui-components, securitySolution, observability, timelines, lists, threatIntelligence, savedSearch, dataViews, logsShared, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, lens, triggersActionsUi, dataVisualizer, ml, apm, exploratoryView, fleet, stackAlerts, infra, canvas, presentationUtil, enterpriseSearch, graph, visTypeTimeseries, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, visTypeTimelion, visTypeVega, data | - | +| | @kbn/es-query, @kbn/visualization-ui-components, securitySolution, observability, timelines, lists, threatIntelligence, savedSearch, dataViews, logsShared, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, lens, triggersActionsUi, dataVisualizer, ml, apm, exploratoryView, fleet, stackAlerts, infra, canvas, presentationUtil, enterpriseSearch, graph, visTypeTimeseries, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, visTypeTimelion, visTypeVega, data | - | +| | @kbn/es-query, @kbn/visualization-ui-components, securitySolution, observability, timelines, lists, threatIntelligence, savedSearch, data, logsShared, savedObjectsManagement, unifiedSearch, controls, @kbn/unified-field-list, lens, triggersActionsUi, dataVisualizer, ml, apm, exploratoryView, fleet, stackAlerts, infra, canvas, presentationUtil, enterpriseSearch, graph, visTypeTimeseries, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, visTypeTimelion, visTypeVega | - | | | home, data, esUiShared, savedObjectsManagement, ml, exploratoryView, fleet, observability, apm, indexLifecycleManagement, observabilityOnboarding, synthetics, upgradeAssistant, uptime, ux, kibanaOverview | - | -| | share, uiActions, guidedOnboarding, home, serverless, management, spaces, security, savedObjects, indexManagement, visualizations, controls, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, alerting, triggersActionsUi, cases, licenseManagement, advancedSettings, maps, dataVisualizer, aiops, ml, exploratoryView, fleet, observability, infra, profiling, apm, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, crossClusterReplication, enterpriseSearch, globalSearchBar, graph, grokdebugger, indexLifecycleManagement, ingestPipelines, logstash, monitoring, observabilityOnboarding, osquery, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | +| | share, uiActions, guidedOnboarding, home, serverless, management, spaces, security, savedObjects, indexManagement, visualizations, controls, dashboard, savedObjectsTagging, expressionXY, lens, expressionMetricVis, expressionGauge, alerting, triggersActionsUi, cases, licenseManagement, advancedSettings, maps, dataVisualizer, aiops, ml, exploratoryView, fleet, infra, profiling, apm, expressionImage, expressionMetric, expressionError, expressionRevealImage, expressionRepeatImage, expressionShape, crossClusterReplication, enterpriseSearch, globalSearchBar, graph, grokdebugger, indexLifecycleManagement, ingestPipelines, logstash, monitoring, observabilityOnboarding, osquery, devTools, painlessLab, remoteClusters, rollup, searchprofiler, newsfeed, securitySolution, snapshotRestore, synthetics, transform, upgradeAssistant, uptime, ux, watcher, cloudDataMigration, console, filesManagement, kibanaOverview, visDefaultEditor, expressionHeatmap, expressionLegacyMetricVis, expressionPartitionVis, expressionTagcloud, visTypeTable, visTypeTimelion, visTypeTimeseries, visTypeVega, visTypeVislib | - | | | encryptedSavedObjects, actions, data, ml, securitySolution, logstash, cloudChat | - | | | actions, ml, savedObjectsTagging, enterpriseSearch | - | -| | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, presentationUtil, visualizations, dataVisualizer, ml, aiops, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | +| | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, dataVisualizer, ml, aiops, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core, ml, savedObjects, embeddable, visualizations, canvas, graph, @kbn/core-saved-objects-common, @kbn/core-saved-objects-server, actions, alerting, securitySolution, savedSearch, enterpriseSearch, taskManager, @kbn/core-saved-objects-server-internal, @kbn/core-saved-objects-api-server | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | stackAlerts, infra, graph, inputControlVis, securitySolution, savedObjects | - | @@ -60,7 +60,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | monitoring | - | | | dataVisualizer, exploratoryView, fleet, cloudSecurityPosture, discoverEnhanced, osquery, synthetics | - | -| | @kbn/core-plugins-browser-internal, @kbn/core-root-browser-internal, home, savedObjects, unifiedSearch, presentationUtil, visualizations, fileUpload, dashboardEnhanced, transform, discover, dataVisualizer | - | +| | @kbn/core-plugins-browser-internal, @kbn/core-root-browser-internal, home, savedObjects, unifiedSearch, visualizations, fileUpload, dashboardEnhanced, transform, discover, dataVisualizer | - | | | @kbn/core, @kbn/core-lifecycle-browser, @kbn/core-saved-objects-browser-internal, visualizations, exploratoryView, transform, @kbn/core-saved-objects-browser-mocks | - | | | actions, alerting | - | | | discover | - | @@ -76,7 +76,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | home, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-browser-internal, savedObjects, visualizations, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-browser-internal | - | -| | savedObjects, presentationUtil, @kbn/core-saved-objects-browser-mocks, dashboardEnhanced, @kbn/core-saved-objects-browser-internal | - | +| | savedObjects, @kbn/core-saved-objects-browser-mocks, dashboardEnhanced, @kbn/core-saved-objects-browser-internal | - | | | savedObjects, @kbn/core-saved-objects-browser-mocks, dashboardEnhanced, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-browser-mocks, savedObjects, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-browser-internal | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 71e6a906296dc7..ae4b936e620544 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -535,7 +535,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/data/types.ts#:~:text=fieldFormats), [data_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/data/data_service.ts#:~:text=fieldFormats) | - | -| | [show_settings.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/show_settings.tsx#:~:text=toMountPoint), [show_settings.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/show_settings.tsx#:~:text=toMountPoint), [confirm_overlays.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_listing/confirm_overlays.tsx#:~:text=toMountPoint), [confirm_overlays.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_listing/confirm_overlays.tsx#:~:text=toMountPoint), [dashboard_no_match.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx#:~:text=toMountPoint), [dashboard_no_match.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx#:~:text=toMountPoint), [dashboard_listing.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx#:~:text=toMountPoint), [dashboard_listing.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx#:~:text=toMountPoint), [open_replace_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/open_replace_panel_flyout.tsx#:~:text=toMountPoint), [open_replace_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/open_replace_panel_flyout.tsx#:~:text=toMountPoint)+ 4 more | - | +| | [show_settings.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/show_settings.tsx#:~:text=toMountPoint), [show_settings.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/show_settings.tsx#:~:text=toMountPoint), [confirm_overlays.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_listing/confirm_overlays.tsx#:~:text=toMountPoint), [confirm_overlays.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_listing/confirm_overlays.tsx#:~:text=toMountPoint), [dashboard_no_match.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx#:~:text=toMountPoint), [dashboard_no_match.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx#:~:text=toMountPoint), [dashboard_listing.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx#:~:text=toMountPoint), [dashboard_listing.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx#:~:text=toMountPoint), [open_replace_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/open_replace_panel_flyout.tsx#:~:text=toMountPoint), [open_replace_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/open_replace_panel_flyout.tsx#:~:text=toMountPoint)+ 2 more | - | | | [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=KibanaThemeProvider), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=KibanaThemeProvider), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=KibanaThemeProvider), [dashboard_router.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/dashboard_router.tsx#:~:text=KibanaThemeProvider), [dashboard_router.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/dashboard_router.tsx#:~:text=KibanaThemeProvider), [dashboard_router.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/dashboard_router.tsx#:~:text=KibanaThemeProvider) | - | | | [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference) | - | @@ -630,12 +630,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [document_stats.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_row/document_stats.tsx#:~:text=fieldFormats), [top_values.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx#:~:text=fieldFormats), [choropleth_map.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/choropleth_map.tsx#:~:text=fieldFormats) | - | +| | [document_stats.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_row/document_stats.tsx#:~:text=fieldFormats), [top_values.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx#:~:text=fieldFormats), [choropleth_map.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_expanded_row/choropleth_map.tsx#:~:text=fieldFormats), [default_value_formatter.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/data_drift/charts/default_value_formatter.ts#:~:text=fieldFormats) | - | | | [use_data_visualizer_grid_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts#:~:text=title), [use_data_visualizer_grid_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts#:~:text=title) | - | | | [use_data_visualizer_grid_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts#:~:text=title), [use_data_visualizer_grid_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts#:~:text=title) | - | | | [use_data_visualizer_grid_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_data_visualizer_grid_data.ts#:~:text=title) | - | | | [results_links.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx#:~:text=indexPatternId), [actions_panel.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/actions_panel/actions_panel.tsx#:~:text=indexPatternId) | - | -| | [file_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx#:~:text=KibanaThemeProvider), [file_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx#:~:text=KibanaThemeProvider), [file_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx#:~:text=KibanaThemeProvider), [grid_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx#:~:text=KibanaThemeProvider), [grid_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx#:~:text=KibanaThemeProvider), [grid_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx#:~:text=KibanaThemeProvider), [index_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx#:~:text=KibanaThemeProvider), [index_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx#:~:text=KibanaThemeProvider), [index_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx#:~:text=KibanaThemeProvider), [data_comparison_app_state.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_app_state.tsx#:~:text=KibanaThemeProvider)+ 2 more | - | +| | [file_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx#:~:text=KibanaThemeProvider), [file_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx#:~:text=KibanaThemeProvider), [file_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx#:~:text=KibanaThemeProvider), [grid_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx#:~:text=KibanaThemeProvider), [grid_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx#:~:text=KibanaThemeProvider), [grid_embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/embeddables/grid_embeddable/grid_embeddable.tsx#:~:text=KibanaThemeProvider), [index_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx#:~:text=KibanaThemeProvider), [index_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx#:~:text=KibanaThemeProvider), [index_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx#:~:text=KibanaThemeProvider), [data_drift_app_state.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_app_state.tsx#:~:text=KibanaThemeProvider)+ 2 more | - | | | [index_data_visualizer.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx#:~:text=savedObjects) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/common/types/index.ts#:~:text=SimpleSavedObject), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/data_visualizer/common/types/index.ts#:~:text=SimpleSavedObject) | - | @@ -1237,7 +1237,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [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) | - | | | [render_cell_value.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/alerts_table/render_cell_value.tsx#:~:text=DeprecatedCellValueElementProps), [render_cell_value.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability/public/components/alerts_table/render_cell_value.tsx#:~:text=DeprecatedCellValueElementProps) | - | @@ -1290,9 +1289,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [data_views.story.ts](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/services/data_views/data_views.story.ts#:~:text=title), [data_views.story.ts](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/services/data_views/data_views.story.ts#:~:text=title) | - | | | [data_views.story.ts](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/services/data_views/data_views.story.ts#:~:text=title) | - | | | [saved_object_save_modal_dashboard.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal), [saved_object_save_modal_dashboard.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | -| | [dashboards_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/services/dashboards/dashboards_service.ts#:~:text=savedObjects) | - | -| | [dashboards_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/services/dashboards/dashboards_service.ts#:~:text=find) | - | -| | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/services/dashboards/types.ts#:~:text=SimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/services/dashboards/types.ts#:~:text=SimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/services/dashboards/types.ts#:~:text=SimpleSavedObject) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 81ecaa3b56c290..33493d3e7c5fe2 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index f4c8a663168f74..e164309adfc176 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-26 +date: 2023-09-27 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 9470adde294418..502e441a59e125 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-26 +date: 2023-09-27 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 ca1aa13a7a5754..0707de8d80f73b 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-26 +date: 2023-09-27 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 92763c877c9a8e..a43391dfdd6050 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-26 +date: 2023-09-27 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 02d6d501b1700f..9516628c66de86 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index e0099830f1f896..10b115cf089323 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -7338,6 +7338,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "embeddable", + "id": "def-public.EmbeddablePackageState.size", + "type": "Object", + "tags": [], + "label": "size", + "description": [], + "signature": [ + "{ width?: number | undefined; height?: number | undefined; } | undefined" + ], + "path": "src/plugins/embeddable/public/lib/state_transfer/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "embeddable", "id": "def-public.EmbeddablePackageState.searchSessionId", diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 78fa7d6fbef6b5..b967fd65517081 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 534 | 1 | 434 | 7 | +| 535 | 1 | 435 | 7 | ## Client diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 6b4f362298339c..fe5578c5872b1b 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-26 +date: 2023-09-27 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 db61a703d2915d..d8bd4252fc1056 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.devdocs.json b/api_docs/enterprise_search.devdocs.json index aa4cff43ad7807..3d9074b3bc9cab 100644 --- a/api_docs/enterprise_search.devdocs.json +++ b/api_docs/enterprise_search.devdocs.json @@ -5,14 +5,30 @@ "functions": [], "interfaces": [], "enums": [], - "misc": [], + "misc": [ + { + "parentPluginId": "enterpriseSearch", + "id": "def-public.EnterpriseSearchPublicStart", + "type": "Type", + "tags": [], + "label": "EnterpriseSearchPublicStart", + "description": [], + "signature": [ + "Promise" + ], + "path": "x-pack/plugins/enterprise_search/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "objects": [], "start": { "parentPluginId": "enterpriseSearch", - "id": "def-public.EnterpriseSearchPublicStart", + "id": "def-public.EnterpriseSearchPublicSetup", "type": "Type", "tags": [], - "label": "EnterpriseSearchPublicStart", + "label": "EnterpriseSearchPublicSetup", "description": [], "signature": [ "void" diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index e23ffd9c0e0904..a1feaa96c7262a 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; @@ -28,6 +28,9 @@ Contact [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/te ### Start +### Consts, variables and types + + ## Server ### Objects diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 3d88e82266b094..e1de23125551e4 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 67a2fa95c3019f..8612928b4d8973 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index d7f54f483495f5..86825377b6cc1d 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2023-09-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index ca37dcdc39e72f..d262a795e9dfcb 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-26 +date: 2023-09-27 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 3d41811601ad1f..3534c64c75114b 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-26 +date: 2023-09-27 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 5ed1bbfab229c1..d8f8ce4777c0fb 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-26 +date: 2023-09-27 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 ad2dfe5486f851..9c8be61eab7e35 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-26 +date: 2023-09-27 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 c77732e6854bec..abbc24ecd3dc18 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-26 +date: 2023-09-27 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 f4efc14efc8551..4d7e8563ded553 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-26 +date: 2023-09-27 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 991a3ccc2ecfd5..a9676a6672dcb2 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-26 +date: 2023-09-27 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 3616b76fc9b8dd..cb4d694a4799f3 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-26 +date: 2023-09-27 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 ef0d0acf0cfa62..4fb5d3de6ab64f 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-26 +date: 2023-09-27 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 7d8b20f7423b3d..c0cc747d573610 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-26 +date: 2023-09-27 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 70d9fe0be3f658..32b4ba7b8e1be1 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-26 +date: 2023-09-27 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 f206257eb990fb..4072d1d65a1713 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-26 +date: 2023-09-27 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 fa40bf6fefc1b5..0241361493e489 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-26 +date: 2023-09-27 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 9bc625fef6886a..427994f18cc4f1 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-26 +date: 2023-09-27 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 58134a1646421c..b625cb5fea8da5 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-26 +date: 2023-09-27 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 2beb233b9c7bd0..3cb09730248db8 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-26 +date: 2023-09-27 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 0a4a09158b8dab..d319a8e453d2f6 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-26 +date: 2023-09-27 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 ba867d77d18dbc..acea1c1b4dc23f 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-26 +date: 2023-09-27 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 7c30ad8b841397..c1306492e6e9c9 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-26 +date: 2023-09-27 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 8472065eba41d3..52a957d804bb40 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-26 +date: 2023-09-27 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 c29a23abef03d2..18046b81816fe4 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-26 +date: 2023-09-27 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 2c2ae86b9c9d45..2581af68b9cb5f 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-26 +date: 2023-09-27 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 df980b8e1e648a..34fa9db21d7361 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-26 +date: 2023-09-27 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 8c8db8cda054b9..b9ada15f3ffcf0 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-26 +date: 2023-09-27 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 03efc5f145f504..bf2a070742443d 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-26 +date: 2023-09-27 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 d580d7279dca1a..4029b9f116b8c2 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-26 +date: 2023-09-27 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 37ffce58d21215..de6dc19aaaae61 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index b9e6e34026aa3c..7de9acbd421237 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 537827b5f495f4..76744edfef6fa8 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-26 +date: 2023-09-27 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 f5a8d45c506925..9825df29f4a7f9 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-26 +date: 2023-09-27 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 202e64cb650074..9534753171845e 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-26 +date: 2023-09-27 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 d04cba38b65e6a..ffa2697b5764f8 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.devdocs.json b/api_docs/kbn_aiops_components.devdocs.json index 702a63d266befc..dffa211061c676 100644 --- a/api_docs/kbn_aiops_components.devdocs.json +++ b/api_docs/kbn_aiops_components.devdocs.json @@ -360,6 +360,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/aiops-components", + "id": "def-common.DocumentCountChartProps.height", + "type": "number", + "tags": [], + "label": "height", + "description": [ + "Optional chart height" + ], + "signature": [ + "number | undefined" + ], + "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/aiops-components", "id": "def-common.DocumentCountChartProps.chartPoints", @@ -589,6 +605,22 @@ "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/aiops-components", + "id": "def-common.DocumentCountChartProps.dataTestSubj", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [ + "Optional data-test-subject" + ], + "signature": [ + "string | undefined" + ], + "path": "x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index e453c0eefb68ab..3e9add987aa659 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 33 | 0 | 0 | 0 | +| 35 | 0 | 0 | 0 | ## Common diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index e385fd4517c2c7..5c24f9e78cb6fd 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-26 +date: 2023-09-27 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 42704e94f816df..d52e7cc4fa8cdb 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-26 +date: 2023-09-27 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 e322ca58e94266..69e289a1fd58b5 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-26 +date: 2023-09-27 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 50486c8ad807f8..4ce8b147a1c2c8 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-26 +date: 2023-09-27 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 648f53b3d0e061..9b493b17c6f902 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-26 +date: 2023-09-27 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 7f17d6c2e675f8..b21b2bccbf7f7f 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-26 +date: 2023-09-27 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 adbb90ee01e6e1..b207525eeca926 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -662,6 +662,14 @@ "plugin": "@kbn/core-root-server-internal", "path": "packages/core/root/core-root-server-internal/src/server.ts" }, + { + "plugin": "@kbn/core-notifications-browser-internal", + "path": "packages/core/notifications/core-notifications-browser-internal/src/toasts/telemetry/event_reporter.ts" + }, + { + "plugin": "@kbn/core-notifications-browser-internal", + "path": "packages/core/notifications/core-notifications-browser-internal/src/toasts/telemetry/event_reporter.ts" + }, { "plugin": "@kbn/core-analytics-browser-internal", "path": "packages/core/analytics/core-analytics-browser-internal/src/track_clicks.ts" diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 8dc81b42cacd30..f93c4814632a74 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-26 +date: 2023-09-27 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 e9450ce0f465cd..f0072b2e611b8f 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-26 +date: 2023-09-27 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 1789d7c2204b8c..bda4aa4744c45f 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-26 +date: 2023-09-27 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 944c658d43ed12..d6f992237079ec 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-26 +date: 2023-09-27 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 f99f5d6067e736..77ddc29edf664a 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-26 +date: 2023-09-27 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 05f6b5377964c1..e0560f560a3a00 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-26 +date: 2023-09-27 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 1df6fc7694cc64..5fafe6c839ebf9 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-26 +date: 2023-09-27 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 e7655fe80551e0..8952dace68b2f0 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-26 +date: 2023-09-27 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 cb95b018fd98f1..06014e04591151 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-26 +date: 2023-09-27 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 8f3fb9d5b7ed22..90a8fed671909d 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-26 +date: 2023-09-27 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 cd10d689c2b4e7..f7c71f7bb69523 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-26 +date: 2023-09-27 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 1431068c738ec6..460e14f064547b 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-26 +date: 2023-09-27 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 203243d1243efd..eb1ccf888893fe 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-26 +date: 2023-09-27 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 10fc0677fd070f..34646553e760d6 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-26 +date: 2023-09-27 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 9b3b38d498a718..8347d9d58f6457 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-26 +date: 2023-09-27 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 29e1f6b487ed48..b0cbb5ea164a51 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-26 +date: 2023-09-27 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 516cb6f154c35e..f36300aedeec99 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-26 +date: 2023-09-27 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 5e4b65df6617bf..e7320e039faffb 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-26 +date: 2023-09-27 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 7ea9623fbede07..e4e9fcfe8e60ed 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-26 +date: 2023-09-27 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 6568dcfb4ebfbc..58edce24c43e29 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-26 +date: 2023-09-27 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 13934919915a67..080999aa9e01ab 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-26 +date: 2023-09-27 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 81c1e78cdb4ede..b960b02b89b2d6 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-26 +date: 2023-09-27 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 923d802e14cf35..e110d29f3a44fc 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-26 +date: 2023-09-27 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 892bb885b03e3b..02a6840e68f62c 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-26 +date: 2023-09-27 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 7f75356ee12493..038758b00f6f8e 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-26 +date: 2023-09-27 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 fbdfdaa40559ad..709b7ce69ee92f 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-26 +date: 2023-09-27 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 b6197f9bb8f6d6..2cc9e3616b0df4 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-26 +date: 2023-09-27 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 ec7f4781572a2d..9267f6416b0fc7 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-26 +date: 2023-09-27 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 1961fd018bf237..7ee1c9185b7fc8 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-26 +date: 2023-09-27 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 ea1ddac1acccb9..10d45333c71bdb 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-26 +date: 2023-09-27 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 556d8f62a9e150..64a880c014f5de 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-26 +date: 2023-09-27 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 6d148521ea8d14..471633511b6ffd 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-26 +date: 2023-09-27 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 cc3dd8e056844b..3e5e0a21393c83 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-26 +date: 2023-09-27 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 b07a9786502f73..a7b0d9808c5c3b 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-26 +date: 2023-09-27 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 5fea29f4e0e1db..11a1428b584919 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-26 +date: 2023-09-27 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 7c82f557d2a87d..df98a0e6edb273 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-26 +date: 2023-09-27 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 312d72590a91d4..e44c288783f903 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-26 +date: 2023-09-27 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 a59ca46e539c72..e7fb15a08db41a 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-26 +date: 2023-09-27 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 cf1cc04345fd30..870ea5a8ed97cf 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-26 +date: 2023-09-27 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 c29a0840b354e7..fc23b6d499462d 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-26 +date: 2023-09-27 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 e2049a9a65f2e0..698ce102960b28 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-26 +date: 2023-09-27 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 5bac2e0c37f33d..2ec632e026073a 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-26 +date: 2023-09-27 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 43d3f144856b97..eafbbbbfb7e2ce 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-26 +date: 2023-09-27 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 8b9af9a5144a58..7725f53b100b2b 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-26 +date: 2023-09-27 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 7c01dd0d69165c..63d9aef51ba3e8 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-26 +date: 2023-09-27 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 478da40a474625..bb56162d70dd68 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-26 +date: 2023-09-27 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 15194a6f8e001b..a515fcb18dff80 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-26 +date: 2023-09-27 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 30ee4c3ab88e0e..2857bb8d30e304 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-26 +date: 2023-09-27 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 188e1264b15506..39fa8b6558162b 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-26 +date: 2023-09-27 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 c29fe430ddf702..da8e0297172b9e 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-26 +date: 2023-09-27 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 c59f5ee00abc1a..8ab9f727a74624 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-26 +date: 2023-09-27 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 c51888c62a08ae..264d9d1e80a2fb 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-26 +date: 2023-09-27 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 0397d0752b4464..fcd4fcef062ce2 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-26 +date: 2023-09-27 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 a50657c6e38b34..88dd1c7a980932 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-26 +date: 2023-09-27 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 5d8c66c15b68fb..fe62791fa9db9e 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-26 +date: 2023-09-27 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 cd5e0c9b6441c7..354d0881fb28d1 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-26 +date: 2023-09-27 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 e16a6ab16a3e63..439d757353ac95 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-26 +date: 2023-09-27 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 d481eadb89a3a3..9f5687f9bf4ce1 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-26 +date: 2023-09-27 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 92f2d33e830855..dacf337e259b04 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-26 +date: 2023-09-27 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 4ceec404db480b..25d2c6e975fe97 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-26 +date: 2023-09-27 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 386c20d007458c..44e4973ecac28f 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-26 +date: 2023-09-27 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 8b13822bbdb7eb..bfb85d80fcaa4d 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-26 +date: 2023-09-27 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 b21cb7e2b2e644..8b3fc320f82e9a 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-26 +date: 2023-09-27 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 bc244a60c7b760..e514fb26d44fc0 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-26 +date: 2023-09-27 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 c8d25f2ac6a485..27ee7dbdce221b 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-26 +date: 2023-09-27 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 5aea0dcc2c8ea1..aa07083270e39c 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-26 +date: 2023-09-27 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 b398cd35681fac..77a68b1e88b76a 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-26 +date: 2023-09-27 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 a95ec4902fe1e7..2a63618fc65aff 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-26 +date: 2023-09-27 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 62f1a86399f760..07eb8e6b3c4cf2 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-26 +date: 2023-09-27 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 e45675783de061..df37f26a04f3e1 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-26 +date: 2023-09-27 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 9e6579bb6e9207..f7e305048e64fd 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-26 +date: 2023-09-27 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 ab219e38cb272e..4762e16754e446 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-26 +date: 2023-09-27 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 55e1290c8aafff..2d3e1a1a1bda7d 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-26 +date: 2023-09-27 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 e4b22cfe3cff8c..e541b9fc65349f 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-26 +date: 2023-09-27 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 70e9af49d44328..426ec9451ed874 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-26 +date: 2023-09-27 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 12da90107a28ba..7e9cd9324b3fff 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-26 +date: 2023-09-27 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 3ffa742445af22..3d41fa16a952bc 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-26 +date: 2023-09-27 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 c157f6abb8cdf5..3b75bd44a33a00 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-26 +date: 2023-09-27 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 b518d18415957f..f3a5a6c0f144d5 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-26 +date: 2023-09-27 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 329e48bf6c67f1..5c4357e365ddec 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-26 +date: 2023-09-27 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 5a59259a19c5f8..8cf0ca42347076 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-26 +date: 2023-09-27 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 010a58f8d31826..f89f870cf1a91e 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-26 +date: 2023-09-27 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 726886a22b67d3..b4666e03843bbb 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-26 +date: 2023-09-27 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 e28c4a5234f627..bf811a0ebdb7c6 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-26 +date: 2023-09-27 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 20731a0e92ae24..1fa83dadeb6ca2 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-26 +date: 2023-09-27 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 fc51d7010efeaf..4a58ea937f2e43 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-26 +date: 2023-09-27 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 ce04788d2cb9bb..c2e252a36883c7 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-26 +date: 2023-09-27 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 53269aa7bb8f1a..bd8a13595ee89b 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-26 +date: 2023-09-27 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 a728eb94d98bbd..1e39e17f6eea13 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-26 +date: 2023-09-27 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 9d505dced37d1d..13b0341a011ebe 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-26 +date: 2023-09-27 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 fba13f8a6b6250..82980f92463038 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-26 +date: 2023-09-27 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 8df1fc093ea8cf..09122b26b22be8 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-26 +date: 2023-09-27 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 4b39d024f5f5ff..e752f460319b5f 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-26 +date: 2023-09-27 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 f2b5b9831a4162..8a72477f0a7a39 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-26 +date: 2023-09-27 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 8b11a57de5e2a5..c4bd2938980f3f 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-26 +date: 2023-09-27 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 21a50d0c8c885a..d954beadc3508f 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-26 +date: 2023-09-27 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 e5f89cb8a7c5bf..f9d6da194067d1 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-26 +date: 2023-09-27 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 7d3812b5e8ba73..6ee60c96f2ad2c 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-26 +date: 2023-09-27 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 c71280ba593053..de8c19412e2bff 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-26 +date: 2023-09-27 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 904971793ae04b..bba55956eb84e8 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -8607,7 +8607,7 @@ }, { "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/bulk_delete_rules.ts" + "path": "x-pack/plugins/alerting/server/routes/rule/apis/bulk_delete/bulk_delete_rules_route.ts" }, { "plugin": "alerting", @@ -8665,22 +8665,6 @@ "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/router.mock.ts" }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/bulk_delete_rules.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/bulk_delete_rules.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/bulk_delete_rules.test.ts" - }, - { - "plugin": "alerting", - "path": "x-pack/plugins/alerting/server/routes/bulk_delete_rules.test.ts" - }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/bulk_disable_rules.test.ts" @@ -8725,6 +8709,22 @@ "plugin": "ruleRegistry", "path": "x-pack/plugins/rule_registry/server/routes/__mocks__/server.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/bulk_delete/bulk_delete_rules_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/bulk_delete/bulk_delete_rules_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/bulk_delete/bulk_delete_rules_route.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/rule/apis/bulk_delete/bulk_delete_rules_route.test.ts" + }, { "plugin": "indexManagement", "path": "x-pack/plugins/index_management/server/test/helpers/router_mock.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 7a4c2393c57185..2ba536265757dd 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-26 +date: 2023-09-27 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 50c42a9c5cf35b..b8232593e40c2a 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-26 +date: 2023-09-27 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 3cc4f242d7e113..5f6150e7fb007d 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-26 +date: 2023-09-27 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 2209c106c63a80..954266d219cd3a 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-26 +date: 2023-09-27 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 56b8936b3f716c..7564b892fdec15 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-26 +date: 2023-09-27 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 838f8ff2263f68..04bd666a92b4b2 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-26 +date: 2023-09-27 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 0cc05510a1ffad..98706c3e780d8f 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-26 +date: 2023-09-27 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 f9a71a2b62db98..efce31e852a4a5 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-26 +date: 2023-09-27 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 b0e3c5ba93dee6..65954d6124e410 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-26 +date: 2023-09-27 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 3051546888669b..323aef102549ec 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-26 +date: 2023-09-27 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 7e7161430198bb..b837a3b92545f9 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-26 +date: 2023-09-27 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.devdocs.json b/api_docs/kbn_core_lifecycle_browser.devdocs.json index fce341ae312bd1..802c3d212231fb 100644 --- a/api_docs/kbn_core_lifecycle_browser.devdocs.json +++ b/api_docs/kbn_core_lifecycle_browser.devdocs.json @@ -573,10 +573,6 @@ "plugin": "unifiedSearch", "path": "src/plugins/unified_search/public/types.ts" }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/dashboards/dashboards_service.ts" - }, { "plugin": "visualizations", "path": "src/plugins/visualizations/public/plugin.ts" diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 5b15ca47b8ba06..a741c13fa5aceb 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-26 +date: 2023-09-27 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 0a0b09c8badd2f..daed976b33d3b8 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-26 +date: 2023-09-27 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 e94a160c1fc753..e3670b884edb93 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-26 +date: 2023-09-27 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 910e75060fc093..8ae0c649273fd3 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-26 +date: 2023-09-27 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 5523472f15956c..a7fcc770e5d58f 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-26 +date: 2023-09-27 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 cef0f65f3a6fd4..44f8b0f80bd5df 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-26 +date: 2023-09-27 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 da9b23df4180d4..719ca58cbb71ee 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-26 +date: 2023-09-27 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 19294db4223bdb..b27036817417d6 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-26 +date: 2023-09-27 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 053a7eabc85bce..85080709f83031 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-26 +date: 2023-09-27 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 518f82123b9714..5a4c1a95a06c78 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-26 +date: 2023-09-27 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 b122c495844043..0a5a0899a03a36 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-26 +date: 2023-09-27 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 766cd857349d84..dcaebf6fe8729d 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-26 +date: 2023-09-27 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 7cc522ab4fd710..c63d7b7d37470f 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-26 +date: 2023-09-27 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 4393db1b67188d..82b1c21928b74e 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-26 +date: 2023-09-27 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 6ff8192a33ffb4..c09a8f3a694a4e 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-26 +date: 2023-09-27 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 48ed61324dceab..44c0112beb0ac4 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-26 +date: 2023-09-27 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 c6b0583a494000..5af06648592207 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-26 +date: 2023-09-27 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 2353acde456b1d..d015938118703d 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-26 +date: 2023-09-27 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 7457690f913bbe..87514d840bd902 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-26 +date: 2023-09-27 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.devdocs.json b/api_docs/kbn_core_notifications_browser_internal.devdocs.json index f77222a80fcd1a..4d6a55c60b3a39 100644 --- a/api_docs/kbn_core_notifications_browser_internal.devdocs.json +++ b/api_docs/kbn_core_notifications_browser_internal.devdocs.json @@ -53,7 +53,7 @@ "label": "setup", "description": [], "signature": [ - "({ uiSettings }: ", + "({ uiSettings, analytics }: ", "SetupDeps", ") => ", { @@ -73,7 +73,7 @@ "id": "def-common.NotificationsService.setup.$1", "type": "Object", "tags": [], - "label": "{ uiSettings }", + "label": "{ uiSettings, analytics }", "description": [], "signature": [ "SetupDeps" @@ -94,7 +94,7 @@ "label": "start", "description": [], "signature": [ - "({ i18n: i18nDep, overlays, theme, targetDomElement, }: ", + "({ analytics, i18n: i18nDep, overlays, theme, targetDomElement, }: ", "StartDeps", ") => ", { @@ -114,7 +114,7 @@ "id": "def-common.NotificationsService.start.$1", "type": "Object", "tags": [], - "label": "{\n i18n: i18nDep,\n overlays,\n theme,\n targetDomElement,\n }", + "label": "{\n analytics,\n i18n: i18nDep,\n overlays,\n theme,\n targetDomElement,\n }", "description": [], "signature": [ "StartDeps" @@ -820,7 +820,7 @@ "label": "NotificationsServiceContract", "description": [], "signature": [ - "{ start: ({ i18n: i18nDep, overlays, theme, targetDomElement, }: ", + "{ start: ({ analytics, i18n: i18nDep, overlays, theme, targetDomElement, }: ", "StartDeps", ") => ", { @@ -830,7 +830,7 @@ "section": "def-common.NotificationsStart", "text": "NotificationsStart" }, - "; setup: ({ uiSettings }: ", + "; setup: ({ uiSettings, analytics }: ", "SetupDeps", ") => ", { diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index 40b1f8be7dfe90..9b08ad8a037d39 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-26 +date: 2023-09-27 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 287c8a74fad4b3..a6c1accb9d2a36 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-26 +date: 2023-09-27 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 5b1e3101a2ffac..5d6c2bcf06b08a 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-26 +date: 2023-09-27 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 dd64cfe29323b9..8a559023beee93 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-26 +date: 2023-09-27 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 0fb419fdcb733a..82572885bc3620 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-26 +date: 2023-09-27 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 3ba18684a44f7c..2d64edbcad3af7 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-26 +date: 2023-09-27 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 994dafc58a4d8e..d22d98abcac8f9 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-26 +date: 2023-09-27 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 5dd09363bf9e30..e1e076e60c4413 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-26 +date: 2023-09-27 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 b067e04e1ec6ca..7b16754cc7f91f 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-26 +date: 2023-09-27 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 3eec8d4274255f..5a8432763f9ceb 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-26 +date: 2023-09-27 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 192e03884a75b0..6d46e36846cf9c 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-26 +date: 2023-09-27 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 4b9a512bc8fcbc..eb63fe9367a217 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-26 +date: 2023-09-27 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 10af856edf8096..df6d0304e3f1c5 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-26 +date: 2023-09-27 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 4afbd0e98e9943..6133ed94bf32eb 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-26 +date: 2023-09-27 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 badce6d9b916df..fbbf5d902cf477 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-26 +date: 2023-09-27 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 a1ce0b59501326..30d81791476ebf 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.devdocs.json +++ b/api_docs/kbn_core_saved_objects_api_browser.devdocs.json @@ -1627,10 +1627,6 @@ "plugin": "savedObjects", "path": "src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts" }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/dashboards/dashboards_service.ts" - }, { "plugin": "@kbn/core-saved-objects-browser-mocks", "path": "packages/core/saved-objects/core-saved-objects-browser-mocks/src/saved_objects_service.mock.ts" @@ -2983,18 +2979,6 @@ "plugin": "savedObjects", "path": "src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts" }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/dashboards/types.ts" - }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/dashboards/types.ts" - }, - { - "plugin": "presentationUtil", - "path": "src/plugins/presentation_util/public/services/dashboards/types.ts" - }, { "plugin": "visualizations", "path": "src/plugins/visualizations/public/vis_types/vis_type_alias_registry.ts" diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 4d1ade84be9b05..06f37273aa76e8 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index a683ee120aba99..68009380ec9be8 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-26 +date: 2023-09-27 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 0a5441e6c55b2f..44d858a0ea2cae 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-26 +date: 2023-09-27 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 d29fa9e4483f7e..0a958f0a9ed228 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-26 +date: 2023-09-27 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 697262b71b7baa..d671e5d248009e 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-26 +date: 2023-09-27 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 dffbe045e0cd69..844c5039b54c57 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-26 +date: 2023-09-27 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 9cffeee08182d8..338c47d45fb100 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-26 +date: 2023-09-27 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 cc0757aee2f955..48323a986ec9a6 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-26 +date: 2023-09-27 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 a8084f14ffd3b7..fa9373d45ea171 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-26 +date: 2023-09-27 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 3802848464e711..571e864de7d122 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-26 +date: 2023-09-27 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 dcc24edc9c5f53..9d525035b72e68 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-26 +date: 2023-09-27 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 0eb4e9216130b7..d0ab744e471e5a 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-26 +date: 2023-09-27 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 951d86ad2df82d..9b870df3d006d8 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-26 +date: 2023-09-27 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 5e110d387a5638..092e2372e11ddd 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-26 +date: 2023-09-27 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 529b309fdd3c7e..536df1203a13bd 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-26 +date: 2023-09-27 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 980928616a6daa..d8b957e20efcb5 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-26 +date: 2023-09-27 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 32433cc490bee4..4114737bc417ae 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-26 +date: 2023-09-27 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 647d18c24abcfe..9745ed2c76005c 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-26 +date: 2023-09-27 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 a5f5932e17a7d4..a4378e09393070 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-26 +date: 2023-09-27 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 fc88feddaebb5c..d8ee2308081cf1 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-26 +date: 2023-09-27 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 c481d0b18d2f1f..6638fb740dea71 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-26 +date: 2023-09-27 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 7883b700389555..edb94631e1768b 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-26 +date: 2023-09-27 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 72d0967423861f..c6ce0c4fd2c6ad 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-26 +date: 2023-09-27 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 f28ebd232b7774..c1ad9beeeccb8b 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-26 +date: 2023-09-27 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 5731cb092af07a..095a6edb5f0b79 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-26 +date: 2023-09-27 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 34a71628f265a8..49bc099779a62f 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-26 +date: 2023-09-27 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 0ed075823dc18d..ad1e5d907f693d 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-26 +date: 2023-09-27 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 22d14e0a6a2faf..e33c1dd2211188 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-26 +date: 2023-09-27 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 7409f81e1e4986..7b0ffda6e36332 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-26 +date: 2023-09-27 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 92afe9eb9d7e5c..2bbb1fbc8a5170 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-26 +date: 2023-09-27 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 f40b0a1777c3f8..9c2c62dd800346 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-26 +date: 2023-09-27 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 f6b53dd7d20443..962b4001f57d09 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-26 +date: 2023-09-27 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 07eca64b58269b..3b33e0af61ad8a 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-26 +date: 2023-09-27 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 f11b058e08badf..9b4af9a0986e33 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-26 +date: 2023-09-27 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 49ac9e4aa3f1d8..b09a457320651f 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-26 +date: 2023-09-27 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 893693c710eb01..c2e28091ddb861 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-26 +date: 2023-09-27 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 5c834c7985fe6e..1c5dbe324c8f55 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-26 +date: 2023-09-27 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 9ac271c76b0489..b4ffb257425cb3 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-26 +date: 2023-09-27 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 61cd48548beeeb..94e13c484e0002 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-26 +date: 2023-09-27 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 1ffabd4d5826e9..60b85eceb6b413 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-26 +date: 2023-09-27 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 12ddaf035fc2e9..ff1f1c51883037 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-26 +date: 2023-09-27 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 2e04904075c709..5757ab3fcd7f3e 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-26 +date: 2023-09-27 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 4355166d2051cb..7fbc1a1c6bfbcd 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-26 +date: 2023-09-27 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 1f3f864739cab1..cdc77fe7c1f775 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-26 +date: 2023-09-27 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 c81fd5690455e2..426f9a238f8af4 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-26 +date: 2023-09-27 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 4c4642432b108e..7372b306e47bb2 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-26 +date: 2023-09-27 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 afa7dd603786ee..2a5c4641ddf03b 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-26 +date: 2023-09-27 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 808aa13b21c1d9..7082fdc9b08622 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-26 +date: 2023-09-27 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 4c6e93acbd52fb..fc85743970e1c7 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-26 +date: 2023-09-27 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 37e74fc743a497..7301f58ed382c9 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-26 +date: 2023-09-27 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 2f800388997108..5774c855128a32 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.devdocs.json b/api_docs/kbn_deeplinks_ml.devdocs.json index a1d4f7262f54a1..8ba46143a88f35 100644 --- a/api_docs/kbn_deeplinks_ml.devdocs.json +++ b/api_docs/kbn_deeplinks_ml.devdocs.json @@ -45,7 +45,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"ml\" | \"ml:nodes\" | \"ml:notifications\" | \"ml:overview\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:singleMetricViewer\" | \"ml:dataComparison\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:logRateAnalysis\" | \"ml:logPatternAnalysis\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:memoryUsage\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\"" + "\"ml\" | \"ml:nodes\" | \"ml:notifications\" | \"ml:overview\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:singleMetricViewer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:logRateAnalysis\" | \"ml:logPatternAnalysis\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:memoryUsage\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\"" ], "path": "packages/deeplinks/ml/deep_links.ts", "deprecated": false, @@ -60,7 +60,7 @@ "label": "LinkId", "description": [], "signature": [ - "\"nodes\" | \"notifications\" | \"overview\" | \"settings\" | \"dataVisualizer\" | \"anomalyDetection\" | \"anomalyExplorer\" | \"singleMetricViewer\" | \"dataComparison\" | \"dataFrameAnalytics\" | \"resultExplorer\" | \"analyticsMap\" | \"aiOps\" | \"logRateAnalysis\" | \"logPatternAnalysis\" | \"changePointDetections\" | \"modelManagement\" | \"nodesOverview\" | \"memoryUsage\" | \"fileUpload\" | \"indexDataVisualizer\" | \"calendarSettings\" | \"filterListsSettings\"" + "\"nodes\" | \"notifications\" | \"overview\" | \"settings\" | \"dataVisualizer\" | \"anomalyDetection\" | \"anomalyExplorer\" | \"singleMetricViewer\" | \"dataDrift\" | \"dataFrameAnalytics\" | \"resultExplorer\" | \"analyticsMap\" | \"aiOps\" | \"logRateAnalysis\" | \"logPatternAnalysis\" | \"changePointDetections\" | \"modelManagement\" | \"nodesOverview\" | \"memoryUsage\" | \"fileUpload\" | \"indexDataVisualizer\" | \"calendarSettings\" | \"filterListsSettings\"" ], "path": "packages/deeplinks/ml/deep_links.ts", "deprecated": false, diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index fa818712486d11..799b85e2738419 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-26 +date: 2023-09-27 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 e337c7d60eb516..5e0185faae6c8e 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-26 +date: 2023-09-27 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 d741f660e745b1..cf5eec20cc9d0c 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-26 +date: 2023-09-27 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 63387d4038d793..f07d943d411901 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-26 +date: 2023-09-27 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 550b249527f10c..c67e9ca453b3ea 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-26 +date: 2023-09-27 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 11472edda4b097..a91426fa703701 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-26 +date: 2023-09-27 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.devdocs.json b/api_docs/kbn_default_nav_ml.devdocs.json index 1c99e5a71cbbd7..8124cde80d96fa 100644 --- a/api_docs/kbn_default_nav_ml.devdocs.json +++ b/api_docs/kbn_default_nav_ml.devdocs.json @@ -172,7 +172,7 @@ "label": "children", "description": [], "signature": [ - "[{ title: string; id: \"root\"; children: [{ link: \"ml:overview\"; }, { link: \"ml:notifications\"; }]; }, { title: string; id: \"anomaly_detection\"; children: [{ title: string; link: \"ml:anomalyDetection\"; }, { link: \"ml:anomalyExplorer\"; }, { link: \"ml:singleMetricViewer\"; }, { link: \"ml:settings\"; }]; }, { id: \"data_frame_analytics\"; title: string; children: [{ title: string; link: \"ml:dataFrameAnalytics\"; }, { link: \"ml:resultExplorer\"; }, { link: \"ml:analyticsMap\"; }]; }, { id: \"model_management\"; title: string; children: [{ link: \"ml:nodesOverview\"; }, { link: \"ml:nodes\"; }]; }, { id: \"data_visualizer\"; title: string; children: [{ title: string; link: \"ml:fileUpload\"; }, { title: string; link: \"ml:indexDataVisualizer\"; }, { title: string; link: \"ml:dataComparison\"; }]; }, { id: \"aiops_labs\"; title: string; children: [{ link: \"ml:logRateAnalysis\"; }, { link: \"ml:logPatternAnalysis\"; }, { link: \"ml:changePointDetections\"; }]; }]" + "[{ title: string; id: \"root\"; children: [{ link: \"ml:overview\"; }, { link: \"ml:notifications\"; }]; }, { title: string; id: \"anomaly_detection\"; children: [{ title: string; link: \"ml:anomalyDetection\"; }, { link: \"ml:anomalyExplorer\"; }, { link: \"ml:singleMetricViewer\"; }, { link: \"ml:settings\"; }]; }, { id: \"data_frame_analytics\"; title: string; children: [{ title: string; link: \"ml:dataFrameAnalytics\"; }, { link: \"ml:resultExplorer\"; }, { link: \"ml:analyticsMap\"; }]; }, { id: \"model_management\"; title: string; children: [{ link: \"ml:nodesOverview\"; }, { link: \"ml:nodes\"; }]; }, { id: \"data_visualizer\"; title: string; children: [{ title: string; link: \"ml:fileUpload\"; }, { title: string; link: \"ml:indexDataVisualizer\"; }, { title: string; link: \"ml:dataDrift\"; }]; }, { id: \"aiops_labs\"; title: string; children: [{ link: \"ml:logRateAnalysis\"; }, { link: \"ml:logPatternAnalysis\"; }, { link: \"ml:changePointDetections\"; }]; }]" ], "path": "packages/default-nav/ml/default_navigation.ts", "deprecated": false, diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 316dbc402e87e9..6fa579a7689100 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-26 +date: 2023-09-27 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 f4cd437be43a8c..26e6a05b71bc3f 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-26 +date: 2023-09-27 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 18864e112a8e53..4563b143cc9842 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-26 +date: 2023-09-27 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 266bd9d69b2713..f5572fe15612d5 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-26 +date: 2023-09-27 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 f8c2db7bc8c17c..5641d1562c1569 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-26 +date: 2023-09-27 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 8f3e1fcfd9aff8..824c794f8aa70e 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-26 +date: 2023-09-27 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 329b9290612749..384d01d5cbef80 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-26 +date: 2023-09-27 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 a3a33f34de78c1..e17aa330e079e4 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-26 +date: 2023-09-27 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 0873b2073c433e..53a36a4b41977d 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-26 +date: 2023-09-27 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 7663d904509cdd..f7373e425b5627 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-26 +date: 2023-09-27 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 08ec7b97c2eaee..315bcc59598259 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-26 +date: 2023-09-27 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 1f2c8753797488..62309375a0b44a 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 5186c443dde7df..35ef19e267a855 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 03cf418521b1f9..859a91626e7676 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index df9c1e659614ec..0dcf8b73ff21df 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-26 +date: 2023-09-27 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 c99a216c061117..33f053b421a648 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-26 +date: 2023-09-27 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 6190afdd38eb53..8d11b2cb7c7fa8 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-26 +date: 2023-09-27 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 5dce4a1a3a9377..6a83b5a69bf676 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-26 +date: 2023-09-27 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 e8dd0c0e4700e3..d929ffa5ce38cd 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-26 +date: 2023-09-27 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 12445d95a71b10..48d3a939dc3097 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-26 +date: 2023-09-27 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 69242c24cafcae..a73e13aac9e7c2 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-26 +date: 2023-09-27 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 4533a7a3ef6e5d..05dbf3774eba9c 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-26 +date: 2023-09-27 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 90537ba6a0ff80..3f373d1ccbd6d1 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-26 +date: 2023-09-27 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 602c4c33e88c59..3a3aa627686dd5 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-26 +date: 2023-09-27 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 77bcf8ba462e6c..e6b99ec4178cec 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-26 +date: 2023-09-27 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 60e59baa206751..d43128fc05055d 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-26 +date: 2023-09-27 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 fc3e4876cffc21..82994f46fd7ab8 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-26 +date: 2023-09-27 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 37db79322e58d7..252fa6a0d2557b 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-26 +date: 2023-09-27 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 b1132b6103bcee..243dcdff9977d7 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-26 +date: 2023-09-27 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 e55278db4e551e..d91455f06bc14b 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-26 +date: 2023-09-27 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 4c6e2effb01395..a8ba0be4125d71 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-26 +date: 2023-09-27 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 8401ace9d26576..7b20e948dcc046 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-26 +date: 2023-09-27 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 a085749f4b6266..14db74c00e93eb 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-26 +date: 2023-09-27 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 891f0c2d37a24c..49e84102eea632 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-26 +date: 2023-09-27 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 f75c0ab8043bd7..8957d6d55e1931 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-26 +date: 2023-09-27 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 7a89bc6590adee..f2f3e0d2c5e84f 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-26 +date: 2023-09-27 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 cca6dcbacf2927..125217e69bcc16 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-26 +date: 2023-09-27 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 2aefadf71cbe73..23f1b09b8adc69 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-26 +date: 2023-09-27 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 a5880533eb5570..2a1fed54f342c5 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-26 +date: 2023-09-27 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 66a6a08c5fdb49..16f67a571b4751 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-26 +date: 2023-09-27 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 0bb6c8b7a09ba9..b3609a476b3aa6 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-26 +date: 2023-09-27 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 36be9a0e48ca6b..86de7b3ef0fad2 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-26 +date: 2023-09-27 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 a63fc46f0313ed..e11e02d06c7f3d 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-26 +date: 2023-09-27 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 54e12b071a7e65..32b836d76b668b 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-26 +date: 2023-09-27 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 75c46c9c8179c0..7c4909f3683ff8 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-26 +date: 2023-09-27 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 1487d68d7a1259..3f1803d50dcd6d 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-26 +date: 2023-09-27 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 175b0011e3d19e..da2f861a57d272 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-26 +date: 2023-09-27 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 b8558845daaaac..5601414cdbf3d1 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-26 +date: 2023-09-27 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 d384c6aadec78a..59c4b7b589d042 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-26 +date: 2023-09-27 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 f96b5a18b902d7..fe6f47de8bc014 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-26 +date: 2023-09-27 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 9aa3f098d4c82d..e9adeb65ea66f7 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-26 +date: 2023-09-27 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 0bb2d8ba4a0bd5..36d7fa77ab318b 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-26 +date: 2023-09-27 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 b583ce8dcc6db6..52efaac0bdf96f 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.devdocs.json b/api_docs/kbn_management_settings_components_form.devdocs.json new file mode 100644 index 00000000000000..a3dedb3eb86b62 --- /dev/null +++ b/api_docs/kbn_management_settings_components_form.devdocs.json @@ -0,0 +1,221 @@ +{ + "id": "@kbn/management-settings-components-form", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/management-settings-components-form", + "id": "def-common.Form", + "type": "Function", + "tags": [], + "label": "Form", + "description": [ + "\nComponent for displaying a set of {@link FieldRow} in a form." + ], + "signature": [ + "(props: ", + "FormProps", + ") => JSX.Element" + ], + "path": "packages/kbn-management/settings/components/form/form.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/management-settings-components-form", + "id": "def-common.Form.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [ + "The {@link FormProps } for the {@link Form } component." + ], + "signature": [ + "FormProps" + ], + "path": "packages/kbn-management/settings/components/form/form.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/management-settings-components-form", + "id": "def-common.FormKibanaProvider", + "type": "Function", + "tags": [], + "label": "FormKibanaProvider", + "description": [ + "\nKibana-specific Provider that maps Kibana plugins and services to a {@link FormProvider}." + ], + "signature": [ + "({ children, ...deps }: React.PropsWithChildren<", + { + "pluginId": "@kbn/management-settings-components-form", + "scope": "common", + "docId": "kibKbnManagementSettingsComponentsFormPluginApi", + "section": "def-common.FormKibanaDependencies", + "text": "FormKibanaDependencies" + }, + ">) => JSX.Element" + ], + "path": "packages/kbn-management/settings/components/form/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/management-settings-components-form", + "id": "def-common.FormKibanaProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "{ children, ...deps }", + "description": [], + "signature": [ + "React.PropsWithChildren<", + { + "pluginId": "@kbn/management-settings-components-form", + "scope": "common", + "docId": "kibKbnManagementSettingsComponentsFormPluginApi", + "section": "def-common.FormKibanaDependencies", + "text": "FormKibanaDependencies" + }, + ">" + ], + "path": "packages/kbn-management/settings/components/form/services.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/management-settings-components-form", + "id": "def-common.FormProvider", + "type": "Function", + "tags": [], + "label": "FormProvider", + "description": [ + "\nReact Provider that provides services to a {@link Form} component and its dependents." + ], + "signature": [ + "({ children, ...services }: ", + "FormProviderProps", + ") => JSX.Element" + ], + "path": "packages/kbn-management/settings/components/form/services.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/management-settings-components-form", + "id": "def-common.FormProvider.$1", + "type": "Object", + "tags": [], + "label": "{ children, ...services }", + "description": [], + "signature": [ + "FormProviderProps" + ], + "path": "packages/kbn-management/settings/components/form/services.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/management-settings-components-form", + "id": "def-common.FormKibanaDependencies", + "type": "Type", + "tags": [], + "label": "FormKibanaDependencies", + "description": [ + "\nAn interface containing a collection of Kibana plugins and services required to\nrender a {@link Form} component and its dependents." + ], + "signature": [ + "KibanaDependencies & ", + { + "pluginId": "@kbn/management-settings-components-field-row", + "scope": "common", + "docId": "kibKbnManagementSettingsComponentsFieldRowPluginApi", + "section": "def-common.KibanaDependencies", + "text": "KibanaDependencies" + }, + " & ", + { + "pluginId": "@kbn/management-settings-components-field-input", + "scope": "common", + "docId": "kibKbnManagementSettingsComponentsFieldInputPluginApi", + "section": "def-common.FieldInputKibanaDependencies", + "text": "FieldInputKibanaDependencies" + } + ], + "path": "packages/kbn-management/settings/components/form/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/management-settings-components-form", + "id": "def-common.FormServices", + "type": "Type", + "tags": [], + "label": "FormServices", + "description": [ + "\nContextual services used by a {@link Form} component and its dependents." + ], + "signature": [ + { + "pluginId": "@kbn/management-settings-components-field-input", + "scope": "common", + "docId": "kibKbnManagementSettingsComponentsFieldInputPluginApi", + "section": "def-common.FieldInputServices", + "text": "FieldInputServices" + }, + " & ", + { + "pluginId": "@kbn/management-settings-components-field-row", + "scope": "common", + "docId": "kibKbnManagementSettingsComponentsFieldRowPluginApi", + "section": "def-common.Services", + "text": "Services" + }, + " & ", + "Services" + ], + "path": "packages/kbn-management/settings/components/form/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx new file mode 100644 index 00000000000000..e6162d473c8dfc --- /dev/null +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -0,0 +1,33 @@ +--- +#### +#### 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: kibKbnManagementSettingsComponentsFormPluginApi +slug: /kibana-dev-docs/api/kbn-management-settings-components-form +title: "@kbn/management-settings-components-form" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/management-settings-components-form plugin +date: 2023-09-27 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] +--- +import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; + + + +Contact [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 8 | 0 | 2 | 3 | + +## Common + +### Functions + + +### Consts, variables and types + + diff --git a/api_docs/kbn_management_settings_field_definition.devdocs.json b/api_docs/kbn_management_settings_field_definition.devdocs.json index d51791adc595a8..e59cf261328903 100644 --- a/api_docs/kbn_management_settings_field_definition.devdocs.json +++ b/api_docs/kbn_management_settings_field_definition.devdocs.json @@ -106,15 +106,7 @@ "section": "def-common.UiSettingsType", "text": "UiSettingsType" }, - ", string | number | boolean | (string | number)[] | null | undefined>>, client: ", - { - "pluginId": "@kbn/core-ui-settings-browser", - "scope": "common", - "docId": "kibKbnCoreUiSettingsBrowserPluginApi", - "section": "def-common.IUiSettingsClient", - "text": "IUiSettingsClient" - }, - ") => ", + ", string | number | boolean | (string | number)[] | null | undefined>>, client: SettingsClient) => ", { "pluginId": "@kbn/management-settings-types", "scope": "common", @@ -179,13 +171,7 @@ "The client itself, used to determine if a setting is custom or overridden." ], "signature": [ - { - "pluginId": "@kbn/core-ui-settings-browser", - "scope": "common", - "docId": "kibKbnCoreUiSettingsBrowserPluginApi", - "section": "def-common.IUiSettingsClient", - "text": "IUiSettingsClient" - } + "SettingsClient" ], "path": "packages/kbn-management/settings/field_definition/get_definitions.ts", "deprecated": false, diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index bd67c35e897369..51a1a7e25788ad 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-26 +date: 2023-09-27 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 76fec3f21812ff..e9bbfbb080329a 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-26 +date: 2023-09-27 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 9b1d2a0ceed391..80da205287a5b1 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-26 +date: 2023-09-27 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 0056c1744c93d6..bd8d4a29c4df36 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-26 +date: 2023-09-27 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 ebe1ee0e883a98..74a24e7dad5c92 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-26 +date: 2023-09-27 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 46f63c66d97f40..61410de80c13e7 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-26 +date: 2023-09-27 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 d5e8f5242d84ec..3007888a03abbb 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-26 +date: 2023-09-27 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 8d8c1846518866..2e0889fc10fe64 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-26 +date: 2023-09-27 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 bd774233e0d5bd..e8b7ff4e2b1a84 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-26 +date: 2023-09-27 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 98b498f4e6caa2..3287e6a0e3dafb 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-26 +date: 2023-09-27 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 f61c556d391c2b..6500398277e666 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-26 +date: 2023-09-27 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 1c460b72b90764..e529c52caf1a98 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-26 +date: 2023-09-27 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 ce7198cc744aea..afbafb7b587ad4 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-26 +date: 2023-09-27 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 4b608ad59ead62..a67fa215506be9 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-26 +date: 2023-09-27 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 023b1ed66e570e..15b3d91b13d518 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-26 +date: 2023-09-27 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 d893b4e63f288d..90bbb7a1d27e3e 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-26 +date: 2023-09-27 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 07ff44c50e48dc..1891292f4ed1e9 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-26 +date: 2023-09-27 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 5f3d421739ee44..89ce3a96a258b5 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-26 +date: 2023-09-27 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 7a1d61a31a8212..a8eb4837cf39ab 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-26 +date: 2023-09-27 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 e850a70fa8fbd2..74e783b9794113 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-26 +date: 2023-09-27 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 6ed106a6ff05e4..0d5bc3917d2528 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-26 +date: 2023-09-27 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 57378e46c61427..d7679099893e1a 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-26 +date: 2023-09-27 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 ff04eac99a8a21..f372e630c4e5ea 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-26 +date: 2023-09-27 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 dd27f6e0603e1e..efb092b933acbe 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-26 +date: 2023-09-27 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.devdocs.json b/api_docs/kbn_ml_random_sampler_utils.devdocs.json index 857500e0b30e7e..e0073eca3670d5 100644 --- a/api_docs/kbn_ml_random_sampler_utils.devdocs.json +++ b/api_docs/kbn_ml_random_sampler_utils.devdocs.json @@ -63,12 +63,13 @@ "docId": "kibKbnMlRandomSamplerUtilsPluginApi", "section": "def-common.RandomSamplerOption", "text": "RandomSamplerOption" - } + }, + " | undefined" ], "path": "x-pack/packages/ml/random_sampler_utils/src/random_sampler_manager.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "isRequired": false }, { "parentPluginId": "@kbn/ml-random-sampler-utils", @@ -80,7 +81,7 @@ "- callback to be called when random sampler mode is set" ], "signature": [ - "(mode: ", + "((mode: ", { "pluginId": "@kbn/ml-random-sampler-utils", "scope": "common", @@ -88,12 +89,12 @@ "section": "def-common.RandomSamplerOption", "text": "RandomSamplerOption" }, - ") => void" + ") => void) | undefined" ], "path": "x-pack/packages/ml/random_sampler_utils/src/random_sampler_manager.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "isRequired": false }, { "parentPluginId": "@kbn/ml-random-sampler-utils", @@ -111,7 +112,8 @@ "docId": "kibKbnMlRandomSamplerUtilsPluginApi", "section": "def-common.RandomSamplerProbability", "text": "RandomSamplerProbability" - } + }, + " | undefined" ], "path": "x-pack/packages/ml/random_sampler_utils/src/random_sampler_manager.ts", "deprecated": false, @@ -128,7 +130,7 @@ "- initial setter for random sampler probability" ], "signature": [ - "(prob: ", + "((prob: ", { "pluginId": "@kbn/ml-random-sampler-utils", "scope": "common", @@ -136,12 +138,12 @@ "section": "def-common.RandomSamplerProbability", "text": "RandomSamplerProbability" }, - ") => void" + ") => void) | undefined" ], "path": "x-pack/packages/ml/random_sampler_utils/src/random_sampler_manager.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "isRequired": false } ], "returnComment": [] diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index beb2b1d7d17043..c9924cbc05cdf3 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-26 +date: 2023-09-27 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 308331aafb6a92..e417dddd1500e7 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-26 +date: 2023-09-27 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 8d3d359d9ee8a4..20bff84eeddea5 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-26 +date: 2023-09-27 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 987ef40c0498ad..ad6a5e21e80dc4 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-26 +date: 2023-09-27 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 826487526b1a4a..25cafd41b82b01 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-26 +date: 2023-09-27 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 df893a97873faf..053d481c11e535 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-26 +date: 2023-09-27 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 fd7f4ab280191f..2005f4fc00f433 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-26 +date: 2023-09-27 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 a1f05e9ce34689..c7714e82de8273 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-26 +date: 2023-09-27 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 0fd0d346fb57b0..5881d6c4fb628b 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index f02eb699481480..219dcf71679ed7 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2023-09-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 7e481ccde5b120..547c155ee1cef1 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-26 +date: 2023-09-27 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 ba9ddba74cf0fb..9ff131a7535bda 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-26 +date: 2023-09-27 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 1aa5700cf7f061..6f378f89bd741f 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-26 +date: 2023-09-27 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 239fbcac319dc5..f36ba0465f8f5f 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-26 +date: 2023-09-27 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 595ee7d2e7bef8..285b1089dbacde 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-26 +date: 2023-09-27 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 da6040e3682806..04191a7624fc03 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-26 +date: 2023-09-27 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 31ca69386bd82b..417b481388307b 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-26 +date: 2023-09-27 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 c7da703a0e30b8..b27456b36309e2 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-26 +date: 2023-09-27 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 90931f67f40ca3..16acacdcea4889 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-26 +date: 2023-09-27 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 4098bb11f2af23..e26c8e12273f0f 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-26 +date: 2023-09-27 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 12b1dd9e31b231..75ffb92c6eca5f 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-26 +date: 2023-09-27 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 ccb60475d5cacc..f64b81f56443fd 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-26 +date: 2023-09-27 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 6ddfd7eb255159..3fd5e175a3a2bb 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-26 +date: 2023-09-27 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 b446bab1010003..a87c6120b8b6e9 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-26 +date: 2023-09-27 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 ec5ba4a4645541..296dca6f004526 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-26 +date: 2023-09-27 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 e912a795d439b8..afc47b50c05249 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-26 +date: 2023-09-27 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 9ce023a0237492..6cf2ecf79c791d 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-26 +date: 2023-09-27 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 234244470fb24c..39a66eeadb8253 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-26 +date: 2023-09-27 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 42e035a7cc1616..035be841006a2a 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-26 +date: 2023-09-27 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 fc7399a3ea66fd..f16e80a6a006d7 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-26 +date: 2023-09-27 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 973ac3b76a18b4..b7a71a784b7bdf 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-26 +date: 2023-09-27 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 36ea0c99119142..1d2daea227c932 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-26 +date: 2023-09-27 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 6c3bade371c462..9457d7b39e6210 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-26 +date: 2023-09-27 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 4579bddeb82c03..d331b779ebc782 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-26 +date: 2023-09-27 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 9711d47b79032f..86f2f7b04a67d0 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-26 +date: 2023-09-27 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 3d6c3b3dd1629e..df1c293d4ac719 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-26 +date: 2023-09-27 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 720bb8c9477287..6738831cc0ddd3 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-26 +date: 2023-09-27 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 3a7b9fb7b29bd9..2be45374fbd1bf 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-26 +date: 2023-09-27 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 53d952c6727032..dec912eed480fb 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-26 +date: 2023-09-27 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 90e955c0398cf6..e6bae75fac7a2f 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-26 +date: 2023-09-27 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 74bc95eff08d92..36161e9ab0224d 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-26 +date: 2023-09-27 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 4c9fd276f92489..37a4b7de0228be 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-26 +date: 2023-09-27 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 5877e8165caf61..b896b9a51f10e2 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-26 +date: 2023-09-27 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 056eb207c1d714..21d23f73aff57c 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-26 +date: 2023-09-27 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 79016933458403..e7f8138610840e 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-26 +date: 2023-09-27 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 3df432c6d4b1b2..9df0aef9aae3b5 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-26 +date: 2023-09-27 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 e8e5890f5a4249..33f6edde074e53 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-26 +date: 2023-09-27 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 704206a5e81da8..465ee9a5a8a251 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-26 +date: 2023-09-27 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 f4ae78b50f9487..4ec29cc06ee0cf 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-26 +date: 2023-09-27 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 e24913c4915381..94abe89c8af858 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-26 +date: 2023-09-27 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 9b0af46ef301ef..368e0101c05025 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-26 +date: 2023-09-27 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 36af13ef15e2ea..a530d1f08faf7b 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-26 +date: 2023-09-27 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 9bccdca6b75edb..a09fbb9f9535e4 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-26 +date: 2023-09-27 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 a9d1d761bce2d5..0b682e3ae24e2f 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-26 +date: 2023-09-27 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 a2aeb16601daca..8ee5dd0ba9a7d9 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-26 +date: 2023-09-27 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 307be0497b63d6..b2dcabe57b8b06 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-26 +date: 2023-09-27 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 c29cdd6f9a2f59..17225817fd2c3e 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-26 +date: 2023-09-27 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 1fb6dfa5772c7c..aedf825af213c5 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-26 +date: 2023-09-27 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 a81b9227eb6748..67266fccb4a0e4 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-26 +date: 2023-09-27 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 4736c892fecd6a..756df4ed8a01ff 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-26 +date: 2023-09-27 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 fbe170ca6eaabf..587b6e86533449 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-26 +date: 2023-09-27 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 4b15af859119ce..1d04f6475bec55 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-26 +date: 2023-09-27 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 de67dd9e9c3b87..0679a0d7ef9562 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-26 +date: 2023-09-27 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 e8eb38e131743e..d4b6052be73f9c 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-26 +date: 2023-09-27 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 49ab83e8312937..eeeb24440cddc0 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-26 +date: 2023-09-27 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 e0102e31918e9c..74cd48bb9f1c85 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-26 +date: 2023-09-27 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 f589fe3a431489..59e8cdba5c0fb8 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-26 +date: 2023-09-27 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 e69c952cb8c065..e0c8eec4af2c83 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-26 +date: 2023-09-27 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 e385bb4a450f74..99320011304da2 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-26 +date: 2023-09-27 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 37949233d55c1e..12c4d3068feec0 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-26 +date: 2023-09-27 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 97d11af89f2aee..fbce9b8fae864d 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-26 +date: 2023-09-27 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 80c0df35833f33..016fca3d9b34f3 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-26 +date: 2023-09-27 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 5da0cc1bc0c60d..7f436b3e1b0ce2 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-26 +date: 2023-09-27 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 476f5f18dafd0c..b42333e9a8394d 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-26 +date: 2023-09-27 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 72aa8e0e212089..8eb9170b4a1077 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-26 +date: 2023-09-27 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 65ed3565e04651..ee119af49d9202 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-26 +date: 2023-09-27 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 658a1dbe91557d..385531c829f1ab 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-26 +date: 2023-09-27 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 bcf101c671ca41..c4fb767bd84b21 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-26 +date: 2023-09-27 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 ed66d0331c888e..06da3942b17721 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-26 +date: 2023-09-27 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 a74922902f315e..cf233599761f9d 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-26 +date: 2023-09-27 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 b03ccf59eef5d5..9a62b1176d6ae2 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-26 +date: 2023-09-27 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 2bcca3b05366e0..614153b8bbe7ce 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-26 +date: 2023-09-27 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 2c6a16374de121..2c9fad240a92f6 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-26 +date: 2023-09-27 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 a5415ec9b6453b..b6b1ceb6a166ab 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-26 +date: 2023-09-27 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 843da95efe7573..17e4eb4556b4c7 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-26 +date: 2023-09-27 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 5cb1f502ef67bd..2a1292c9b521fb 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-26 +date: 2023-09-27 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 af7fa58f27fc5e..485ce8950b3caa 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-26 +date: 2023-09-27 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 85cb82f82d02ed..774bb039c75886 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-26 +date: 2023-09-27 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 83522bfac5e480..9fa3f52b99257e 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-26 +date: 2023-09-27 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 54b092c36805d8..2be08369a35e14 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-26 +date: 2023-09-27 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 926c9fc114f5d8..bdb8928d0c5bae 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-26 +date: 2023-09-27 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 90730706d33928..f6f63c303c8219 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-26 +date: 2023-09-27 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 7084c7474d7d83..a0eb735153a16d 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-26 +date: 2023-09-27 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 0c1b2a9dc76e3c..d65f98c2e3e788 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-26 +date: 2023-09-27 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 cbb042a03d20d8..b558dd4d0dc0a2 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-26 +date: 2023-09-27 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 c5036666f90a2d..32f465acd65785 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-26 +date: 2023-09-27 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 5c1f54e51a4572..24f6eaff630a5d 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-26 +date: 2023-09-27 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 0dff4a89ab264a..0be4859618c224 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-26 +date: 2023-09-27 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 e95c3324ca75b9..0bac9cb042e0e3 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-26 +date: 2023-09-27 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 6143dd8dd5a60a..8a653a8cbd33e2 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-26 +date: 2023-09-27 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 86b14b43344eea..04c8b99f0abad7 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-26 +date: 2023-09-27 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 f54c6b45d677a7..286d0c6b4b1e0b 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-26 +date: 2023-09-27 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 58b331aef29e00..42ea3c53d71f16 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-26 +date: 2023-09-27 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 927af6b280e906..97ff70d8cdc969 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-26 +date: 2023-09-27 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 cff8f6bdce99e0..e8e2e12ef753e3 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-26 +date: 2023-09-27 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 673bf477f0aa3c..1e03c2c77b2d6b 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-26 +date: 2023-09-27 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 f015df67f02f2c..22b4a0cf54d9d5 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-26 +date: 2023-09-27 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 6696a39762379f..cfb7e2d5ca1b46 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-26 +date: 2023-09-27 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 3e19ef1f56218a..30943d85fac586 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-26 +date: 2023-09-27 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 d2be8a25605de5..485368b747e3bc 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-26 +date: 2023-09-27 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 8068a5438d3ad5..84d799396462e2 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-26 +date: 2023-09-27 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 b0c6496e110509..1e3e5152b75e10 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_subscription_tracking.mdx b/api_docs/kbn_subscription_tracking.mdx index 2ea59be675b21e..4ff262df0845eb 100644 --- a/api_docs/kbn_subscription_tracking.mdx +++ b/api_docs/kbn_subscription_tracking.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-subscription-tracking title: "@kbn/subscription-tracking" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/subscription-tracking plugin -date: 2023-09-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/subscription-tracking'] --- import kbnSubscriptionTrackingObj from './kbn_subscription_tracking.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index a5e88c3cc7c114..c4997d5cdea904 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-26 +date: 2023-09-27 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 0fe13e901c0734..f99a93978c4391 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-26 +date: 2023-09-27 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 8a8a3cd816bf8f..98d00486ae8364 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-26 +date: 2023-09-27 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 76b43765a11dee..72d508123f3b37 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-26 +date: 2023-09-27 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 7cf0c034358298..fa6d8ef8180081 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-26 +date: 2023-09-27 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 4988da7e7c52ef..fe3bd910097953 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-26 +date: 2023-09-27 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 d4926ccf78095a..d4f5fd6be2b84f 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-26 +date: 2023-09-27 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 194d913445df0c..9477aa1003fe15 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-26 +date: 2023-09-27 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 5a5605d0902141..fe9f513f152abb 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 1d0a8d3a08a838..17f7ff4fc1644f 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index d05ea8cb8136a1..7688303dd24d2f 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-26 +date: 2023-09-27 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.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index 66f136070b5690..389bc17f1352a7 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -276,7 +276,7 @@ "label": "UnifiedDataTable", "description": [], "signature": [ - "({ ariaLabelledBy, columns, controlColumnIds, dataView, loadingState, onFilter, onResize, onSetColumns, onSort, rows, sampleSize, searchDescription, searchTitle, settings, showTimeCol, showFullScreenButton, sort, useNewFieldsApi, isSortEnabled, isPaginationEnabled, cellActionsTriggerId, className, rowHeightState, onUpdateRowHeight, isPlainRecord, rowsPerPageState, onUpdateRowsPerPage, onFieldEdited, services, renderCustomGridBody, trailingControlColumns, totalHits, onFetchMoreRecords, renderDocumentView, setExpandedDoc, expandedDoc, configRowHeight, showMultiFields, maxDocFieldsDisplayed, externalControlColumns, externalAdditionalControls, rowsPerPageOptions, visibleCellActions, externalCustomRenderers, consumer, componentsTourSteps, }: ", + "({ ariaLabelledBy, columns, controlColumnIds, dataView, loadingState, onFilter, onResize, onSetColumns, onSort, rows, sampleSize, searchDescription, searchTitle, settings, showTimeCol, showFullScreenButton, sort, useNewFieldsApi, isSortEnabled, isPaginationEnabled, cellActionsTriggerId, className, rowHeightState, onUpdateRowHeight, isPlainRecord, rowsPerPageState, onUpdateRowsPerPage, onFieldEdited, services, renderCustomGridBody, trailingControlColumns, totalHits, onFetchMoreRecords, renderDocumentView, setExpandedDoc, expandedDoc, configRowHeight, showMultiFields, maxDocFieldsDisplayed, externalControlColumns, externalAdditionalControls, rowsPerPageOptions, visibleCellActions, externalCustomRenderers, consumer, componentsTourSteps, gridStyleOverride, }: ", { "pluginId": "@kbn/unified-data-table", "scope": "common", @@ -295,7 +295,7 @@ "id": "def-common.UnifiedDataTable.$1", "type": "Object", "tags": [], - "label": "{\n ariaLabelledBy,\n columns,\n controlColumnIds = CONTROL_COLUMN_IDS_DEFAULT,\n dataView,\n loadingState,\n onFilter,\n onResize,\n onSetColumns,\n onSort,\n rows,\n sampleSize,\n searchDescription,\n searchTitle,\n settings,\n showTimeCol,\n showFullScreenButton = true,\n sort,\n useNewFieldsApi,\n isSortEnabled = true,\n isPaginationEnabled = true,\n cellActionsTriggerId,\n className,\n rowHeightState,\n onUpdateRowHeight,\n isPlainRecord = false,\n rowsPerPageState,\n onUpdateRowsPerPage,\n onFieldEdited,\n services,\n renderCustomGridBody,\n trailingControlColumns,\n totalHits,\n onFetchMoreRecords,\n renderDocumentView,\n setExpandedDoc,\n expandedDoc,\n configRowHeight,\n showMultiFields = true,\n maxDocFieldsDisplayed = 50,\n externalControlColumns,\n externalAdditionalControls,\n rowsPerPageOptions,\n visibleCellActions,\n externalCustomRenderers,\n consumer = 'discover',\n componentsTourSteps,\n}", + "label": "{\n ariaLabelledBy,\n columns,\n controlColumnIds = CONTROL_COLUMN_IDS_DEFAULT,\n dataView,\n loadingState,\n onFilter,\n onResize,\n onSetColumns,\n onSort,\n rows,\n sampleSize,\n searchDescription,\n searchTitle,\n settings,\n showTimeCol,\n showFullScreenButton = true,\n sort,\n useNewFieldsApi,\n isSortEnabled = true,\n isPaginationEnabled = true,\n cellActionsTriggerId,\n className,\n rowHeightState,\n onUpdateRowHeight,\n isPlainRecord = false,\n rowsPerPageState,\n onUpdateRowsPerPage,\n onFieldEdited,\n services,\n renderCustomGridBody,\n trailingControlColumns,\n totalHits,\n onFetchMoreRecords,\n renderDocumentView,\n setExpandedDoc,\n expandedDoc,\n configRowHeight,\n showMultiFields = true,\n maxDocFieldsDisplayed = 50,\n externalControlColumns,\n externalAdditionalControls,\n rowsPerPageOptions,\n visibleCellActions,\n externalCustomRenderers,\n consumer = 'discover',\n componentsTourSteps,\n gridStyleOverride,\n}", "description": [], "signature": [ { @@ -1438,6 +1438,23 @@ "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/unified-data-table", + "id": "def-common.UnifiedDataTableProps.gridStyleOverride", + "type": "Object", + "tags": [], + "label": "gridStyleOverride", + "description": [ + "\nOptional gridStyle override." + ], + "signature": [ + "EuiDataGridStyle", + " | undefined" + ], + "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index e58baed74563f0..964df8b7e4bd11 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 92 | 0 | 42 | 1 | +| 93 | 0 | 42 | 1 | ## Common diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index b9d36b0b3e3e93..5d9ea1b472bc40 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-26 +date: 2023-09-27 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 c9b1ffbe83185f..fe9b7b3dca9d51 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-26 +date: 2023-09-27 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 72d2e88165371a..3cdae17bba528e 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-26 +date: 2023-09-27 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 46a24601095a91..695f1cd9c419b4 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-26 +date: 2023-09-27 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 a37a7120f0012e..108a9cea1cf740 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-26 +date: 2023-09-27 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 76c7071cea8962..101cfc47c066ff 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-26 +date: 2023-09-27 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 7554c601f44510..d8323dc1f5d55f 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-26 +date: 2023-09-27 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 e5e5d58fc6ebc7..81e02ed89ced1a 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-26 +date: 2023-09-27 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 bccdfdf3ee83d0..005fc460fdc095 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-26 +date: 2023-09-27 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 6d5e19f2e26b18..d2da9c3b44a9c5 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-26 +date: 2023-09-27 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 29b6a1a2dcb96d..32f540c0cf8c73 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-26 +date: 2023-09-27 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 ad97e1b790831c..65680f2090af1b 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 9ab84b03192f21..bf5d418cd5014e 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -1253,15 +1253,15 @@ }, { "plugin": "dataVisualizer", - "path": "x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_app_state.tsx" + "path": "x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_app_state.tsx" }, { "plugin": "dataVisualizer", - "path": "x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_app_state.tsx" + "path": "x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_app_state.tsx" }, { "plugin": "dataVisualizer", - "path": "x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_app_state.tsx" + "path": "x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_app_state.tsx" }, { "plugin": "aiops", @@ -1359,18 +1359,6 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/fleet/app.tsx" }, - { - "plugin": "observability", - "path": "x-pack/plugins/observability/public/application/index.tsx" - }, - { - "plugin": "observability", - "path": "x-pack/plugins/observability/public/application/index.tsx" - }, - { - "plugin": "observability", - "path": "x-pack/plugins/observability/public/application/index.tsx" - }, { "plugin": "infra", "path": "x-pack/plugins/infra/public/apps/common_providers.tsx" @@ -3221,14 +3209,6 @@ "plugin": "dashboard", "path": "src/plugins/dashboard/public/dashboard_actions/open_replace_panel_flyout.tsx" }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx" - }, { "plugin": "dashboard", "path": "src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx" diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 6eeeeb13e6137c..ae753a890a1f4f 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-26 +date: 2023-09-27 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 feb9e32872e7b2..6527ea3309bb97 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-26 +date: 2023-09-27 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 eccfadbdaf9f20..b2c25bb409539c 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-26 +date: 2023-09-27 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 b5f54ff609de04..3fa0988c2fb337 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-26 +date: 2023-09-27 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 636a2313f6a2a6..70a18fffb91a30 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-26 +date: 2023-09-27 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 b9ff4a017eb872..688c84e40aa363 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-26 +date: 2023-09-27 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 4f63fe8ba1dec7..ac9cc0338f35fe 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-26 +date: 2023-09-27 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 f8646a9bb9e078..b60626798977cc 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-26 +date: 2023-09-27 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 a15d894df5f2e2..af2135ccfcaf75 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-26 +date: 2023-09-27 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 5ceb15dcff4730..757e7215310eb9 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-26 +date: 2023-09-27 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 f80ac97b8542c8..f86ef3a3d878a1 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-26 +date: 2023-09-27 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 ab28fa9dc9afb7..5a50700863979f 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-26 +date: 2023-09-27 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 c194c05150afac..89c1765d8c65f3 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-26 +date: 2023-09-27 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 8db11685ae7d41..a2f19223b80a86 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index a4e074b85b960c..53365227f427c7 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -185,8 +185,6 @@ "signature": [ "(ml: { locator: ", "MlLocator", - " | undefined; elasticModels: ", - "ElasticModels", " | undefined; } | undefined, basePath: string | undefined, params: ", "MlLocatorParams", ", dependencies?: React.DependencyList | undefined) => string" @@ -205,8 +203,6 @@ "signature": [ "{ locator: ", "MlLocator", - " | undefined; elasticModels: ", - "ElasticModels", " | undefined; } | undefined" ], "path": "x-pack/plugins/ml/public/locator/use_ml_href.ts", @@ -1029,7 +1025,7 @@ "label": "ML_PAGES", "description": [], "signature": [ - "{ readonly ANOMALY_DETECTION_JOBS_MANAGE: \"jobs\"; readonly ANOMALY_EXPLORER: \"explorer\"; readonly SINGLE_METRIC_VIEWER: \"timeseriesexplorer\"; readonly DATA_FRAME_ANALYTICS_JOBS_MANAGE: \"data_frame_analytics\"; readonly DATA_FRAME_ANALYTICS_SOURCE_SELECTION: \"data_frame_analytics/source_selection\"; readonly DATA_FRAME_ANALYTICS_CREATE_JOB: \"data_frame_analytics/new_job\"; readonly TRAINED_MODELS_MANAGE: \"trained_models\"; readonly DATA_COMPARISON_INDEX_SELECT: \"data_comparison_index_select\"; readonly DATA_COMPARISON: \"data_comparison\"; readonly NODES: \"nodes\"; readonly MEMORY_USAGE: \"memory_usage\"; readonly DATA_FRAME_ANALYTICS_EXPLORATION: \"data_frame_analytics/exploration\"; readonly DATA_FRAME_ANALYTICS_MAP: \"data_frame_analytics/map\"; readonly DATA_VISUALIZER: \"datavisualizer\"; readonly DATA_VISUALIZER_INDEX_SELECT: \"datavisualizer_index_select\"; readonly DATA_VISUALIZER_FILE: \"filedatavisualizer\"; readonly DATA_VISUALIZER_INDEX_VIEWER: \"jobs/new_job/datavisualizer\"; readonly ANOMALY_DETECTION_CREATE_JOB: \"jobs/new_job\"; readonly ANOMALY_DETECTION_CREATE_JOB_RECOGNIZER: \"jobs/new_job/recognize\"; readonly ANOMALY_DETECTION_CREATE_JOB_SINGLE_METRIC: \"jobs/new_job/single_metric\"; readonly ANOMALY_DETECTION_CREATE_JOB_MULTI_METRIC: \"jobs/new_job/multi_metric\"; readonly ANOMALY_DETECTION_CREATE_JOB_CONVERT_TO_MULTI_METRIC: \"jobs/new_job/convert_to_multi_metric\"; readonly ANOMALY_DETECTION_CREATE_JOB_ADVANCED: \"jobs/new_job/advanced\"; readonly ANOMALY_DETECTION_CREATE_JOB_POPULATION: \"jobs/new_job/population\"; readonly ANOMALY_DETECTION_CREATE_JOB_CATEGORIZATION: \"jobs/new_job/categorization\"; readonly ANOMALY_DETECTION_CREATE_JOB_RARE: \"jobs/new_job/rare\"; readonly ANOMALY_DETECTION_CREATE_JOB_GEO: \"jobs/new_job/geo\"; readonly ANOMALY_DETECTION_CREATE_JOB_CONVERT_TO_ADVANCED: \"jobs/new_job/convert_to_advanced\"; readonly ANOMALY_DETECTION_CREATE_JOB_SELECT_TYPE: \"jobs/new_job/step/job_type\"; readonly ANOMALY_DETECTION_CREATE_JOB_SELECT_INDEX: \"jobs/new_job/step/index_or_search\"; readonly ANOMALY_DETECTION_CREATE_JOB_FROM_LENS: \"jobs/new_job/from_lens\"; readonly ANOMALY_DETECTION_CREATE_JOB_FROM_MAP: \"jobs/new_job/from_map\"; readonly ANOMALY_DETECTION_MODULES_VIEW_OR_CREATE: \"modules/check_view_or_create\"; readonly SETTINGS: \"settings\"; readonly CALENDARS_MANAGE: \"settings/calendars_list\"; readonly CALENDARS_NEW: \"settings/calendars_list/new_calendar\"; readonly CALENDARS_EDIT: \"settings/calendars_list/edit_calendar\"; readonly FILTER_LISTS_MANAGE: \"settings/filter_lists\"; readonly FILTER_LISTS_NEW: \"settings/filter_lists/new_filter_list\"; readonly FILTER_LISTS_EDIT: \"settings/filter_lists/edit_filter_list\"; readonly OVERVIEW: \"overview\"; readonly NOTIFICATIONS: \"notifications\"; readonly AIOPS: \"aiops\"; readonly AIOPS_EXPLAIN_LOG_RATE_SPIKES: \"aiops/explain_log_rate_spikes\"; readonly AIOPS_EXPLAIN_LOG_RATE_SPIKES_INDEX_SELECT: \"aiops/explain_log_rate_spikes_index_select\"; readonly AIOPS_LOG_RATE_ANALYSIS: \"aiops/log_rate_analysis\"; readonly AIOPS_LOG_RATE_ANALYSIS_INDEX_SELECT: \"aiops/log_rate_analysis_index_select\"; readonly AIOPS_LOG_CATEGORIZATION: \"aiops/log_categorization\"; readonly AIOPS_LOG_CATEGORIZATION_INDEX_SELECT: \"aiops/log_categorization_index_select\"; readonly AIOPS_CHANGE_POINT_DETECTION: \"aiops/change_point_detection\"; readonly AIOPS_CHANGE_POINT_DETECTION_INDEX_SELECT: \"aiops/change_point_detection_index_select\"; }" + "{ readonly ANOMALY_DETECTION_JOBS_MANAGE: \"jobs\"; readonly ANOMALY_EXPLORER: \"explorer\"; readonly SINGLE_METRIC_VIEWER: \"timeseriesexplorer\"; readonly DATA_FRAME_ANALYTICS_JOBS_MANAGE: \"data_frame_analytics\"; readonly DATA_FRAME_ANALYTICS_SOURCE_SELECTION: \"data_frame_analytics/source_selection\"; readonly DATA_FRAME_ANALYTICS_CREATE_JOB: \"data_frame_analytics/new_job\"; readonly TRAINED_MODELS_MANAGE: \"trained_models\"; readonly DATA_DRIFT_INDEX_SELECT: \"data_drift_index_select\"; readonly DATA_DRIFT_CUSTOM: \"data_drift_custom\"; readonly DATA_DRIFT: \"data_drift\"; readonly NODES: \"nodes\"; readonly MEMORY_USAGE: \"memory_usage\"; readonly DATA_FRAME_ANALYTICS_EXPLORATION: \"data_frame_analytics/exploration\"; readonly DATA_FRAME_ANALYTICS_MAP: \"data_frame_analytics/map\"; readonly DATA_VISUALIZER: \"datavisualizer\"; readonly DATA_VISUALIZER_INDEX_SELECT: \"datavisualizer_index_select\"; readonly DATA_VISUALIZER_FILE: \"filedatavisualizer\"; readonly DATA_VISUALIZER_INDEX_VIEWER: \"jobs/new_job/datavisualizer\"; readonly ANOMALY_DETECTION_CREATE_JOB: \"jobs/new_job\"; readonly ANOMALY_DETECTION_CREATE_JOB_RECOGNIZER: \"jobs/new_job/recognize\"; readonly ANOMALY_DETECTION_CREATE_JOB_SINGLE_METRIC: \"jobs/new_job/single_metric\"; readonly ANOMALY_DETECTION_CREATE_JOB_MULTI_METRIC: \"jobs/new_job/multi_metric\"; readonly ANOMALY_DETECTION_CREATE_JOB_CONVERT_TO_MULTI_METRIC: \"jobs/new_job/convert_to_multi_metric\"; readonly ANOMALY_DETECTION_CREATE_JOB_ADVANCED: \"jobs/new_job/advanced\"; readonly ANOMALY_DETECTION_CREATE_JOB_POPULATION: \"jobs/new_job/population\"; readonly ANOMALY_DETECTION_CREATE_JOB_CATEGORIZATION: \"jobs/new_job/categorization\"; readonly ANOMALY_DETECTION_CREATE_JOB_RARE: \"jobs/new_job/rare\"; readonly ANOMALY_DETECTION_CREATE_JOB_GEO: \"jobs/new_job/geo\"; readonly ANOMALY_DETECTION_CREATE_JOB_CONVERT_TO_ADVANCED: \"jobs/new_job/convert_to_advanced\"; readonly ANOMALY_DETECTION_CREATE_JOB_SELECT_TYPE: \"jobs/new_job/step/job_type\"; readonly ANOMALY_DETECTION_CREATE_JOB_SELECT_INDEX: \"jobs/new_job/step/index_or_search\"; readonly ANOMALY_DETECTION_CREATE_JOB_FROM_LENS: \"jobs/new_job/from_lens\"; readonly ANOMALY_DETECTION_CREATE_JOB_FROM_MAP: \"jobs/new_job/from_map\"; readonly ANOMALY_DETECTION_MODULES_VIEW_OR_CREATE: \"modules/check_view_or_create\"; readonly SETTINGS: \"settings\"; readonly CALENDARS_MANAGE: \"settings/calendars_list\"; readonly CALENDARS_NEW: \"settings/calendars_list/new_calendar\"; readonly CALENDARS_EDIT: \"settings/calendars_list/edit_calendar\"; readonly FILTER_LISTS_MANAGE: \"settings/filter_lists\"; readonly FILTER_LISTS_NEW: \"settings/filter_lists/new_filter_list\"; readonly FILTER_LISTS_EDIT: \"settings/filter_lists/edit_filter_list\"; readonly OVERVIEW: \"overview\"; readonly NOTIFICATIONS: \"notifications\"; readonly AIOPS: \"aiops\"; readonly AIOPS_EXPLAIN_LOG_RATE_SPIKES: \"aiops/explain_log_rate_spikes\"; readonly AIOPS_EXPLAIN_LOG_RATE_SPIKES_INDEX_SELECT: \"aiops/explain_log_rate_spikes_index_select\"; readonly AIOPS_LOG_RATE_ANALYSIS: \"aiops/log_rate_analysis\"; readonly AIOPS_LOG_RATE_ANALYSIS_INDEX_SELECT: \"aiops/log_rate_analysis_index_select\"; readonly AIOPS_LOG_CATEGORIZATION: \"aiops/log_categorization\"; readonly AIOPS_LOG_CATEGORIZATION_INDEX_SELECT: \"aiops/log_categorization_index_select\"; readonly AIOPS_CHANGE_POINT_DETECTION: \"aiops/change_point_detection\"; readonly AIOPS_CHANGE_POINT_DETECTION_INDEX_SELECT: \"aiops/change_point_detection_index_select\"; }" ], "path": "x-pack/plugins/ml/common/constants/locator.ts", "deprecated": false, diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 9eb82115f70ea4..26a245078de3ff 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-26 +date: 2023-09-27 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 d467c48032470d..819f9ca32c504e 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-26 +date: 2023-09-27 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 f371df08341ca9..3a6fa6bddc91dd 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-26 +date: 2023-09-27 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 d4d7ca70741231..1b44a46e5975e5 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-26 +date: 2023-09-27 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 5121b52917317b..3ceab43574501d 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-26 +date: 2023-09-27 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 01dad688b62e26..2a232ef347c545 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-26 +date: 2023-09-27 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 5d6253604f38fb..edd59f5b7cd02a 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 67c8970bcd528a..d39114b7d63bb5 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index b8584211bc96d4..f7af2bdf4e8ccc 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_log_explorer.devdocs.json b/api_docs/observability_log_explorer.devdocs.json index d800417b5e9174..d469ec56d4cd19 100644 --- a/api_docs/observability_log_explorer.devdocs.json +++ b/api_docs/observability_log_explorer.devdocs.json @@ -284,7 +284,80 @@ } ], "functions": [], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "observabilityLogExplorer", + "id": "def-common.ObservabilityLogExplorerLocators", + "type": "Interface", + "tags": [], + "label": "ObservabilityLogExplorerLocators", + "description": [], + "path": "x-pack/plugins/observability_log_explorer/common/locators/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityLogExplorer", + "id": "def-common.ObservabilityLogExplorerLocators.allDatasetsLocator", + "type": "Object", + "tags": [], + "label": "allDatasetsLocator", + "description": [], + "signature": [ + { + "pluginId": "share", + "scope": "common", + "docId": "kibSharePluginApi", + "section": "def-common.LocatorPublic", + "text": "LocatorPublic" + }, + "<", + { + "pluginId": "@kbn/deeplinks-observability", + "scope": "common", + "docId": "kibKbnDeeplinksObservabilityPluginApi", + "section": "def-common.LogExplorerNavigationParams", + "text": "LogExplorerNavigationParams" + }, + ">" + ], + "path": "x-pack/plugins/observability_log_explorer/common/locators/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityLogExplorer", + "id": "def-common.ObservabilityLogExplorerLocators.singleDatasetLocator", + "type": "Object", + "tags": [], + "label": "singleDatasetLocator", + "description": [], + "signature": [ + { + "pluginId": "share", + "scope": "common", + "docId": "kibSharePluginApi", + "section": "def-common.LocatorPublic", + "text": "LocatorPublic" + }, + "<", + { + "pluginId": "@kbn/deeplinks-observability", + "scope": "common", + "docId": "kibKbnDeeplinksObservabilityPluginApi", + "section": "def-common.SingleDatasetLocatorParams", + "text": "SingleDatasetLocatorParams" + }, + ">" + ], + "path": "x-pack/plugins/observability_log_explorer/common/locators/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "enums": [], "misc": [], "objects": [] diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index c5361488c74337..3c160b04f3a6b6 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2023-09-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/inf | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 12 | 0 | 12 | 1 | +| 15 | 0 | 15 | 1 | ## Common ### Classes +### Interfaces + + diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 065c3bc1b45215..744e090e99b997 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-26 +date: 2023-09-27 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 70af23bfc69613..5cbe15c8c43b6a 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-26 +date: 2023-09-27 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 a6aeb1b261a391..5981f286ef712b 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-26 +date: 2023-09-27 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 da7ed9bf51767d..3508ef25f48b2f 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-26 +date: 2023-09-27 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 2854a4c0cc9139..73f6b5f2567f0e 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-26 +date: 2023-09-27 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 | |--------------|----------|------------------------| -| 692 | 584 | 42 | +| 693 | 585 | 42 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 74981 | 223 | 63957 | 1538 | +| 75009 | 223 | 63975 | 1546 | ## 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) | - | 772 | 1 | 741 | 50 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 772 | 1 | 741 | 51 | | | [@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 | @@ -58,7 +58,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 101 | 0 | 98 | 9 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 54 | 0 | 51 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3310 | 33 | 2575 | 24 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin provides the ability to create data views via a modal flyout inside Kibana apps | 16 | 0 | 7 | 0 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin provides the ability to create data views via a modal flyout inside Kibana apps | 35 | 0 | 25 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Reusable data view field editor across Kibana | 72 | 0 | 33 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data view management app | 2 | 0 | 2 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1037 | 0 | 257 | 2 | @@ -68,7 +68,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 35 | 2 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Server APIs for the Elastic AI Assistant | 4 | 0 | 2 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 534 | 1 | 434 | 7 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 535 | 1 | 435 | 7 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 14 | 0 | 14 | 0 | | | [@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. | 5 | 0 | 5 | 0 | @@ -139,12 +139,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@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) | - | 546 | 2 | 537 | 14 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 42 | 0 | 39 | 7 | -| | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | This plugin exposes and registers observability log consumption features. | 12 | 0 | 12 | 1 | +| | [@elastic/infra-monitoring-ui](https://github.com/orgs/elastic/teams/infra-monitoring-ui) | This plugin exposes and registers observability log consumption features. | 15 | 0 | 15 | 1 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 14 | 0 | 14 | 0 | | | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 287 | 1 | 284 | 15 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 2 | 0 | 2 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 218 | 2 | 164 | 11 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 212 | 2 | 158 | 10 | | | [@elastic/profiling-ui](https://github.com/orgs/elastic/teams/profiling-ui) | - | 16 | 1 | 16 | 0 | | | [@elastic/profiling-ui](https://github.com/orgs/elastic/teams/profiling-ui) | - | 21 | 0 | 21 | 6 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 | @@ -218,7 +218,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Package name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 11 | 5 | 11 | 0 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 33 | 0 | 0 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 35 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 20 | 0 | 0 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 24 | 3 | 24 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 23 | 0 | 22 | 0 | @@ -479,6 +479,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 10 | 0 | 10 | 1 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 20 | 0 | 5 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 26 | 0 | 7 | 0 | +| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 8 | 0 | 2 | 3 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 45 | 0 | 0 | 0 | | | [@elastic/appex-sharedux @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 127 | 0 | 127 | 0 | | | [@elastic/appex-sharedux @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 20 | 0 | 11 | 0 | @@ -627,7 +628,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@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) | - | 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) | Contains functionality for the unified data table which can be integrated into apps | 93 | 0 | 42 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 10 | 0 | 7 | 6 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 303 | 0 | 276 | 9 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 4 | 0 | 0 | 0 | diff --git a/api_docs/presentation_util.devdocs.json b/api_docs/presentation_util.devdocs.json index 9582e337fbb171..4700637a57fa07 100644 --- a/api_docs/presentation_util.devdocs.json +++ b/api_docs/presentation_util.devdocs.json @@ -688,7 +688,7 @@ "signature": [ "React.ExoticComponent<", "DashboardPickerProps", - "> & { readonly _result: (props: ", + "> & { readonly _result: ({ isDisabled, onChange, idsToOmit }: ", "DashboardPickerProps", ") => JSX.Element; }" ], @@ -1490,119 +1490,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "presentationUtil", - "id": "def-public.PresentationDashboardsService", - "type": "Interface", - "tags": [], - "label": "PresentationDashboardsService", - "description": [], - "path": "src/plugins/presentation_util/public/services/dashboards/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "presentationUtil", - "id": "def-public.PresentationDashboardsService.findDashboards", - "type": "Function", - "tags": [], - "label": "findDashboards", - "description": [], - "signature": [ - "(query: string, fields: string[]) => Promise<", - { - "pluginId": "@kbn/core-saved-objects-api-browser", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" - }, - "<", - "PartialDashboardAttributes", - ">[]>" - ], - "path": "src/plugins/presentation_util/public/services/dashboards/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "presentationUtil", - "id": "def-public.PresentationDashboardsService.findDashboards.$1", - "type": "string", - "tags": [], - "label": "query", - "description": [], - "signature": [ - "string" - ], - "path": "src/plugins/presentation_util/public/services/dashboards/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "presentationUtil", - "id": "def-public.PresentationDashboardsService.findDashboards.$2", - "type": "Array", - "tags": [], - "label": "fields", - "description": [], - "signature": [ - "string[]" - ], - "path": "src/plugins/presentation_util/public/services/dashboards/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "presentationUtil", - "id": "def-public.PresentationDashboardsService.findDashboardsByTitle", - "type": "Function", - "tags": [], - "label": "findDashboardsByTitle", - "description": [], - "signature": [ - "(title: string) => Promise<", - { - "pluginId": "@kbn/core-saved-objects-api-browser", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" - }, - "<", - "PartialDashboardAttributes", - ">[]>" - ], - "path": "src/plugins/presentation_util/public/services/dashboards/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "presentationUtil", - "id": "def-public.PresentationDashboardsService.findDashboardsByTitle.$1", - "type": "string", - "tags": [], - "label": "title", - "description": [], - "signature": [ - "string" - ], - "path": "src/plugins/presentation_util/public/services/dashboards/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, { "parentPluginId": "presentationUtil", "id": "def-public.PresentationLabsService", diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index d7b492ff54066e..791f9b3b4f2a4a 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 218 | 2 | 164 | 11 | +| 212 | 2 | 158 | 10 | ## Client diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 9ef2e27dd7756c..9410922b057ccd 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-26 +date: 2023-09-27 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 5a79e4f5054eac..7947dfe27f5f8c 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-26 +date: 2023-09-27 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 b1e3eeec11aab2..fcc76a685f0520 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-26 +date: 2023-09-27 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 32c6085ed7987f..2b970580b02ab6 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-26 +date: 2023-09-27 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 c951948e798df6..8d6008e6384ebe 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-26 +date: 2023-09-27 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 fb682878de6619..5c125651e82b75 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-26 +date: 2023-09-27 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 aed7a39727ab07..b36b693fca08be 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-26 +date: 2023-09-27 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 98301ae5da2bee..9f57802b6ae107 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-26 +date: 2023-09-27 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 52cc877c8727d5..29c0562a764968 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-26 +date: 2023-09-27 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 9c191aa176a6a0..14c68fed21844f 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-26 +date: 2023-09-27 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 7313cdcd0d8b74..2047ad21430fd2 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-26 +date: 2023-09-27 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 115ba3370474bd..23b14aad816fc3 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-26 +date: 2023-09-27 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 45828377b6b31a..60911c7f32c65e 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-26 +date: 2023-09-27 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 ff6bd17c5503dc..615dfe4d73c3a9 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-26 +date: 2023-09-27 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 da03e80963f9e4..b53a5a29a32ef6 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-26 +date: 2023-09-27 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 32d50ac6e42d8a..f17c24e21b966c 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-26 +date: 2023-09-27 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 8b26f3c4e928d2..ed04a04d8be823 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-26 +date: 2023-09-27 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 713e3bc175b32c..a33f35f1acf573 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-26 +date: 2023-09-27 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 e520082f856b0c..76f719cd709890 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-26 +date: 2023-09-27 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 078d0d12d34a50..a2f09274f67f64 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-26 +date: 2023-09-27 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 e13f8bdee1cee0..ff25a06f6415a0 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-26 +date: 2023-09-27 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 0137fbc3b99eda..fa845f8af50f82 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-26 +date: 2023-09-27 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 990d781dcd7785..440269f83ad9b8 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-26 +date: 2023-09-27 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 3d246a4cf0c761..59300742f12fc7 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-26 +date: 2023-09-27 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 d78a24c2ab1606..77ecc0baa4b99a 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-26 +date: 2023-09-27 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 9cfa673edc64ce..27a90cbded66ac 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-26 +date: 2023-09-27 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 906e62d9f0ac2e..ac2f75dd7a96ac 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-26 +date: 2023-09-27 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 4f2b54a1925a69..8f159ced0ce760 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-26 +date: 2023-09-27 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 5db4c79809e60a..ef3037033a3ae8 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-26 +date: 2023-09-27 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 d78fcb461a8f5e..84f1bc29113c74 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-26 +date: 2023-09-27 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 e34eddbdef6942..b5c292a9be03ba 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-26 +date: 2023-09-27 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 0be6e038573994..5b329e76140d8a 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-26 +date: 2023-09-27 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 fe66b6a93fea03..52dc85ee981cd4 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-26 +date: 2023-09-27 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 4225392065de12..563a67a77822ec 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-26 +date: 2023-09-27 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 14b879c5117a3a..24dd5e08c8343a 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-26 +date: 2023-09-27 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 fbf37cdfd2c285..190a31ae3d43f7 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-26 +date: 2023-09-27 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 474c42fe428111..700bc8d8b59bfb 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 509e4f6ac6055e..a5b984a43b6113 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index ab4dc0626aceb2..cc11ce629e9bde 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-26 +date: 2023-09-27 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 d2ac48d5b2cf7f..b532bc93621ccd 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-26 +date: 2023-09-27 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 73ef1bfd0fad58..faf4b23b3d9fee 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-26 +date: 2023-09-27 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 b92bf316eee551..14319346a7eb53 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-26 +date: 2023-09-27 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 9f6b9c0cba07f7..2b7f06029b40c6 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-26 +date: 2023-09-27 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 f65133a07c62c2..fb3330c1361a60 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-26 +date: 2023-09-27 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 35caa52836dbe2..9c5a16baca248d 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-26 +date: 2023-09-27 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 a6308c5cd7fa8b..8b211dbf99cbb8 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-26 +date: 2023-09-27 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 46bd23e9458167..4debc821f93bb9 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-26 +date: 2023-09-27 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 1691005a61bfe0..84583a6deca755 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-26 +date: 2023-09-27 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 e884419d9c22ee..6a368ddec6b396 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-26 +date: 2023-09-27 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 5b692b69164cc2..dd5f73b06abe05 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-26 +date: 2023-09-27 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 08e1dbc25d94da..701b599ae799d8 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-26 +date: 2023-09-27 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 b246d688749ddc..b366f8dbd26aae 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-26 +date: 2023-09-27 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 7870c03d8aacca..0844a32fd547a8 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-26 +date: 2023-09-27 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 80dc7190498e22..029cfb8069ef50 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-26 +date: 2023-09-27 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 a697c1614530ef..747207bf1322a4 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-26 +date: 2023-09-27 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 68588ef9609e4e..030fa0683409da 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-26 +date: 2023-09-27 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 b23f402737a4da..40e8a2004914d1 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-26 +date: 2023-09-27 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 956c3d1bcf1628..34a87031ad777d 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-26 +date: 2023-09-27 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 2d749827cb5c23..d13512e36d7687 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-26 +date: 2023-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/config/serverless.es.yml b/config/serverless.es.yml index 7e4e5547efb1f1..01a9129ce7e829 100644 --- a/config/serverless.es.yml +++ b/config/serverless.es.yml @@ -5,6 +5,7 @@ xpack.apm.enabled: false xpack.cloudSecurityPosture.enabled: false xpack.infra.enabled: false +xpack.observabilityLogExplorer.enabled: false xpack.observability.enabled: false xpack.securitySolution.enabled: false xpack.serverless.observability.enabled: false diff --git a/config/serverless.security.yml b/config/serverless.security.yml index 7a186ac9e70b1a..19927adb58660b 100644 --- a/config/serverless.security.yml +++ b/config/serverless.security.yml @@ -4,6 +4,7 @@ enterpriseSearch.enabled: false xpack.apm.enabled: false xpack.infra.enabled: false +xpack.observabilityLogExplorer.enabled: false xpack.observability.enabled: false xpack.uptime.enabled: false xpack.legacy_uptime.enabled: false diff --git a/dev_docs/assets/feature_privileges_example_plugin.png b/dev_docs/assets/feature_privileges_example_plugin.png new file mode 100644 index 00000000000000..46e0bcc457cf83 Binary files /dev/null and b/dev_docs/assets/feature_privileges_example_plugin.png differ diff --git a/dev_docs/key_concepts/feature_privileges.mdx b/dev_docs/key_concepts/feature_privileges.mdx new file mode 100644 index 00000000000000..7666ca1e823995 --- /dev/null +++ b/dev_docs/key_concepts/feature_privileges.mdx @@ -0,0 +1,451 @@ +--- +id: kibDevFeaturePrivileges +slug: /kibana-dev-docs/key-concepts/designing-feature-privileges +title: Creating Feature Privileges +description: Learn to control access to features of your plugin +date: 2023-09-18 +tags: ['kibana', 'dev', 'architecture', 'contributor'] +--- + +If you've added a new feature to Kibana and would like administrators to have granular control over who can access and perform actions within this feature, then creating Feature privileges is what you're after. + +Feature Privileges allow you to define precisely who can access your feature and what actions they can perform, all while seamlessly integrating with Kibana's role-based access control (RBAC) system. +This documentation will guide you through the process of creating and configuring Feature Privileges for your Kibana plugin or features. Whether you're building a new visualization, enhancing an existing application, or extending Kibana's capabilities, understanding how to set up Feature Privileges is vital to maintaining security, control, and user satisfaction. + +By the end of this guide, you'll know how to: + +- Define privileges for your feature, specifying who can access it. +- Control access to your feature's user interface (UI) elements. +- Secure server-side APIs, ensuring that only authorized users can interact with your plugin's functionality. + +### Registering features + +Kibana has an inbuilt Features plugin that enables you to control access to your plugin and its features. To start, ensure that your kibana.jsonc config file has the `features` plugin inside the requiredPlugins list + +``` + "requiredPlugins": [ + ..., + "features", // required + ] +``` + +This will give you access to the contract exposed by the features plugin inside the setup dependencies of your own plugin. + +Now, inside your plugin, you can use the contract to control access by first registering the features that your plugin has + +```ts +const FEATURE_PRIVILEGES_PLUGIN_ID = 'MY_PLUGIN_IDENTIFIER'; +features.registerKibanaFeature({ + id: FEATURE_PRIVILEGES_PLUGIN_ID, + name: 'Feature Plugin Examples', + category: DEFAULT_APP_CATEGORIES.management, + app: ['FeaturePluginExample'], + privileges: { + all: { + app: ['FeaturePluginExample'], + }, + read: { + app: ['FeaturePluginExample'], + }, + }, +}); +``` + +### Control access to UI elements + +![image](../assets/feature_privileges_example_plugin.png) + +With regards to feature privileges, we control access to UI elements by declaring UI capabilities. + +UI capabilities determine what actions users are allowed to perform within the UI of your plugin. These are often associated with specific features inside your app and can be finely tuned to control access at a granular level. + +Let's take a basic example of UI capabilities for our example plugin. Lets say that our plugin allows the following user actions in general: + +`view, create, edit, delete, assign`. + +Now we'd like to ensure that only users with the `all` privilege are granted access to all actions whereas users with the `read` privilege can only view the resources in your app. + +To do so, we modify the feature registration config above and include the following entries in the `privileges.all` and `privileges.read` sections respectively + +```ts +{ + ..., + privileges: { + all: { + ..., + ui: ['view', 'create', 'edit', 'delete', 'assign'], + }, + read: { + ..., + ui: ['view'], + } + } +} +``` + +Once done, you can now access this within the public part kibana plugin code using the Kibana Context Provider as follows: + +```tsx +export const MyPluginComponent: React.FC = () => { + const kibana = useKibana(); + + return ( + + + +

Feature Privileges Example

+
+
+ + +

Your privileges

+
+ + {Object.entries( + kibana.services.application!.capabilities[FEATURE_PRIVILEGES_PLUGIN_ID] + ).map(([capability, value]) => { + return value === true ? ( +
+ {capability} + +
+ ) : null; + })} +
+
+ ); +}; +``` + +### Control access to API endpoints and other server side features + +Similarly for API access, lets modify the server side of our plugin by adding a couple of API routes as follows: + +```ts +public setup(core: CoreSetup, deps: FeatureControlExampleDeps) { + // ... + const router = core.http.createRouter(); + router.get( + { + path: '/internal/my_plugin/read', + validate: false, + }, + async (context, request, response) => { + return response.ok({ + body: { + time: new Date().toISOString(), + }, + }); + } + ); + router.get( + { + path: '/internal/my_plugin/sensitive_action', + validate: false, + }, + async (context, request, response) => { + return response.ok({ + body: { + time: new SecretClass().secretResponse(), + }, + }); + } + ); +} +``` + +Here we've added two routes, one which returns the current date-time in ISO 8601 format and another which returns a sensitive response that we'd like to protect. + +To do so, we need to modify the configuration object for our route to look like this: + +```ts +public setup(core: CoreSetup, deps: FeatureControlExampleDeps) { + // ... + const router = core.http.createRouter(); + router.get( + { + path: '/internal/my_plugin/read', + validate: false, + }, + async (context, request, response) => { + return response.ok({ + body: { + time: new Date().toISOString(), + }, + }); + } + ); + router.get( + { + path: '/internal/my_plugin/sensitive_action', + validate: false, + options: { + tags: ['access:my_closed_example_api'], + }, + }, + async (context, request, response) => { + return response.ok({ + body: { + time: new SecretClass().secretResponse(), + }, + }); + } + ); +} +``` + +Notice, we've added an `options.tags` property for the API route that returns sensitive information. This tag is then used in the privileges object as follow + +```ts +{ + …, + privileges: { + all: { + ..., + api: ['my_closed_example_api'], // Notice that we've dropped the `access` string here + }, + read: { + ..., + api: [], + } + } +} +``` + +This tells the Kibana RBAC system that users with the role that has `all` access to your plugin can also access the api that is tagged with `my_closed_example_api`. This now secures your API endpoint and will throw a `403 Unauthorized` error to any users who don't have the right permissions. + +We've successfully added access control to your plugin using the Kibana feature privileges. + +## Options and Configuration + +A deep dive into every option for the Kibana Feature configuration and what they mean. + +### KibanaFeatureConfig Interface + +#### id + +- **Description**: Unique identifier for this feature. This identifier is also used when generating UI Capabilities. +- **Type**: string +- **Example**: `"myFeature"` + +#### name + +- **Description**: Display name for this feature. This will be displayed to end-users, so a translatable string is advised for i18n. +- **Type**: string +- **Example**: `"My Feature"` + +#### description (optional) + +- **Description**: An optional description that will appear as subtext underneath the feature name. +- **Type**: string +- **Example**: `"This is a feature that allows users to perform advanced actions."` + +#### category + +- **Description**: The category for this feature. This will be used to organize the list of features for display within the Spaces and Roles management screens. +- **Type**: AppCategory (enum) +- **Example**: `AppCategory.Security` + +#### order (optional) + +- **Description**: An ordinal used to sort features relative to one another for display. +- **Type**: number +- **Example**: `10` + +#### excludeFromBasePrivileges (optional) + +- **Description**: Whether or not this feature should be excluded from the base privileges. This is primarily helpful when migrating applications with a "legacy" privileges model to use Kibana privileges. +- **Type**: boolean +- **Example**: `false` + +#### minimumLicense (optional) + +- **Description**: Optional minimum supported license. If omitted, all licenses are allowed. This does not restrict access to your feature based on license. Its only purpose is to inform the space and roles UIs on which features to display. +- **Type**: LicenseType (enum) +- **Example**: `LicenseType.Gold` + +#### app + +- **Description**: An array of app IDs that are enabled when this feature is enabled. Apps specified here will automatically cascade to the privileges defined below, unless specified differently there. +- **Type**: string[] +- **Example**: `["app1", "app2"]` + +#### management (optional) + +- **Description**: If this feature includes management sections, you can specify them here to control visibility of those pages based on the current space. +- **Type**: Object +- **Example**: + ```js + management: { + kibana: ["settings", "indices"], + myApp: ["config"] + } + ``` + +#### catalogue (optional) + +- **Description**: If this feature includes a catalogue entry, you can specify them here to control visibility based on the current space. +- **Type**: string[] +- **Example**: `["cat1", "cat2"]` + +#### alerting (optional) + +- **Description**: If your feature grants access to specific Alert Types, you can specify them here to control visibility based on the current space. +- **Type**: string[] +- **Example**: `["alertType1", "alertType2"]` + +#### cases (optional) + +- **Description**: If your feature grants access to specific case types, you can specify them here to control visibility based on the current space. +- **Type**: string[] +- **Example**: `["caseType1", "caseType2"]` + +#### privileges + +- **Description**: Feature privilege definition. These are used to control what access the read/all roles will have when enabled for your application. +- **Type**: [FeatureKibanaPrivileges](#featurekibanaprivileges-interface) +- **Example**: + ```js + privileges: { + all: {...}, // expanded below + read: {...} + } + ``` + +#### subFeatures (optional) + +- **Description**: Optional sub-feature privilege definitions. This can only be specified if `privileges` are also defined. +- **Type**: SubFeatureConfig[] +- **Example**: + ```js + subFeatures: [ + { + id: 'subFeature1', + name: 'Sub Feature 1', + // ... other sub-feature properties + }, + ]; + ``` + +#### privilegesTooltip (optional) + +- **Description**: Optional message to display on the Role Management screen when configuring permissions for this feature. +- **Type**: string +- **Example**: `"Configure privileges for this feature."` + +#### reserved (private) + +- **Description**: Private information about reserved privileges for this feature. +- **Type**: Object +- **Example**: + ```js + reserved: { + description: "Reserved privileges for advanced users.", + privileges: [ + // ... reserved privilege definitions + ] + } + ``` + + +### FeatureKibanaPrivileges Interface + +#### excludeFromBasePrivileges (optional) + +- **Description**: Whether or not this specific privilege should be excluded from the base privileges. +- **Type**: boolean +- **Example**: `true` + +#### requireAllSpaces (optional) + +- **Description**: Whether or not this privilege should only be granted to `All Spaces *`. Should be used for features that do not support Spaces. Defaults to `false`. +- **Type**: boolean +- **Example**: `false` + +#### disabled (optional) + +- **Description**: Whether or not this privilege should be hidden in the roles UI and disallowed on the API. Defaults to `false`. +- **Type**: boolean +- **Example**: `true` + +#### management (optional) + +- **Description**: If this feature includes management sections, you can specify them here to control visibility of those pages based on user privileges. +- **Type**: Object +- **Example**: + ```js + management: { + kibana: ["settings"], + myApp: ["config"] + } + ``` + +#### catalogue (optional) + +- **Description**: If this feature includes a catalogue entry, you can specify them here to control visibility based on user permissions. +- **Type**: string[] +- **Example**: `["cat1", "cat2"]` + +#### api (optional) + +- **Description**: If your feature includes server-side APIs, you can tag those routes to secure access based on user permissions. +- **Type**: string[] +- **Example**: `["my_feature-admin", "my_feature-user"]` + +#### app (optional) + +- **Description**: If your feature exposes a client-side application, you can control access to them here. +- **Type**: string[] +- **Example**: `["my-app", "kibana"]` + +#### alerting (optional) + +- **Description**: If your feature requires access to specific Alert Types, then specify your access needs here. +- **Type**: Object +- **Example**: + ```js + alerting: { + rule: { + all: ["my-alert-type-within-my-feature"], + read: ["my-alert-type"] + }, + alert: { + all: ["my-alert-type-within-my-feature"], + read: ["my-alert-type"] + } + } + ``` + +#### cases (optional) + +- **Description**: If your feature requires access to specific owners of cases, specify your access needs here. +- **Type**: Object +- **Example**: + ```js + cases: { + all: ["securitySolution"], + push: ["securitySolution"], + create: ["securitySolution"], + read: ["securitySolution"], + update: ["securitySolution"], + delete: ["securitySolution"] + } + ``` + +#### savedObject + +- **Description**: If your feature requires access to specific saved objects, then specify your access needs here. +- **Type**: Object +- **Example**: + ```js + savedObject: { + all: ["my-saved-object-type"], + read: ["config"] + } + ``` + +#### ui + +- **Description**: A list of UI Capabilities that should be granted to users with this privilege. These capabilities will automatically be namespaces within your feature id. +- **Type**: string[] +- **Example**: `["show", "save"]` diff --git a/examples/feature_control_examples/common/index.ts b/examples/feature_control_examples/common/index.ts new file mode 100644 index 00000000000000..aeb35cb1a4a96e --- /dev/null +++ b/examples/feature_control_examples/common/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export const FEATURE_PRIVILEGES_PLUGIN_ID = 'featurePrivilegesPluginExample'; diff --git a/examples/feature_control_examples/kibana.jsonc b/examples/feature_control_examples/kibana.jsonc new file mode 100644 index 00000000000000..61d3313585d402 --- /dev/null +++ b/examples/feature_control_examples/kibana.jsonc @@ -0,0 +1,13 @@ +{ + "type": "plugin", + "id": "@kbn/feature-controls-examples-plugin", + "owner": "@elastic/kibana-security", + "description": "Demo of how to implement feature controls", + "plugin": { + "id": "featureControlsExamples", + "server": true, + "browser": true, + "requiredBundles": ["kibanaReact"], + "requiredPlugins": ["developerExamples", "security", "spaces", "features"] + } +} diff --git a/examples/feature_control_examples/public/app.tsx b/examples/feature_control_examples/public/app.tsx new file mode 100644 index 00000000000000..835bed27780bd1 --- /dev/null +++ b/examples/feature_control_examples/public/app.tsx @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { EuiButton, EuiHealth, EuiPageTemplate, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; +import type { CoreStart } from '@kbn/core/public'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import React, { useEffect, useState } from 'react'; +import { FEATURE_PRIVILEGES_PLUGIN_ID } from '../common'; + +export const MyPluginComponent: React.FC = () => { + const [time, setTime] = useState(''); + const kibana = useKibana(); + + const fetchData = async () => { + const response = await fetch('/internal/my_plugin/read'); + const data = await response.json(); + + // console.log(data2); + setTime(data.time); + }; + + useEffect(() => { + fetchData(); + }, []); + + return ( + + + +

Feature Privileges Example

+
+
+ + +

Server Time: {time}

+
+ Refresh (Super user only) +
+ + +

Your privileges

+
+ + {Object.entries( + kibana.services.application!.capabilities[FEATURE_PRIVILEGES_PLUGIN_ID] + ).map(([capability, value]) => { + return value === true ? ( +
+ {capability} + +
+ ) : null; + })} +
+
+ ); +}; diff --git a/examples/feature_control_examples/public/index.tsx b/examples/feature_control_examples/public/index.tsx new file mode 100644 index 00000000000000..9310b9339da0a9 --- /dev/null +++ b/examples/feature_control_examples/public/index.tsx @@ -0,0 +1,59 @@ +/* + * 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 ReactDOM from 'react-dom'; +import { AppMountParameters, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; +import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; +import { SecurityPluginSetup, SecurityPluginStart } from '@kbn/security-plugin/public'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; +import type { FeaturesPluginSetup } from '@kbn/features-plugin/public'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { MyPluginComponent } from './app'; + +interface SetupDeps { + developerExamples: DeveloperExamplesSetup; + security: SecurityPluginSetup; + features: FeaturesPluginSetup; +} + +interface StartDeps { + security: SecurityPluginStart; +} + +export class FeatureControlsPluginExample implements Plugin { + public setup(coreSetup: CoreSetup, deps: SetupDeps) { + coreSetup.application.register({ + id: 'featureControlsExamples', + title: 'FeatureControlExamples', + async mount({ element }: AppMountParameters) { + const [coreStart] = await coreSetup.getStartServices(); + ReactDOM.render( + + + + + , + element + ); + return () => ReactDOM.unmountComponentAtNode(element); + }, + }); + deps.developerExamples.register({ + appId: 'featureControlsExamples', + title: 'Feature Control Examples', + description: 'Demo of how to implement Feature Controls', + }); + } + + public start(core: CoreStart, deps: StartDeps) { + return {}; + } + + public stop() {} +} +export const plugin = () => new FeatureControlsPluginExample(); diff --git a/examples/feature_control_examples/server/index.ts b/examples/feature_control_examples/server/index.ts new file mode 100644 index 00000000000000..0db874ff2047e7 --- /dev/null +++ b/examples/feature_control_examples/server/index.ts @@ -0,0 +1,11 @@ +/* + * 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 { PluginInitializer } from '@kbn/core/server'; +import { FeatureControlsPluginExample } from './plugin'; + +export const plugin: PluginInitializer = () => new FeatureControlsPluginExample(); diff --git a/examples/feature_control_examples/server/plugin.ts b/examples/feature_control_examples/server/plugin.ts new file mode 100644 index 00000000000000..95be91fbbde739 --- /dev/null +++ b/examples/feature_control_examples/server/plugin.ts @@ -0,0 +1,90 @@ +/* + * 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 { CoreSetup, DEFAULT_APP_CATEGORIES, Plugin } from '@kbn/core/server'; +import { + PluginSetupContract as FeaturesPluginSetup, + // PluginStartContract as FeaturesPluginStart, +} from '@kbn/features-plugin/server'; +import { FEATURE_PRIVILEGES_PLUGIN_ID } from '../common'; + +export interface FeatureControlExampleDeps { + features: FeaturesPluginSetup; +} + +export class FeatureControlsPluginExample + implements Plugin +{ + public setup(core: CoreSetup, { features }: FeatureControlExampleDeps) { + features.registerKibanaFeature({ + id: FEATURE_PRIVILEGES_PLUGIN_ID, + name: 'Feature Plugin Examples', + category: DEFAULT_APP_CATEGORIES.management, + app: ['FeaturePluginExample'], + privileges: { + all: { + app: ['FeaturePluginExample'], + savedObject: { + all: [], + read: [], + }, + api: ['my_closed_example_api'], + ui: ['view', 'create', 'edit', 'delete', 'assign'], + }, + read: { + app: ['FeaturePluginExample'], + savedObject: { + all: [], + read: ['tag'], + }, + api: [], + ui: ['view'], + }, + }, + }); + + const router = core.http.createRouter(); + router.get( + { + path: '/internal/my_plugin/read', + validate: false, + }, + async (context, request, response) => { + return response.ok({ + body: { + time: new Date().toISOString(), + }, + }); + } + ); + router.get( + { + path: '/internal/my_plugin/sensitive_action', + validate: false, + options: { + tags: ['access:my_closed_example_api'], + }, + }, + async (context, request, response) => { + return response.ok({ + body: { + time: new Date().toISOString(), + }, + }); + } + ); + } + + start() { + return {}; + } + + stop() { + return {}; + } +} diff --git a/examples/feature_control_examples/tsconfig.json b/examples/feature_control_examples/tsconfig.json new file mode 100644 index 00000000000000..e59fb8dac56146 --- /dev/null +++ b/examples/feature_control_examples/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": [ + "index.ts", + "common/**/*.ts", + "public/**/*.ts", + "public/**/*.tsx", + "server/**/*.ts", + "../../typings/**/*" + ], + "exclude": ["target/**/*"], + "kbn_references": [ + "@kbn/core", + "@kbn/security-plugin", + "@kbn/developer-examples-plugin", + "@kbn/shared-ux-page-kibana-template", + "@kbn/features-plugin", + "@kbn/kibana-react-plugin" + ] +} diff --git a/nav-kibana-dev.docnav.json b/nav-kibana-dev.docnav.json index 87d63b80f30dbe..0c70e54167122c 100644 --- a/nav-kibana-dev.docnav.json +++ b/nav-kibana-dev.docnav.json @@ -81,6 +81,10 @@ { "id": "kibDevDocsSecurityIntro" }, + { + "id": "kibDevFeaturePrivileges", + "label": "Feature Privileges" + }, { "id": "kibDevDocsSavedObjectsIntro", "label": "Saved objects" diff --git a/package.json b/package.json index a08963d37feeab..c29325ea420923 100644 --- a/package.json +++ b/package.json @@ -425,6 +425,7 @@ "@kbn/expression-xy-plugin": "link:src/plugins/chart_expressions/expression_xy", "@kbn/expressions-explorer-plugin": "link:examples/expressions_explorer", "@kbn/expressions-plugin": "link:src/plugins/expressions", + "@kbn/feature-controls-examples-plugin": "link:examples/feature_control_examples", "@kbn/feature-usage-test-plugin": "link:x-pack/test/plugin_api_integration/plugins/feature_usage_test", "@kbn/features-plugin": "link:x-pack/plugins/features", "@kbn/fec-alerts-test-plugin": "link:x-pack/test/functional_execution_context/plugins/alerts", @@ -880,7 +881,7 @@ "del": "^6.1.0", "elastic-apm-node": "^4.0.0", "email-addresses": "^5.0.0", - "execa": "^4.0.2", + "execa": "^5.1.1", "expiry-js": "0.1.7", "extract-zip": "^2.0.1", "fast-deep-equal": "^3.1.1", @@ -938,7 +939,7 @@ "maplibre-gl": "3.1.0", "markdown-it": "^12.3.2", "md5": "^2.1.0", - "mdast-util-to-hast": "10.0.1", + "mdast-util-to-hast": "10.2.0", "memoize-one": "^6.0.0", "mime": "^2.4.4", "mime-types": "^2.1.27", @@ -1042,7 +1043,7 @@ "type-detect": "^4.0.8", "typescript-fsa": "^3.0.0", "typescript-fsa-reducers": "^1.2.2", - "unified": "^9.2.1", + "unified": "9.2.2", "use-resize-observer": "^9.1.0", "usng.js": "^0.4.5", "utility-types": "^3.10.0", diff --git a/packages/deeplinks/ml/deep_links.ts b/packages/deeplinks/ml/deep_links.ts index dc6accb275272a..1c16543512b095 100644 --- a/packages/deeplinks/ml/deep_links.ts +++ b/packages/deeplinks/ml/deep_links.ts @@ -15,7 +15,7 @@ export type LinkId = | 'anomalyDetection' | 'anomalyExplorer' | 'singleMetricViewer' - | 'dataComparison' + | 'dataDrift' | 'dataFrameAnalytics' | 'resultExplorer' | 'analyticsMap' diff --git a/packages/default-nav/ml/default_navigation.ts b/packages/default-nav/ml/default_navigation.ts index 829c2307299d37..c0035f6f25db0e 100644 --- a/packages/default-nav/ml/default_navigation.ts +++ b/packages/default-nav/ml/default_navigation.ts @@ -114,9 +114,9 @@ export const defaultNavigation: MlNodeDefinition = { }, { title: i18n.translate('defaultNavigation.ml.dataComparison', { - defaultMessage: 'Data comparison', + defaultMessage: 'Data drift', }), - link: 'ml:dataComparison', + link: 'ml:dataDrift', }, ], }, diff --git a/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/dynamic_commands.ts b/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/dynamic_commands.ts index 4a5a147ffcbded..f6348fe2c11e2d 100644 --- a/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/dynamic_commands.ts +++ b/packages/kbn-monaco/src/esql/lib/autocomplete/autocomplete_definitions/dynamic_commands.ts @@ -45,9 +45,15 @@ export const buildNoPoliciesAvailableDefinition = (): AutocompleteCommandDefinit insertText: '', kind: 26, detail: i18n.translate('monaco.esql.autocomplete.noPoliciesLabelsFound', { - defaultMessage: 'No policies found', + defaultMessage: 'Click to create', }), sortText: 'D', + command: { + id: 'esql.policies.create', + title: i18n.translate('monaco.esql.autocomplete.createNewPolicy', { + defaultMessage: 'Click to create', + }), + }, }, ]; diff --git a/packages/kbn-monaco/src/esql/lib/autocomplete/types.ts b/packages/kbn-monaco/src/esql/lib/autocomplete/types.ts index 0b64f0871b27a0..fc22bae7bbdb99 100644 --- a/packages/kbn-monaco/src/esql/lib/autocomplete/types.ts +++ b/packages/kbn-monaco/src/esql/lib/autocomplete/types.ts @@ -32,5 +32,5 @@ export interface UserDefinedVariables { /** @internal **/ export type AutocompleteCommandDefinition = Pick< monaco.languages.CompletionItem, - 'label' | 'insertText' | 'kind' | 'detail' | 'documentation' | 'sortText' + 'label' | 'insertText' | 'kind' | 'detail' | 'documentation' | 'sortText' | 'command' >; diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index b1f1708262743e..b84e459fd222d0 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -131,7 +131,7 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ const language = getAggregateQueryMode(query); const queryString: string = query[language] ?? ''; const kibana = useKibana(); - const { dataViews, expressions, indexManagementApiService } = kibana.services; + const { dataViews, expressions, indexManagementApiService, application } = kibana.services; const [code, setCode] = useState(queryString ?? ''); const [codeOneLiner, setCodeOneLiner] = useState(''); const [editorHeight, setEditorHeight] = useState( @@ -148,6 +148,16 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ useState(); const policiesRef = useRef([]); + + // Registers a command to redirect users to the index management page + // to create a new policy. The command is called by the buildNoPoliciesAvailableDefinition + monaco.editor.registerCommand('esql.policies.create', (...args) => { + application?.navigateToApp('management', { + path: 'data/index_management/enrich_policies/create', + openInNewTab: true, + }); + }); + const styles = textBasedLanguagedEditorStyles( euiTheme, isCompactFocused, diff --git a/packages/kbn-unified-data-table/src/components/data_table.test.tsx b/packages/kbn-unified-data-table/src/components/data_table.test.tsx index 7ca08882307499..6aa101cc558b49 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.test.tsx @@ -432,4 +432,37 @@ describe('UnifiedDataTable', () => { expect(tourStep).toEqual('test-expand'); }); }); + + describe('gridStyleOverride', () => { + it('should render the grid with the default style if no gridStyleOverride is provided', async () => { + const component = await getComponent({ + ...getProps(), + }); + + const grid = findTestSubject(component, 'docTable'); + + expect(grid.hasClass('euiDataGrid--bordersHorizontal')).toBeTruthy(); + expect(grid.hasClass('euiDataGrid--fontSizeSmall')).toBeTruthy(); + expect(grid.hasClass('euiDataGrid--paddingLarge')).toBeTruthy(); + expect(grid.hasClass('euiDataGrid--rowHoverHighlight')).toBeTruthy(); + expect(grid.hasClass('euiDataGrid--headerUnderline')).toBeTruthy(); + expect(grid.hasClass('euiDataGrid--stripes')).toBeTruthy(); + }); + it('should render the grid with style override if gridStyleOverride is provided', async () => { + const component = await getComponent({ + ...getProps(), + gridStyleOverride: { + stripes: false, + rowHover: 'none', + border: 'none', + }, + }); + + const grid = findTestSubject(component, 'docTable'); + + expect(grid.hasClass('euiDataGrid--stripes')).toBeFalsy(); + expect(grid.hasClass('euiDataGrid--rowHoverHighlight')).toBeFalsy(); + expect(grid.hasClass('euiDataGrid--bordersNone')).toBeTruthy(); + }); + }); }); diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index e5f5e5dbbba39a..a9d749e46169de 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -27,6 +27,7 @@ import { EuiDataGridControlColumn, EuiDataGridCustomBodyProps, EuiDataGridCellValueElementProps, + EuiDataGridStyle, } from '@elastic/eui'; import type { DataView } from '@kbn/data-views-plugin/public'; import { @@ -282,6 +283,10 @@ export interface UnifiedDataTableProps { * Optional key/value pairs to set guided onboarding steps ids for a data table components included to guided tour. */ componentsTourSteps?: Record; + /** + * Optional gridStyle override. + */ + gridStyleOverride?: EuiDataGridStyle; } export const EuiDataGridMemoized = React.memo(EuiDataGrid); @@ -335,6 +340,7 @@ export const UnifiedDataTable = ({ externalCustomRenderers, consumer = 'discover', componentsTourSteps, + gridStyleOverride, }: UnifiedDataTableProps) => { const { fieldFormats, toastNotifications, dataViewFieldEditor, uiSettings, storage, data } = services; @@ -789,7 +795,7 @@ export const UnifiedDataTable = ({ toolbarVisibility={toolbarVisibility} rowHeightsOptions={rowHeightsOptions} inMemory={inMemory} - gridStyle={GRID_STYLE} + gridStyle={gridStyleOverride ?? GRID_STYLE} renderCustomGridBody={renderCustomGridBody} trailingControlColumns={trailingControlColumns} /> diff --git a/packages/kbn-unified-doc-viewer/package.json b/packages/kbn-unified-doc-viewer/package.json index c301255f057bcd..a254194d5d940e 100644 --- a/packages/kbn-unified-doc-viewer/package.json +++ b/packages/kbn-unified-doc-viewer/package.json @@ -3,5 +3,8 @@ "private": true, "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "sideEffects": false -} \ No newline at end of file + "sideEffects": [ + "*.css", + "*.scss" + ] +} diff --git a/packages/shared-ux/chrome/navigation/mocks/src/navlinks.ts b/packages/shared-ux/chrome/navigation/mocks/src/navlinks.ts index c3d3b756eaae45..b0adfd22734fcd 100644 --- a/packages/shared-ux/chrome/navigation/mocks/src/navlinks.ts +++ b/packages/shared-ux/chrome/navigation/mocks/src/navlinks.ts @@ -62,7 +62,7 @@ const allNavLinks: AppDeepLinkId[] = [ 'ml:fileUpload', 'ml:filterListsSettings', 'ml:indexDataVisualizer', - 'ml:dataComparison', + 'ml:dataDrift', 'ml:logPatternAnalysis', 'ml:logRateAnalysis', 'ml:memoryUsage', diff --git a/packages/shared-ux/chrome/navigation/src/ui/__snapshots__/default_navigation.test.tsx.snap b/packages/shared-ux/chrome/navigation/src/ui/__snapshots__/default_navigation.test.tsx.snap index f7f08fe075f56f..d73d9c68385bc0 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/__snapshots__/default_navigation.test.tsx.snap +++ b/packages/shared-ux/chrome/navigation/src/ui/__snapshots__/default_navigation.test.tsx.snap @@ -473,21 +473,21 @@ Array [ "children": undefined, "deepLink": Object { "baseUrl": "/mocked", - "href": "http://mocked/ml:dataComparison", - "id": "ml:dataComparison", - "title": "Deeplink ml:dataComparison", - "url": "/mocked/ml:dataComparison", + "href": "http://mocked/ml:dataDrift", + "id": "ml:dataDrift", + "title": "Deeplink ml:dataDrift", + "url": "/mocked/ml:dataDrift", }, "href": undefined, - "id": "ml:dataComparison", + "id": "ml:dataDrift", "isActive": false, "path": Array [ "rootNav:ml", "data_visualizer", - "ml:dataComparison", + "ml:dataDrift", ], "renderItem": undefined, - "title": "Data comparison", + "title": "Data drift", }, ], "deepLink": undefined, diff --git a/packages/shared-ux/markdown/mocks/storybook.ts b/packages/shared-ux/markdown/mocks/storybook.ts index 3ed41273764edd..74c865365583be 100644 --- a/packages/shared-ux/markdown/mocks/storybook.ts +++ b/packages/shared-ux/markdown/mocks/storybook.ts @@ -82,7 +82,7 @@ export class MarkdownStorybookMock extends AbstractStorybookMock< }; } - getServices() { + getServices(): MarkdownProps { return { ...this.getProps() }; } } diff --git a/src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes.test.ts index ba1107dff6f8ed..bea50cf32ce351 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group2/batch_size_bytes.test.ts @@ -55,8 +55,7 @@ async function fetchDocuments(esClient: ElasticsearchClient, index: string) { const assertMigratedDocuments = (arr: any[], target: any[]) => target.every((v) => arr.includes(v)); -// FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/160295 -describe.skip('migration v2', () => { +describe('migration v2', () => { let esServer: TestElasticsearchUtils; let root: Root; let startES: () => Promise; @@ -119,7 +118,7 @@ describe.skip('migration v2', () => { await root.preboot(); await root.setup(); await expect(root.start()).rejects.toMatchInlineSnapshot( - `[Error: Unable to complete saved object migrations for the [.kibana] index: The document with _id "canvas-workpad-template:workpad-template-061d7868-2b4e-4dc8-8bf7-3772b52926e5" is 1715318 bytes which exceeds the configured maximum batch size of 1015275 bytes. To proceed, please increase the 'migrations.maxBatchSizeBytes' Kibana configuration option and ensure that the Elasticsearch 'http.max_content_length' configuration option is set to an equal or larger value.]` + `[Error: Unable to complete saved object migrations for the [.kibana] index: The document with _id "canvas-workpad-template:workpad-template-061d7868-2b4e-4dc8-8bf7-3772b52926e5" is 1715319 bytes which exceeds the configured maximum batch size of 1015275 bytes. To proceed, please increase the 'migrations.maxBatchSizeBytes' Kibana configuration option and ensure that the Elasticsearch 'http.max_content_length' configuration option is set to an equal or larger value.]` ); await retryAsync( @@ -132,7 +131,7 @@ describe.skip('migration v2', () => { expect( records.find((rec) => rec.message.startsWith( - `Unable to complete saved object migrations for the [.kibana] index: The document with _id "canvas-workpad-template:workpad-template-061d7868-2b4e-4dc8-8bf7-3772b52926e5" is 1715318 bytes which exceeds the configured maximum batch size of 1015275 bytes. To proceed, please increase the 'migrations.maxBatchSizeBytes' Kibana configuration option and ensure that the Elasticsearch 'http.max_content_length' configuration option is set to an equal or larger value.` + `Reason: Unable to complete saved object migrations for the [.kibana] index: The document with _id "canvas-workpad-template:workpad-template-061d7868-2b4e-4dc8-8bf7-3772b52926e5" is 1715319 bytes which exceeds the configured maximum batch size of 1015275 bytes. To proceed, please increase the 'migrations.maxBatchSizeBytes' Kibana configuration option and ensure that the Elasticsearch 'http.max_content_length' configuration option is set to an equal or larger value.` ) ) ).toBeDefined(); diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions_test_suite.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions_test_suite.ts index 9df98deea3b897..bb509799c052d0 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions_test_suite.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions_test_suite.ts @@ -756,8 +756,7 @@ export const runActionTestSuite = ({ // Reindex doesn't return any errors on it's own, so we have to test // together with waitForReindexTask - // Failing: See https://github.com/elastic/kibana/issues/166190 - describe.skip('reindex & waitForReindexTask', () => { + describe('reindex & waitForReindexTask', () => { it('resolves right when reindex succeeds without reindex script', async () => { const res = (await reindex({ client, @@ -1120,15 +1119,17 @@ export const runActionTestSuite = ({ `); }); it('resolves left wait_for_task_completion_timeout when the task does not finish within the timeout', async () => { - await waitForIndexStatus({ + const readyTaskRes = await waitForIndexStatus({ client, - index: '.kibana_1', + index: 'existing_index_with_docs', status: 'yellow', })(); + expect(Either.isRight(readyTaskRes)).toBe(true); + const res = (await reindex({ client, - sourceIndex: '.kibana_1', + sourceIndex: 'existing_index_with_docs', targetIndex: 'reindex_target', reindexScript: Option.none, requireAlias: false, @@ -1467,7 +1468,7 @@ export const runActionTestSuite = ({ it('resolves left wait_for_task_completion_timeout when the task does not complete within the timeout', async () => { const res = (await pickupUpdatedMappings( client, - '.kibana_1', + 'existing_index_with_docs', 1000 )()) as Either.Right; diff --git a/src/plugins/console/public/lib/autocomplete/autocomplete.ts b/src/plugins/console/public/lib/autocomplete/autocomplete.ts index d6bb3879669aea..79adee3bd42b7d 100644 --- a/src/plugins/console/public/lib/autocomplete/autocomplete.ts +++ b/src/plugins/console/public/lib/autocomplete/autocomplete.ts @@ -999,7 +999,7 @@ export default function ({ // will simulate autocomplete on 'GET /a/b/' with a filter by index return { tokenPath: context.urlTokenPath?.slice(0, -1), - predicate: (term: any) => term.meta === 'index', + predicate: (term: ReturnType[0]) => term.meta === 'index', }; } else { // will do nothing special diff --git a/src/plugins/data_view_editor/public/data_view_editor_service.ts b/src/plugins/data_view_editor/public/data_view_editor_service.ts index 8d709ca30fe32a..c9b382447fd871 100644 --- a/src/plugins/data_view_editor/public/data_view_editor_service.ts +++ b/src/plugins/data_view_editor/public/data_view_editor_service.ts @@ -37,12 +37,24 @@ export const matchedIndiciesDefault = { visibleIndices: [], }; +/** + * ConstructorArgs for DataViewEditorService + */ export interface DataViewEditorServiceConstructorArgs { + /** + * Dependencies for the DataViewEditorService + */ services: { http: HttpSetup; dataViews: DataViewsServicePublic; }; + /** + * Whether service requires requireTimestampField + */ requireTimestampField?: boolean; + /** + * Initial type, indexPattern, and name to populate service + */ initialValues: { name?: string; type?: INDEX_PATTERN_TYPE; diff --git a/src/plugins/data_view_editor/public/data_view_editor_service_lazy.ts b/src/plugins/data_view_editor/public/data_view_editor_service_lazy.ts new file mode 100644 index 00000000000000..14c9e809e98420 --- /dev/null +++ b/src/plugins/data_view_editor/public/data_view_editor_service_lazy.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { DataViewEditorService } from './data_view_editor_service'; diff --git a/src/plugins/data_view_editor/public/index.ts b/src/plugins/data_view_editor/public/index.ts index 3d6d40c9846acb..7b55450cd29280 100644 --- a/src/plugins/data_view_editor/public/index.ts +++ b/src/plugins/data_view_editor/public/index.ts @@ -20,7 +20,11 @@ import { DataViewEditorPlugin } from './plugin'; -export type { PluginStart as DataViewEditorStart, DataViewEditorProps } from './types'; +export type { + PluginStart as DataViewEditorStart, + DataViewEditorProps, + DataViewEditorService, +} from './types'; export function plugin() { return new DataViewEditorPlugin(); diff --git a/src/plugins/data_view_editor/public/mocks.ts b/src/plugins/data_view_editor/public/mocks.ts index fe4f3663cbab2a..0ea3587b2b7b73 100644 --- a/src/plugins/data_view_editor/public/mocks.ts +++ b/src/plugins/data_view_editor/public/mocks.ts @@ -23,6 +23,7 @@ const createStartContract = (): Start => { userPermissions: { editDataView: jest.fn(), }, + dataViewEditorServiceFactory: jest.fn(), }; }; diff --git a/src/plugins/data_view_editor/public/plugin.tsx b/src/plugins/data_view_editor/public/plugin.tsx index 232958fbb2c217..34263ad6cdca52 100644 --- a/src/plugins/data_view_editor/public/plugin.tsx +++ b/src/plugins/data_view_editor/public/plugin.tsx @@ -63,6 +63,14 @@ export class DataViewEditorPlugin userPermissions: { editDataView: () => dataViews.getCanSaveSync(), }, + /** + * Helper method to generate a new data view editor service. + * @returns DataViewEditorService + */ + dataViewEditorServiceFactory: async () => { + const module = await import('./data_view_editor_service_lazy'); + return module; + }, }; } diff --git a/src/plugins/data_view_editor/public/types.ts b/src/plugins/data_view_editor/public/types.ts index 93fe26ab476278..472fe2393a4af3 100644 --- a/src/plugins/data_view_editor/public/types.ts +++ b/src/plugins/data_view_editor/public/types.ts @@ -24,6 +24,7 @@ import type { INDEX_PATTERN_TYPE, MatchedItem, } from '@kbn/data-views-plugin/public'; +import type { DataViewEditorService } from './data_view_editor_service'; import { DataPublicPluginStart, IndexPatternAggRestrictions } from './shared_imports'; export interface DataViewEditorContext { @@ -74,12 +75,20 @@ export interface DataViewEditorProps { // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface PluginSetup {} +export type { DataViewEditorService }; export interface PluginStart { openEditor(options: DataViewEditorProps): () => void; IndexPatternEditorComponent: FC; userPermissions: { editDataView: () => boolean; }; + /** + * Helper method to generate a new data view editor service. + * @param requireTimestampField - whether service requires requireTimestampField + * @param initialValues - initial type, indexPattern, and name to populate service + * @returns DataViewEditorService + */ + dataViewEditorServiceFactory: () => Promise; } // eslint-disable-next-line @typescript-eslint/no-empty-interface diff --git a/src/plugins/embeddable/public/embeddable_panel/panel_actions/edit_panel_action/edit_panel_action.ts b/src/plugins/embeddable/public/embeddable_panel/panel_actions/edit_panel_action/edit_panel_action.ts index 942830da96e60b..3f465f2d374399 100644 --- a/src/plugins/embeddable/public/embeddable_panel/panel_actions/edit_panel_action/edit_panel_action.ts +++ b/src/plugins/embeddable/public/embeddable_panel/panel_actions/edit_panel_action/edit_panel_action.ts @@ -75,6 +75,7 @@ export class EditPanelAction implements Action { const canEditEmbeddable = Boolean( embeddable && embeddable.getOutput().editable && + !embeddable.getOutput().inlineEditable && (embeddable.getOutput().editUrl || (embeddable.getOutput().editApp && embeddable.getOutput().editPath) || embeddable.getOutput().editableWithExplicitInput) diff --git a/src/plugins/embeddable/public/lib/embeddables/i_embeddable.ts b/src/plugins/embeddable/public/lib/embeddables/i_embeddable.ts index 4f82e214401636..f3712082716236 100644 --- a/src/plugins/embeddable/public/lib/embeddables/i_embeddable.ts +++ b/src/plugins/embeddable/public/lib/embeddables/i_embeddable.ts @@ -30,6 +30,8 @@ export interface EmbeddableOutput { title?: string; description?: string; editable?: boolean; + // set this to true if the embeddable allows inline editing + inlineEditable?: boolean; // Whether the embeddable can be edited inline by re-requesting the explicit input from the user editableWithExplicitInput?: boolean; savedObjectId?: string; diff --git a/src/plugins/home/public/application/components/tutorial/number_parameter.js b/src/plugins/home/public/application/components/tutorial/number_parameter.js index 41ad9767ab0032..b2ac171393929c 100644 --- a/src/plugins/home/public/application/components/tutorial/number_parameter.js +++ b/src/plugins/home/public/application/components/tutorial/number_parameter.js @@ -8,6 +8,7 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { EuiFormRow, EuiFieldNumber } from '@elastic/eui'; export function NumberParameter({ id, label, value, setParameter }) { const handleChange = (evt) => { @@ -15,20 +16,9 @@ export function NumberParameter({ id, label, value, setParameter }) { }; return ( -
- -
- -
-
+ + + ); } diff --git a/src/plugins/home/public/application/components/tutorial/string_parameter.js b/src/plugins/home/public/application/components/tutorial/string_parameter.js index 459a0ab8c1a534..4c8ad157f10fe7 100644 --- a/src/plugins/home/public/application/components/tutorial/string_parameter.js +++ b/src/plugins/home/public/application/components/tutorial/string_parameter.js @@ -8,6 +8,7 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { EuiFormRow, EuiFieldText } from '@elastic/eui'; export function StringParameter({ id, label, value, setParameter }) { const handleChange = (evt) => { @@ -15,12 +16,9 @@ export function StringParameter({ id, label, value, setParameter }) { }; return ( -
- -
- -
-
+ + + ); } diff --git a/src/plugins/home/server/services/sample_data/data_sets/logs_tsdb/saved_objects.ts b/src/plugins/home/server/services/sample_data/data_sets/logs_tsdb/saved_objects.ts index 7f9b5e337cbb32..02a2ec4edb2202 100644 --- a/src/plugins/home/server/services/sample_data/data_sets/logs_tsdb/saved_objects.ts +++ b/src/plugins/home/server/services/sample_data/data_sets/logs_tsdb/saved_objects.ts @@ -16,14 +16,15 @@ export const getSavedObjects = (): SavedObject[] => [ type: 'visualization', updated_at: '2021-10-28T15:07:36.622Z', version: '1', - coreMigrationVersion: '8.0.0', - migrationVersion: { visualization: '8.0.0' }, + coreMigrationVersion: '8.8.0', + typeMigrationVersion: '8.0.0', + managed: false, attributes: { title: i18n.translate('home.sampleData.logsTsdbSpec.visitorsMapTitle', { defaultMessage: '[Logs TSDB] Visitors Map', }), visState: - '{"title":"[Logs TSDB] Visitors Map","type":"vega","aggs":[],"params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega/v5.json\\n config: {\\n kibana: {type: \\"map\\", latitude: 30, longitude: -120, zoom: 3}\\n }\\n data: [\\n {\\n name: table\\n url: {\\n index: kibana_sample_data_logstsdb\\n %context%: true\\n %timefield%: timestamp\\n body: {\\n size: 0\\n aggs: {\\n gridSplit: {\\n geotile_grid: {field: \\"geo.coordinates\\", precision: 5, size: 10000}\\n aggs: {\\n gridCentroid: {\\n geo_centroid: {\\n field: \\"geo.coordinates\\"\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n format: {property: \\"aggregations.gridSplit.buckets\\"}\\n transform: [\\n {\\n type: geopoint\\n projection: projection\\n fields: [\\n gridCentroid.location.lon\\n gridCentroid.location.lat\\n ]\\n }\\n ]\\n }\\n ]\\n scales: [\\n {\\n name: gridSize\\n type: linear\\n domain: {data: \\"table\\", field: \\"doc_count\\"}\\n range: [\\n 50\\n 1000\\n ]\\n }\\n {\\n name: bubbleColor\\n type: linear\\n domain: {\\n data: table\\n field: doc_count\\n }\\n range: [\\"rgb(249, 234, 197)\\",\\"rgb(243, 200, 154)\\",\\"rgb(235, 166, 114)\\", \\"rgb(231, 102, 76)\\"]\\n }\\n ]\\n marks: [\\n {\\n name: gridMarker\\n type: symbol\\n from: {data: \\"table\\"}\\n encode: {\\n update: {\\n fill: {\\n scale: bubbleColor\\n field: doc_count\\n }\\n size: {scale: \\"gridSize\\", field: \\"doc_count\\"}\\n xc: {signal: \\"datum.x\\"}\\n yc: {signal: \\"datum.y\\"}\\n tooltip: {\\n signal: \\"{flights: datum.doc_count}\\"\\n }\\n }\\n }\\n }\\n ]\\n}"}}', + '{"title":"[Logs] Visitors Map","type":"vega","aggs":[],"params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega/v5.json\\n config: {\\n kibana: {type: \\"map\\", latitude: 30, longitude: -120, zoom: 3}\\n }\\n data: [\\n {\\n name: table\\n url: {\\n index: kibana_sample_data_logs\\n %context%: true\\n %timefield%: timestamp\\n body: {\\n size: 0\\n aggs: {\\n gridSplit: {\\n geotile_grid: {field: \\"geo.coordinates\\", precision: 5, size: 10000}\\n aggs: {\\n gridCentroid: {\\n geo_centroid: {\\n field: \\"geo.coordinates\\"\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n format: {property: \\"aggregations.gridSplit.buckets\\"}\\n transform: [\\n {\\n type: geopoint\\n projection: projection\\n fields: [\\n gridCentroid.location.lon\\n gridCentroid.location.lat\\n ]\\n }\\n ]\\n }\\n ]\\n scales: [\\n {\\n name: gridSize\\n type: linear\\n domain: {data: \\"table\\", field: \\"doc_count\\"}\\n range: [\\n 50\\n 1000\\n ]\\n }\\n {\\n name: bubbleColor\\n type: linear\\n domain: {\\n data: table\\n field: doc_count\\n }\\n range: [\\"rgb(249, 234, 197)\\",\\"rgb(243, 200, 154)\\",\\"rgb(235, 166, 114)\\", \\"rgb(231, 102, 76)\\"]\\n }\\n ]\\n marks: [\\n {\\n name: gridMarker\\n type: symbol\\n from: {data: \\"table\\"}\\n encode: {\\n update: {\\n fill: {\\n scale: bubbleColor\\n field: doc_count\\n }\\n size: {scale: \\"gridSize\\", field: \\"doc_count\\"}\\n xc: {signal: \\"datum.x\\"}\\n yc: {signal: \\"datum.y\\"}\\n tooltip: {\\n signal: \\"{flights: datum.doc_count}\\"\\n }\\n }\\n }\\n }\\n ]\\n}"}}', uiStateJSON: '{}', description: '', version: 1, @@ -45,9 +46,9 @@ export const getSavedObjects = (): SavedObject[] => [ type: 'visualization', updated_at: '2021-07-21T21:33:42.541Z', version: '1', - migrationVersion: { - visualization: '7.14.0', - }, + coreMigrationVersion: '8.8.0', + typeMigrationVersion: '7.14.0', + managed: false, attributes: { title: i18n.translate('home.sampleData.logsTsdbSpec.heatmapTitle', { defaultMessage: '[Logs TSDB] Unique Destination Heatmap', @@ -59,81 +60,21 @@ export const getSavedObjects = (): SavedObject[] => [ uiStateJSON: '{}', version: 1, visState: - '{"title":"[Logs TSDB] Unique Destination Heatmap","type":"vega","aggs":[],"params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega-lite/v5.json\\n data: {\\n url: {\\n %context%: true\\n %timefield%: @timestamp\\n index: kibana_sample_data_logstsdb\\n body: {\\n aggs: {\\n countries: {\\n terms: {\\n field: geo.dest\\n size: 25\\n }\\n aggs: {\\n hours: {\\n histogram: {\\n field: hour_of_day\\n interval: 1\\n }\\n aggs: {\\n unique: {\\n cardinality: {\\n field: clientip\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n size: 0\\n }\\n }\\n format: {property: \\"aggregations.countries.buckets\\"}\\n }\\n \\n transform: [\\n {\\n flatten: [\\"hours.buckets\\"],\\n as: [\\"buckets\\"]\\n },\\n {\\n filter: \\"datum.buckets.unique.value > 0\\"\\n }\\n ]\\n\\n mark: {\\n type: rect\\n tooltip: {\\n expr: \\"{\\\\\\"Unique Visitors\\\\\\": datum.buckets.unique.value,\\\\\\"geo.src\\\\\\": datum.key,\\\\\\"Hour\\\\\\": datum.buckets.key}\\"\\n }\\n }\\n\\n encoding: {\\n x: {\\n field: buckets.key\\n type: nominal\\n scale: {\\n domain: {\\n expr: \\"sequence(0, 24)\\"\\n }\\n }\\n axis: {\\n title: false\\n labelAngle: 0\\n }\\n }\\n y: {\\n field: key\\n type: nominal\\n sort: {\\n field: -buckets.unique.value\\n }\\n axis: {title: false}\\n }\\n color: {\\n field: buckets.unique.value\\n type: quantitative\\n axis: {title: false}\\n scale: {\\n scheme: blues\\n }\\n }\\n }\\n}\\n"}}', + '{"title":"[Logs] Unique Destination Heatmap","type":"vega","aggs":[],"params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega-lite/v5.json\\n data: {\\n url: {\\n %context%: true\\n %timefield%: @timestamp\\n index: kibana_sample_data_logs\\n body: {\\n aggs: {\\n countries: {\\n terms: {\\n field: geo.dest\\n size: 25\\n }\\n aggs: {\\n hours: {\\n histogram: {\\n field: hour_of_day\\n interval: 1\\n }\\n aggs: {\\n unique: {\\n cardinality: {\\n field: clientip\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n size: 0\\n }\\n }\\n format: {property: \\"aggregations.countries.buckets\\"}\\n }\\n \\n transform: [\\n {\\n flatten: [\\"hours.buckets\\"],\\n as: [\\"buckets\\"]\\n },\\n {\\n filter: \\"datum.buckets.unique.value > 0\\"\\n }\\n ]\\n\\n mark: {\\n type: rect\\n tooltip: {\\n expr: \\"{\\\\\\"Unique Visitors\\\\\\": datum.buckets.unique.value,\\\\\\"geo.src\\\\\\": datum.key,\\\\\\"Hour\\\\\\": datum.buckets.key}\\"\\n }\\n }\\n\\n encoding: {\\n x: {\\n field: buckets.key\\n type: nominal\\n scale: {\\n domain: {\\n expr: \\"sequence(0, 24)\\"\\n }\\n }\\n axis: {\\n title: false\\n labelAngle: 0\\n }\\n }\\n y: {\\n field: key\\n type: nominal\\n sort: {\\n field: -buckets.unique.value\\n }\\n axis: {title: false}\\n }\\n color: {\\n field: buckets.unique.value\\n type: quantitative\\n axis: {title: false}\\n scale: {\\n scheme: blues\\n }\\n }\\n }\\n}\\n"}}', }, references: [], }, { - id: '4eb6e500-e1c7-11e7-b6d5-4dc382ef8f5b', - type: 'visualization', - updated_at: '2021-07-21T18:52:13.586Z', - version: '2', - migrationVersion: { - visualization: '7.14.0', - }, - attributes: { - title: i18n.translate('home.sampleData.logsTsdbSpec.hostVisitsBytesTableTitle', { - defaultMessage: '[Logs TSDB] Host, Visits and Bytes Table', - }), - visState: - '{"title":"[Logs TSDB] Host, Visits and Bytes Table","type":"metrics","aggs":[],"params":{"time_range_mode":"last_value","id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"table","series":[{"id":"bd09d600-e5b1-11e7-bfc2-a1f7e71965a1","color":"#68BC00","split_mode":"everything","metrics":[{"id":"bd09d601-e5b1-11e7-bfc2-a1f7e71965a1","type":"sum","field":"bytes"},{"sigma":"","id":"c9514c90-e5b1-11e7-bfc2-a1f7e71965a1","type":"sum_bucket","field":"bd09d601-e5b1-11e7-bfc2-a1f7e71965a1"}],"seperate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"c0c668d0-e5b1-11e7-bfc2-a1f7e71965a1"}],"label":"Bytes (Total)","split_color_mode":"gradient"},{"id":"b7672c30-a6df-11e8-8b18-1da1dfc50975","color":"#68BC00","split_mode":"everything","metrics":[{"id":"b7672c31-a6df-11e8-8b18-1da1dfc50975","type":"sum","field":"bytes"}],"seperate_axis":0,"axis_position":"right","formatter":"bytes","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","color_rules":[{"id":"c0c668d0-e5b1-11e7-bfc2-a1f7e71965a1"}],"label":"Bytes (Last Hour)","split_color_mode":"gradient","trend_arrows":1},{"id":"f2c20700-a6df-11e8-8b18-1da1dfc50975","color":"#68BC00","split_mode":"everything","metrics":[{"id":"f2c20701-a6df-11e8-8b18-1da1dfc50975","type":"cardinality","field":"clientip"},{"sigma":"","id":"f46333e0-a6df-11e8-8b18-1da1dfc50975","type":"sum_bucket","field":"f2c20701-a6df-11e8-8b18-1da1dfc50975"}],"seperate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Unique Visits (Total)","color_rules":[{"value":1000,"id":"2e963080-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(211,49,21,1)","operator":"lt"},{"value":1000,"id":"3d4fb880-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(252,196,0,1)","operator":"gte"},{"value":1500,"id":"435f8a20-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(104,188,0,1)","operator":"gte"}],"offset_time":"","value_template":"","trend_arrows":0,"split_color_mode":"gradient"},{"id":"46fd7fc0-e5b1-11e7-bfc2-a1f7e71965a1","color":"#68BC00","split_mode":"everything","metrics":[{"id":"46fd7fc1-e5b1-11e7-bfc2-a1f7e71965a1","type":"cardinality","field":"ip"}],"seperate_axis":0,"axis_position":"right","formatter":"number","chart_type":"line","line_width":1,"point_size":1,"fill":0.5,"stacked":"none","label":"Unique Visits (Last Hour)","color_rules":[{"value":10,"id":"4e90aeb0-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(211,49,21,1)","operator":"lt"},{"value":10,"id":"6d59b1c0-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(252,196,0,1)","operator":"gte"},{"value":25,"id":"77578670-a6e0-11e8-8b18-1da1dfc50975","text":"rgba(104,188,0,1)","operator":"gte"}],"offset_time":"","value_template":"","trend_arrows":1,"split_color_mode":"gradient"}],"time_field":"timestamp","use_kibana_indexes":true,"interval":"1h","axis_position":"left","axis_formatter":"number","show_legend":1,"show_grid":1,"bar_color_rules":[{"id":"e9b4e490-e1c6-11e7-b4f6-0f68c45f7387"}],"pivot_id":"extension.keyword","pivot_label":"Type","drilldown_url":"","axis_scale":"normal","hide_last_value_indicator":false,"tooltip_mode":"show_all","drop_last_bucket":0,"isModelInvalid":false,"index_pattern_ref_name":"metrics_0_index_pattern"}}', - uiStateJSON: '{}', - description: '', - version: 1, - kibanaSavedObjectMeta: { - searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[]}', - }, - }, - references: [ - { - id: '90943e30-9a47-11e8-b64d-95841ca0c247', - type: 'index-pattern', - name: 'metrics_0_index_pattern', - }, - ], - }, - { - id: '69a34b00-9ee8-11e7-8711-e7a007dcff99', - type: 'visualization', - updated_at: '2021-10-28T14:38:21.435Z', - version: '2', - coreMigrationVersion: '8.0.0', - migrationVersion: { visualization: '8.0.0' }, - attributes: { - title: i18n.translate('home.sampleData.logsTsdbSpec.goalsTitle', { - defaultMessage: '[Logs TSDB] Goals', - }), - visState: - '{"title":"[Logs TSDB] Goals","type":"gauge","params":{"type":"gauge","addTooltip":true,"addLegend":false,"gauge":{"extendRange":true,"percentageMode":false,"gaugeType":"Arc","gaugeStyle":"Full","backStyle":"Full","orientation":"vertical","colorSchema":"Green to Red","gaugeColorMode":"Labels","colorsRange":[{"from":0,"to":500},{"from":500,"to":1000},{"from":1000,"to":1500}],"invertColors":true,"labels":{"show":false,"color":"black"},"scale":{"show":true,"labels":false,"color":"#333"},"type":"meter","style":{"bgWidth":0.9,"width":0.9,"mask":false,"bgMask":false,"maskBars":50,"bgFill":"#eee","bgColor":false,"subText":"visitors","fontSize":60,"labelColor":true},"alignment":"horizontal"},"isDisplayWarning":false},"aggs":[{"id":"1","enabled":true,"type":"cardinality","schema":"metric","params":{"field":"clientip","customLabel":"Unique Visitors"}}]}', - uiStateJSON: - '{"vis":{"defaultColors":{"0 - 500":"rgb(165,0,38)","500 - 1000":"rgb(255,255,190)","1000 - 1500":"rgb(0,104,55)"},"colors":{"75 - 100":"#629E51","50 - 75":"#EAB839","0 - 50":"#E24D42","0 - 100":"#E24D42","200 - 300":"#7EB26D","500 - 1000":"#E5AC0E","0 - 500":"#E24D42","1000 - 1500":"#7EB26D"},"legendOpen":true}}', - description: '', - version: 1, - kibanaSavedObjectMeta: { - searchSourceJSON: - '{"filter":[],"query":{"query":"","language":"kuery"},"indexRefName":"kibanaSavedObjectMeta.searchSourceJSON.index"}', - }, - }, - references: [ - { - id: '90943e30-9a47-11e8-b64d-95841ca0c247', - name: 'kibanaSavedObjectMeta.searchSourceJSON.index', - type: 'index-pattern', - }, - ], - }, - { - id: '7cbd2350-2223-11e8-b802-5bcf64c2dfb4', + id: '7cbd2350-2223-11e8-b802-5bcf64c2cfb4', type: 'visualization', updated_at: '2018-08-29T13:22:17.617Z', version: '1', - migrationVersion: {}, attributes: { title: i18n.translate('home.sampleData.logsTsdbSpec.sourceAndDestinationSankeyChartTitle', { defaultMessage: '[Logs TSDB] Machine OS and Destination Sankey Chart', }), visState: - '{"title":"[Logs TSDB] Machine OS and Destination Sankey Chart","type":"vega","params":{"spec":"{ \\n $schema: https://vega.github.io/schema/vega/v5.json\\n data: [\\n\\t{\\n \\t// query ES based on the currently selected time range and filter string\\n \\tname: rawData\\n \\turl: {\\n \\t%context%: true\\n \\t%timefield%: timestamp\\n \\tindex: kibana_sample_data_logstsdb\\n \\tbody: {\\n \\tsize: 0\\n \\taggs: {\\n \\ttable: {\\n \\tcomposite: {\\n \\tsize: 10000\\n \\tsources: [\\n \\t{\\n \\tstk1: {\\n \\tterms: {field: \\"machine.os.keyword\\"}\\n \\t}\\n \\t}\\n \\t{\\n \\tstk2: {\\n \\tterms: {field: \\"geo.dest\\"}\\n \\t}\\n \\t}\\n \\t]\\n \\t}\\n \\t}\\n \\t}\\n \\t}\\n \\t}\\n \\t// From the result, take just the data we are interested in\\n \\tformat: {property: \\"aggregations.table.buckets\\"}\\n \\t// Convert key.stk1 -> stk1 for simpler access below\\n \\ttransform: [\\n \\t{type: \\"formula\\", expr: \\"datum.key.stk1\\", as: \\"stk1\\"}\\n \\t{type: \\"formula\\", expr: \\"datum.key.stk2\\", as: \\"stk2\\"}\\n \\t{type: \\"formula\\", expr: \\"datum.doc_count\\", as: \\"size\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: nodes\\n \\tsource: rawData\\n \\ttransform: [\\n \\t// when a country is selected, filter out unrelated data\\n \\t{\\n \\ttype: filter\\n \\texpr: !groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\n \\t}\\n \\t// Set new key for later lookups - identifies each node\\n \\t{type: \\"formula\\", expr: \\"datum.stk1+datum.stk2\\", as: \\"key\\"}\\n \\t// instead of each table row, create two new rows,\\n \\t// one for the source (stack=stk1) and one for destination node (stack=stk2).\\n \\t// The country code stored in stk1 and stk2 fields is placed into grpId field.\\n \\t{\\n \\ttype: fold\\n \\tfields: [\\"stk1\\", \\"stk2\\"]\\n \\tas: [\\"stack\\", \\"grpId\\"]\\n \\t}\\n \\t// Create a sortkey, different for stk1 and stk2 stacks.\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.stack == \'stk1\' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\n \\tas: sortField\\n \\t}\\n \\t// Calculate y0 and y1 positions for stacking nodes one on top of the other,\\n \\t// independently for each stack, and ensuring they are in the proper order,\\n \\t// alphabetical from the top (reversed on the y axis)\\n \\t{\\n \\ttype: stack\\n \\tgroupby: [\\"stack\\"]\\n \\tsort: {field: \\"sortField\\", order: \\"descending\\"}\\n \\tfield: size\\n \\t}\\n \\t// calculate vertical center point for each node, used to draw edges\\n \\t{type: \\"formula\\", expr: \\"(datum.y0+datum.y1)/2\\", as: \\"yc\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: groups\\n \\tsource: nodes\\n \\ttransform: [\\n \\t// combine all nodes into country groups, summing up the doc counts\\n \\t{\\n \\ttype: aggregate\\n \\tgroupby: [\\"stack\\", \\"grpId\\"]\\n \\tfields: [\\"size\\"]\\n \\tops: [\\"sum\\"]\\n \\tas: [\\"total\\"]\\n \\t}\\n \\t// re-calculate the stacking y0,y1 values\\n \\t{\\n \\ttype: stack\\n \\tgroupby: [\\"stack\\"]\\n \\tsort: {field: \\"grpId\\", order: \\"descending\\"}\\n \\tfield: total\\n \\t}\\n \\t// project y0 and y1 values to screen coordinates\\n \\t// doing it once here instead of doing it several times in marks\\n \\t{type: \\"formula\\", expr: \\"scale(\'y\', datum.y0)\\", as: \\"scaledY0\\"}\\n \\t{type: \\"formula\\", expr: \\"scale(\'y\', datum.y1)\\", as: \\"scaledY1\\"}\\n \\t// boolean flag if the label should be on the right of the stack\\n \\t{type: \\"formula\\", expr: \\"datum.stack == \'stk1\'\\", as: \\"rightLabel\\"}\\n \\t// Calculate traffic percentage for this country using \\"y\\" scale\\n \\t// domain upper bound, which represents the total traffic\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.total/domain(\'y\')[1]\\n \\tas: percentage\\n \\t}\\n \\t]\\n\\t}\\n\\t{\\n \\t// This is a temp lookup table with all the \'stk2\' stack nodes\\n \\tname: destinationNodes\\n \\tsource: nodes\\n \\ttransform: [\\n \\t{type: \\"filter\\", expr: \\"datum.stack == \'stk2\'\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: edges\\n \\tsource: nodes\\n \\ttransform: [\\n \\t// we only want nodes from the left stack\\n \\t{type: \\"filter\\", expr: \\"datum.stack == \'stk1\'\\"}\\n \\t// find corresponding node from the right stack, keep it as \\"target\\"\\n \\t{\\n \\ttype: lookup\\n \\tfrom: destinationNodes\\n \\tkey: key\\n \\tfields: [\\"key\\"]\\n \\tas: [\\"target\\"]\\n \\t}\\n \\t// calculate SVG link path between stk1 and stk2 stacks for the node pair\\n \\t{\\n \\ttype: linkpath\\n \\torient: horizontal\\n \\tshape: diagonal\\n \\tsourceY: {expr: \\"scale(\'y\', datum.yc)\\"}\\n \\tsourceX: {expr: \\"scale(\'x\', \'stk1\') + bandwidth(\'x\')\\"}\\n \\ttargetY: {expr: \\"scale(\'y\', datum.target.yc)\\"}\\n \\ttargetX: {expr: \\"scale(\'x\', \'stk2\')\\"}\\n \\t}\\n \\t// A little trick to calculate the thickness of the line.\\n \\t// The value needs to be the same as the hight of the node, but scaling\\n \\t// size to screen\'s height gives inversed value because screen\'s Y\\n \\t// coordinate goes from the top to the bottom, whereas the graph\'s Y=0\\n \\t// is at the bottom. So subtracting scaled doc count from screen height\\n \\t// (which is the \\"lower\\" bound of the \\"y\\" scale) gives us the right value\\n \\t{\\n \\ttype: formula\\n \\texpr: range(\'y\')[0]-scale(\'y\', datum.size)\\n \\tas: strokeWidth\\n \\t}\\n \\t// Tooltip needs individual link\'s percentage of all traffic\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.size/domain(\'y\')[1]\\n \\tas: percentage\\n \\t}\\n \\t]\\n\\t}\\n ]\\n scales: [\\n\\t{\\n \\t// calculates horizontal stack positioning\\n \\tname: x\\n \\ttype: band\\n \\trange: width\\n \\tdomain: [\\"stk1\\", \\"stk2\\"]\\n \\tpaddingOuter: 0.05\\n \\tpaddingInner: 0.95\\n\\t}\\n\\t{\\n \\t// this scale goes up as high as the highest y1 value of all nodes\\n \\tname: y\\n \\ttype: linear\\n \\trange: height\\n \\tdomain: {data: \\"nodes\\", field: \\"y1\\"}\\n\\t}\\n\\t{\\n \\t// use rawData to ensure the colors stay the same when clicking.\\n \\tname: color\\n \\ttype: ordinal\\n \\trange: category\\n \\tdomain: {data: \\"rawData\\", field: \\"stk1\\"}\\n\\t}\\n\\t{\\n \\t// this scale is used to map internal ids (stk1, stk2) to stack names\\n \\tname: stackNames\\n \\ttype: ordinal\\n \\trange: [\\"Source\\", \\"Destination\\"]\\n \\tdomain: [\\"stk1\\", \\"stk2\\"]\\n\\t}\\n ]\\n axes: [\\n\\t{\\n \\t// x axis should use custom label formatting to print proper stack names\\n \\torient: bottom\\n \\tscale: x\\n \\tencode: {\\n \\tlabels: {\\n \\tupdate: {\\n \\ttext: {scale: \\"stackNames\\", field: \\"value\\"}\\n \\t}\\n \\t}\\n \\t}\\n\\t}\\n\\t{orient: \\"left\\", scale: \\"y\\"}\\n ]\\n marks: [\\n\\t{\\n \\t// draw the connecting line between stacks\\n \\ttype: path\\n \\tname: edgeMark\\n \\tfrom: {data: \\"edges\\"}\\n \\t// this prevents some autosizing issues with large strokeWidth for paths\\n \\tclip: true\\n \\tencode: {\\n \\tupdate: {\\n \\t// By default use color of the left node, except when showing traffic\\n \\t// from just one country, in which case use destination color.\\n \\tstroke: [\\n \\t{\\n \\ttest: groupSelector && groupSelector.stack==\'stk1\'\\n \\tscale: color\\n \\tfield: stk2\\n \\t}\\n \\t{scale: \\"color\\", field: \\"stk1\\"}\\n \\t]\\n \\tstrokeWidth: {field: \\"strokeWidth\\"}\\n \\tpath: {field: \\"path\\"}\\n \\t// when showing all traffic, and hovering over a country,\\n \\t// highlight the traffic from that country.\\n \\tstrokeOpacity: {\\n \\tsignal: !groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.9 : 0.3\\n \\t}\\n \\t// Ensure that the hover-selected edges show on top\\n \\tzindex: {\\n \\tsignal: !groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\n \\t}\\n \\t// format tooltip string\\n \\ttooltip: {\\n \\tsignal: datum.stk1 + \' → \' + datum.stk2 + \'\\t\' + format(datum.size, \',.0f\') + \' (\' + format(datum.percentage, \'.1%\') + \')\'\\n \\t}\\n \\t}\\n \\t// Simple mouseover highlighting of a single line\\n \\thover: {\\n \\tstrokeOpacity: {value: 1}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// draw stack groups (countries)\\n \\ttype: rect\\n \\tname: groupMark\\n \\tfrom: {data: \\"groups\\"}\\n \\tencode: {\\n \\tenter: {\\n \\tfill: {scale: \\"color\\", field: \\"grpId\\"}\\n \\twidth: {scale: \\"x\\", band: 1}\\n \\t}\\n \\tupdate: {\\n \\tx: {scale: \\"x\\", field: \\"stack\\"}\\n \\ty: {field: \\"scaledY0\\"}\\n \\ty2: {field: \\"scaledY1\\"}\\n \\tfillOpacity: {value: 0.6}\\n \\ttooltip: {\\n \\tsignal: datum.grpId + \' \' + format(datum.total, \',.0f\') + \' (\' + format(datum.percentage, \'.1%\') + \')\'\\n \\t}\\n \\t}\\n \\thover: {\\n \\tfillOpacity: {value: 1}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// draw country code labels on the inner side of the stack\\n \\ttype: text\\n \\tfrom: {data: \\"groups\\"}\\n \\t// don\'t process events for the labels - otherwise line mouseover is unclean\\n \\tinteractive: false\\n \\tencode: {\\n \\tupdate: {\\n \\t// depending on which stack it is, position x with some padding\\n \\tx: {\\n \\tsignal: scale(\'x\', datum.stack) + (datum.rightLabel ? bandwidth(\'x\') + 8 : -8)\\n \\t}\\n \\t// middle of the group\\n \\tyc: {signal: \\"(datum.scaledY0 + datum.scaledY1)/2\\"}\\n \\talign: {signal: \\"datum.rightLabel ? \'left\' : \'right\'\\"}\\n \\tbaseline: {value: \\"middle\\"}\\n \\tfontWeight: {value: \\"bold\\"}\\n \\t// only show text label if the group\'s height is large enough\\n \\ttext: {signal: \\"abs(datum.scaledY0-datum.scaledY1) > 13 ? datum.grpId : \'\'\\"}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// Create a \\"show all\\" button. Shown only when a country is selected.\\n \\ttype: group\\n \\tdata: [\\n \\t// We need to make the button show only when groupSelector signal is true.\\n \\t// Each mark is drawn as many times as there are elements in the backing data.\\n \\t// Which means that if values list is empty, it will not be drawn.\\n \\t// Here I create a data source with one empty object, and filter that list\\n \\t// based on the signal value. This can only be done in a group.\\n \\t{\\n \\tname: dataForShowAll\\n \\tvalues: [{}]\\n \\ttransform: [{type: \\"filter\\", expr: \\"groupSelector\\"}]\\n \\t}\\n \\t]\\n \\t// Set button size and positioning\\n \\tencode: {\\n \\tenter: {\\n \\txc: {signal: \\"width/2\\"}\\n \\ty: {value: 30}\\n \\twidth: {value: 80}\\n \\theight: {value: 30}\\n \\t}\\n \\t}\\n \\tmarks: [\\n \\t{\\n \\t// This group is shown as a button with rounded corners.\\n \\ttype: group\\n \\t// mark name allows signal capturing\\n \\tname: groupReset\\n \\t// Only shows button if dataForShowAll has values.\\n \\tfrom: {data: \\"dataForShowAll\\"}\\n \\tencode: {\\n \\tenter: {\\n \\tcornerRadius: {value: 6}\\n \\tfill: {value: \\"#F5F7FA\\"}\\n \\tstroke: {value: \\"#c1c1c1\\"}\\n \\tstrokeWidth: {value: 2}\\n \\t// use parent group\'s size\\n \\theight: {\\n \\tfield: {group: \\"height\\"}\\n \\t}\\n \\twidth: {\\n \\tfield: {group: \\"width\\"}\\n \\t}\\n \\t}\\n \\tupdate: {\\n \\t// groups are transparent by default\\n \\topacity: {value: 1}\\n \\t}\\n \\thover: {\\n \\topacity: {value: 0.7}\\n \\t}\\n \\t}\\n \\tmarks: [\\n \\t{\\n \\ttype: text\\n \\t// if true, it will prevent clicking on the button when over text.\\n \\tinteractive: false\\n \\tencode: {\\n \\tenter: {\\n \\t// center text in the paren group\\n \\txc: {\\n \\tfield: {group: \\"width\\"}\\n \\tmult: 0.5\\n \\t}\\n \\tyc: {\\n \\tfield: {group: \\"height\\"}\\n \\tmult: 0.5\\n \\toffset: 2\\n \\t}\\n \\talign: {value: \\"center\\"}\\n \\tbaseline: {value: \\"middle\\"}\\n \\tfontWeight: {value: \\"bold\\"}\\n \\ttext: {value: \\"Show All\\"}\\n \\t}\\n \\t}\\n \\t}\\n \\t]\\n \\t}\\n \\t]\\n\\t}\\n ]\\n signals: [\\n\\t{\\n \\t// used to highlight traffic to/from the same country\\n \\tname: groupHover\\n \\tvalue: {}\\n \\ton: [\\n \\t{\\n \\tevents: @groupMark:mouseover\\n \\tupdate: \\"{stk1:datum.stack==\'stk1\' && datum.grpId, stk2:datum.stack==\'stk2\' && datum.grpId}\\"\\n \\t}\\n \\t{events: \\"mouseout\\", update: \\"{}\\"}\\n \\t]\\n\\t}\\n\\t// used to filter only the data related to the selected country\\n\\t{\\n \\tname: groupSelector\\n \\tvalue: false\\n \\ton: [\\n \\t{\\n \\t// Clicking groupMark sets this signal to the filter values\\n \\tevents: @groupMark:click!\\n \\tupdate: \\"{stack:datum.stack, stk1:datum.stack==\'stk1\' && datum.grpId, stk2:datum.stack==\'stk2\' && datum.grpId}\\"\\n \\t}\\n \\t{\\n \\t// Clicking \\"show all\\" button, or double-clicking anywhere resets it\\n \\tevents: [\\n \\t{type: \\"click\\", markname: \\"groupReset\\"}\\n \\t{type: \\"dblclick\\"}\\n \\t]\\n \\tupdate: \\"false\\"\\n \\t}\\n \\t]\\n\\t}\\n ]\\n}\\n"},"aggs":[]}', + '{"title":"[Logs] Machine OS and Destination Sankey Chart","type":"vega","params":{"spec":"{ \\n $schema: https://vega.github.io/schema/vega/v5.json\\n data: [\\n\\t{\\n \\t// query ES based on the currently selected time range and filter string\\n \\tname: rawData\\n \\turl: {\\n \\t%context%: true\\n \\t%timefield%: timestamp\\n \\tindex: kibana_sample_data_logs\\n \\tbody: {\\n \\tsize: 0\\n \\taggs: {\\n \\ttable: {\\n \\tcomposite: {\\n \\tsize: 10000\\n \\tsources: [\\n \\t{\\n \\tstk1: {\\n \\tterms: {field: \\"machine.os.keyword\\"}\\n \\t}\\n \\t}\\n \\t{\\n \\tstk2: {\\n \\tterms: {field: \\"geo.dest\\"}\\n \\t}\\n \\t}\\n \\t]\\n \\t}\\n \\t}\\n \\t}\\n \\t}\\n \\t}\\n \\t// From the result, take just the data we are interested in\\n \\tformat: {property: \\"aggregations.table.buckets\\"}\\n \\t// Convert key.stk1 -> stk1 for simpler access below\\n \\ttransform: [\\n \\t{type: \\"formula\\", expr: \\"datum.key.stk1\\", as: \\"stk1\\"}\\n \\t{type: \\"formula\\", expr: \\"datum.key.stk2\\", as: \\"stk2\\"}\\n \\t{type: \\"formula\\", expr: \\"datum.doc_count\\", as: \\"size\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: nodes\\n \\tsource: rawData\\n \\ttransform: [\\n \\t// when a country is selected, filter out unrelated data\\n \\t{\\n \\ttype: filter\\n \\texpr: !groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\n \\t}\\n \\t// Set new key for later lookups - identifies each node\\n \\t{type: \\"formula\\", expr: \\"datum.stk1+datum.stk2\\", as: \\"key\\"}\\n \\t// instead of each table row, create two new rows,\\n \\t// one for the source (stack=stk1) and one for destination node (stack=stk2).\\n \\t// The country code stored in stk1 and stk2 fields is placed into grpId field.\\n \\t{\\n \\ttype: fold\\n \\tfields: [\\"stk1\\", \\"stk2\\"]\\n \\tas: [\\"stack\\", \\"grpId\\"]\\n \\t}\\n \\t// Create a sortkey, different for stk1 and stk2 stacks.\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.stack == \'stk1\' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\n \\tas: sortField\\n \\t}\\n \\t// Calculate y0 and y1 positions for stacking nodes one on top of the other,\\n \\t// independently for each stack, and ensuring they are in the proper order,\\n \\t// alphabetical from the top (reversed on the y axis)\\n \\t{\\n \\ttype: stack\\n \\tgroupby: [\\"stack\\"]\\n \\tsort: {field: \\"sortField\\", order: \\"descending\\"}\\n \\tfield: size\\n \\t}\\n \\t// calculate vertical center point for each node, used to draw edges\\n \\t{type: \\"formula\\", expr: \\"(datum.y0+datum.y1)/2\\", as: \\"yc\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: groups\\n \\tsource: nodes\\n \\ttransform: [\\n \\t// combine all nodes into country groups, summing up the doc counts\\n \\t{\\n \\ttype: aggregate\\n \\tgroupby: [\\"stack\\", \\"grpId\\"]\\n \\tfields: [\\"size\\"]\\n \\tops: [\\"sum\\"]\\n \\tas: [\\"total\\"]\\n \\t}\\n \\t// re-calculate the stacking y0,y1 values\\n \\t{\\n \\ttype: stack\\n \\tgroupby: [\\"stack\\"]\\n \\tsort: {field: \\"grpId\\", order: \\"descending\\"}\\n \\tfield: total\\n \\t}\\n \\t// project y0 and y1 values to screen coordinates\\n \\t// doing it once here instead of doing it several times in marks\\n \\t{type: \\"formula\\", expr: \\"scale(\'y\', datum.y0)\\", as: \\"scaledY0\\"}\\n \\t{type: \\"formula\\", expr: \\"scale(\'y\', datum.y1)\\", as: \\"scaledY1\\"}\\n \\t// boolean flag if the label should be on the right of the stack\\n \\t{type: \\"formula\\", expr: \\"datum.stack == \'stk1\'\\", as: \\"rightLabel\\"}\\n \\t// Calculate traffic percentage for this country using \\"y\\" scale\\n \\t// domain upper bound, which represents the total traffic\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.total/domain(\'y\')[1]\\n \\tas: percentage\\n \\t}\\n \\t]\\n\\t}\\n\\t{\\n \\t// This is a temp lookup table with all the \'stk2\' stack nodes\\n \\tname: destinationNodes\\n \\tsource: nodes\\n \\ttransform: [\\n \\t{type: \\"filter\\", expr: \\"datum.stack == \'stk2\'\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: edges\\n \\tsource: nodes\\n \\ttransform: [\\n \\t// we only want nodes from the left stack\\n \\t{type: \\"filter\\", expr: \\"datum.stack == \'stk1\'\\"}\\n \\t// find corresponding node from the right stack, keep it as \\"target\\"\\n \\t{\\n \\ttype: lookup\\n \\tfrom: destinationNodes\\n \\tkey: key\\n \\tfields: [\\"key\\"]\\n \\tas: [\\"target\\"]\\n \\t}\\n \\t// calculate SVG link path between stk1 and stk2 stacks for the node pair\\n \\t{\\n \\ttype: linkpath\\n \\torient: horizontal\\n \\tshape: diagonal\\n \\tsourceY: {expr: \\"scale(\'y\', datum.yc)\\"}\\n \\tsourceX: {expr: \\"scale(\'x\', \'stk1\') + bandwidth(\'x\')\\"}\\n \\ttargetY: {expr: \\"scale(\'y\', datum.target.yc)\\"}\\n \\ttargetX: {expr: \\"scale(\'x\', \'stk2\')\\"}\\n \\t}\\n \\t// A little trick to calculate the thickness of the line.\\n \\t// The value needs to be the same as the hight of the node, but scaling\\n \\t// size to screen\'s height gives inversed value because screen\'s Y\\n \\t// coordinate goes from the top to the bottom, whereas the graph\'s Y=0\\n \\t// is at the bottom. So subtracting scaled doc count from screen height\\n \\t// (which is the \\"lower\\" bound of the \\"y\\" scale) gives us the right value\\n \\t{\\n \\ttype: formula\\n \\texpr: range(\'y\')[0]-scale(\'y\', datum.size)\\n \\tas: strokeWidth\\n \\t}\\n \\t// Tooltip needs individual link\'s percentage of all traffic\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.size/domain(\'y\')[1]\\n \\tas: percentage\\n \\t}\\n \\t]\\n\\t}\\n ]\\n scales: [\\n\\t{\\n \\t// calculates horizontal stack positioning\\n \\tname: x\\n \\ttype: band\\n \\trange: width\\n \\tdomain: [\\"stk1\\", \\"stk2\\"]\\n \\tpaddingOuter: 0.05\\n \\tpaddingInner: 0.95\\n\\t}\\n\\t{\\n \\t// this scale goes up as high as the highest y1 value of all nodes\\n \\tname: y\\n \\ttype: linear\\n \\trange: height\\n \\tdomain: {data: \\"nodes\\", field: \\"y1\\"}\\n\\t}\\n\\t{\\n \\t// use rawData to ensure the colors stay the same when clicking.\\n \\tname: color\\n \\ttype: ordinal\\n \\trange: category\\n \\tdomain: {data: \\"rawData\\", field: \\"stk1\\"}\\n\\t}\\n\\t{\\n \\t// this scale is used to map internal ids (stk1, stk2) to stack names\\n \\tname: stackNames\\n \\ttype: ordinal\\n \\trange: [\\"Source\\", \\"Destination\\"]\\n \\tdomain: [\\"stk1\\", \\"stk2\\"]\\n\\t}\\n ]\\n axes: [\\n\\t{\\n \\t// x axis should use custom label formatting to print proper stack names\\n \\torient: bottom\\n \\tscale: x\\n \\tencode: {\\n \\tlabels: {\\n \\tupdate: {\\n \\ttext: {scale: \\"stackNames\\", field: \\"value\\"}\\n \\t}\\n \\t}\\n \\t}\\n\\t}\\n\\t{orient: \\"left\\", scale: \\"y\\"}\\n ]\\n marks: [\\n\\t{\\n \\t// draw the connecting line between stacks\\n \\ttype: path\\n \\tname: edgeMark\\n \\tfrom: {data: \\"edges\\"}\\n \\t// this prevents some autosizing issues with large strokeWidth for paths\\n \\tclip: true\\n \\tencode: {\\n \\tupdate: {\\n \\t// By default use color of the left node, except when showing traffic\\n \\t// from just one country, in which case use destination color.\\n \\tstroke: [\\n \\t{\\n \\ttest: groupSelector && groupSelector.stack==\'stk1\'\\n \\tscale: color\\n \\tfield: stk2\\n \\t}\\n \\t{scale: \\"color\\", field: \\"stk1\\"}\\n \\t]\\n \\tstrokeWidth: {field: \\"strokeWidth\\"}\\n \\tpath: {field: \\"path\\"}\\n \\t// when showing all traffic, and hovering over a country,\\n \\t// highlight the traffic from that country.\\n \\tstrokeOpacity: {\\n \\tsignal: !groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.9 : 0.3\\n \\t}\\n \\t// Ensure that the hover-selected edges show on top\\n \\tzindex: {\\n \\tsignal: !groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\n \\t}\\n \\t// format tooltip string\\n \\ttooltip: {\\n \\tsignal: datum.stk1 + \' → \' + datum.stk2 + \'\\t\' + format(datum.size, \',.0f\') + \' (\' + format(datum.percentage, \'.1%\') + \')\'\\n \\t}\\n \\t}\\n \\t// Simple mouseover highlighting of a single line\\n \\thover: {\\n \\tstrokeOpacity: {value: 1}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// draw stack groups (countries)\\n \\ttype: rect\\n \\tname: groupMark\\n \\tfrom: {data: \\"groups\\"}\\n \\tencode: {\\n \\tenter: {\\n \\tfill: {scale: \\"color\\", field: \\"grpId\\"}\\n \\twidth: {scale: \\"x\\", band: 1}\\n \\t}\\n \\tupdate: {\\n \\tx: {scale: \\"x\\", field: \\"stack\\"}\\n \\ty: {field: \\"scaledY0\\"}\\n \\ty2: {field: \\"scaledY1\\"}\\n \\tfillOpacity: {value: 0.6}\\n \\ttooltip: {\\n \\tsignal: datum.grpId + \' \' + format(datum.total, \',.0f\') + \' (\' + format(datum.percentage, \'.1%\') + \')\'\\n \\t}\\n \\t}\\n \\thover: {\\n \\tfillOpacity: {value: 1}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// draw country code labels on the inner side of the stack\\n \\ttype: text\\n \\tfrom: {data: \\"groups\\"}\\n \\t// don\'t process events for the labels - otherwise line mouseover is unclean\\n \\tinteractive: false\\n \\tencode: {\\n \\tupdate: {\\n \\t// depending on which stack it is, position x with some padding\\n \\tx: {\\n \\tsignal: scale(\'x\', datum.stack) + (datum.rightLabel ? bandwidth(\'x\') + 8 : -8)\\n \\t}\\n \\t// middle of the group\\n \\tyc: {signal: \\"(datum.scaledY0 + datum.scaledY1)/2\\"}\\n \\talign: {signal: \\"datum.rightLabel ? \'left\' : \'right\'\\"}\\n \\tbaseline: {value: \\"middle\\"}\\n \\tfontWeight: {value: \\"bold\\"}\\n \\t// only show text label if the group\'s height is large enough\\n \\ttext: {signal: \\"abs(datum.scaledY0-datum.scaledY1) > 13 ? datum.grpId : \'\'\\"}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// Create a \\"show all\\" button. Shown only when a country is selected.\\n \\ttype: group\\n \\tdata: [\\n \\t// We need to make the button show only when groupSelector signal is true.\\n \\t// Each mark is drawn as many times as there are elements in the backing data.\\n \\t// Which means that if values list is empty, it will not be drawn.\\n \\t// Here I create a data source with one empty object, and filter that list\\n \\t// based on the signal value. This can only be done in a group.\\n \\t{\\n \\tname: dataForShowAll\\n \\tvalues: [{}]\\n \\ttransform: [{type: \\"filter\\", expr: \\"groupSelector\\"}]\\n \\t}\\n \\t]\\n \\t// Set button size and positioning\\n \\tencode: {\\n \\tenter: {\\n \\txc: {signal: \\"width/2\\"}\\n \\ty: {value: 30}\\n \\twidth: {value: 80}\\n \\theight: {value: 30}\\n \\t}\\n \\t}\\n \\tmarks: [\\n \\t{\\n \\t// This group is shown as a button with rounded corners.\\n \\ttype: group\\n \\t// mark name allows signal capturing\\n \\tname: groupReset\\n \\t// Only shows button if dataForShowAll has values.\\n \\tfrom: {data: \\"dataForShowAll\\"}\\n \\tencode: {\\n \\tenter: {\\n \\tcornerRadius: {value: 6}\\n \\tfill: {value: \\"#F5F7FA\\"}\\n \\tstroke: {value: \\"#c1c1c1\\"}\\n \\tstrokeWidth: {value: 2}\\n \\t// use parent group\'s size\\n \\theight: {\\n \\tfield: {group: \\"height\\"}\\n \\t}\\n \\twidth: {\\n \\tfield: {group: \\"width\\"}\\n \\t}\\n \\t}\\n \\tupdate: {\\n \\t// groups are transparent by default\\n \\topacity: {value: 1}\\n \\t}\\n \\thover: {\\n \\topacity: {value: 0.7}\\n \\t}\\n \\t}\\n \\tmarks: [\\n \\t{\\n \\ttype: text\\n \\t// if true, it will prevent clicking on the button when over text.\\n \\tinteractive: false\\n \\tencode: {\\n \\tenter: {\\n \\t// center text in the paren group\\n \\txc: {\\n \\tfield: {group: \\"width\\"}\\n \\tmult: 0.5\\n \\t}\\n \\tyc: {\\n \\tfield: {group: \\"height\\"}\\n \\tmult: 0.5\\n \\toffset: 2\\n \\t}\\n \\talign: {value: \\"center\\"}\\n \\tbaseline: {value: \\"middle\\"}\\n \\tfontWeight: {value: \\"bold\\"}\\n \\ttext: {value: \\"Show All\\"}\\n \\t}\\n \\t}\\n \\t}\\n \\t]\\n \\t}\\n \\t]\\n\\t}\\n ]\\n signals: [\\n\\t{\\n \\t// used to highlight traffic to/from the same country\\n \\tname: groupHover\\n \\tvalue: {}\\n \\ton: [\\n \\t{\\n \\tevents: @groupMark:mouseover\\n \\tupdate: \\"{stk1:datum.stack==\'stk1\' && datum.grpId, stk2:datum.stack==\'stk2\' && datum.grpId}\\"\\n \\t}\\n \\t{events: \\"mouseout\\", update: \\"{}\\"}\\n \\t]\\n\\t}\\n\\t// used to filter only the data related to the selected country\\n\\t{\\n \\tname: groupSelector\\n \\tvalue: false\\n \\ton: [\\n \\t{\\n \\t// Clicking groupMark sets this signal to the filter values\\n \\tevents: @groupMark:click!\\n \\tupdate: \\"{stack:datum.stack, stk1:datum.stack==\'stk1\' && datum.grpId, stk2:datum.stack==\'stk2\' && datum.grpId}\\"\\n \\t}\\n \\t{\\n \\t// Clicking \\"show all\\" button, or double-clicking anywhere resets it\\n \\tevents: [\\n \\t{type: \\"click\\", markname: \\"groupReset\\"}\\n \\t{type: \\"dblclick\\"}\\n \\t]\\n \\tupdate: \\"false\\"\\n \\t}\\n \\t]\\n\\t}\\n ]\\n}\\n"},"aggs":[]}', uiStateJSON: '{}', description: '', version: 1, @@ -144,47 +85,13 @@ export const getSavedObjects = (): SavedObject[] => [ references: [], }, { - id: '314c6f60-2224-11e8-b802-5bcf64c2dfb4', - type: 'visualization', - updated_at: '2021-07-21T18:52:13.586Z', - version: '2', - migrationVersion: { - visualization: '7.14.0', - }, - attributes: { - title: i18n.translate('home.sampleData.logsTsdbSpec.responseCodesOverTimeTitle', { - defaultMessage: '[Logs TSDB] Response Codes Over Time + Annotations', - }), - visState: - '{"title":"[Logs TSDB] Response Codes Over Time + Annotations","type":"metrics","aggs":[],"params":{"time_range_mode":"entire_time_range","id":"61ca57f0-469d-11e7-af02-69e470af7417","type":"timeseries","series":[{"id":"61ca57f1-469d-11e7-af02-69e470af7417","color":"rgba(115,216,255,1)","split_mode":"filters","metrics":[{"id":"61ca57f2-469d-11e7-af02-69e470af7417","type":"count","field":"ip"}],"seperate_axis":0,"axis_position":"right","formatter":"percent","chart_type":"line","line_width":"2","point_size":"0","fill":"0.5","stacked":"percent","terms_field":"response.keyword","terms_order_by":"61ca57f2-469d-11e7-af02-69e470af7417","label":"Response Code Count","split_color_mode":"gradient","split_filters":[{"filter":{"query":"response.keyword >= 200 and response.keyword < 400","language":"kuery"},"label":"HTTP 2xx and 3xx","color":"rgba(84,179,153,1)","id":"96b6ffe0-ea54-11eb-ad09-9f2ab44412fb"},{"filter":{"query":"response.keyword >= 400 and response.keyword < 500","language":"kuery"},"label":"HTTP 4xx","color":"rgba(214,191,87,1)","id":"9e41b1b0-ea54-11eb-ad09-9f2ab44412fb"},{"filter":{"query":"response.keyword >= 500","language":"kuery"},"label":"HTTP 5xx","color":"rgba(211,96,134,1)","id":"a6772270-ea54-11eb-ad09-9f2ab44412fb"}],"type":"timeseries"}],"time_field":"timestamp","use_kibana_indexes":true,"interval":">=4h","axis_position":"left","axis_formatter":"number","show_legend":1,"show_grid":1,"annotations":[{"fields":"geo.src, host","template":"Security Error from {{geo.src}} on {{host}}","query_string":{"query":"tags:error AND tags:security","language":"lucene"},"id":"bd7548a0-2223-11e8-832f-d5027f3c8a47","color":"rgba(211,49,21,1)","time_field":"timestamp","icon":"fa-asterisk","ignore_global_filters":1,"ignore_panel_filters":1,"index_pattern_ref_name":"metrics_1_index_pattern"}],"legend_position":"bottom","axis_scale":"normal","drop_last_bucket":0,"tooltip_mode":"show_all","index_pattern_ref_name":"metrics_0_index_pattern"}}', - uiStateJSON: '{}', - description: '', - version: 1, - kibanaSavedObjectMeta: { - searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[]}', - }, - }, - references: [ - { - id: '90943e30-9a47-11e8-b64d-95841ca0c247', - name: 'metrics_0_index_pattern', - type: 'index-pattern', - }, - { - id: '90943e30-9a47-11e8-b64d-95841ca0c247', - name: 'metrics_1_index_pattern', - type: 'index-pattern', - }, - ], - }, - { - id: '16b1d7d0-ea71-11eb-8b4b-f7b600de1f7d', + id: '16b1d7d0-ea71-11eb-8b4b-f7b600de0f7d', type: 'lens', updated_at: '2021-07-21T22:14:59.793Z', version: '1', - migrationVersion: { - lens: '7.14.0', - }, + coreMigrationVersion: '8.8.0', + typeMigrationVersion: '7.14.0', + managed: false, attributes: { title: i18n.translate('home.sampleData.logsTsdbSpec.bytesDistributionTitle', { defaultMessage: '[Logs TSDB] Bytes distribution', @@ -367,7 +274,6 @@ export const getSavedObjects = (): SavedObject[] => [ type: 'index-pattern', updated_at: '2018-08-29T13:22:17.617Z', version: '1', - migrationVersion: {}, attributes: { title: 'kibana_sample_data_logstsdb', name: 'Kibana Sample Data Logs (TSDB)', @@ -382,27 +288,10 @@ export const getSavedObjects = (): SavedObject[] => [ id: 'edf84fe0-e1a0-11e7-b6d5-4dc382ef8f5b', type: 'dashboard', namespaces: ['default'], - updated_at: '2022-09-26T16:24:51.698Z', - version: 'WzE1NTIsMV0=', + updated_at: '2023-03-23T16:25:27.102Z', + created_at: '2023-03-23T16:25:27.102Z', + version: 'WzEzMjAsMV0=', attributes: { - title: i18n.translate('home.sampleData.logsTsdbSpec.webTrafficTitle', { - defaultMessage: '[Logs TSDB] Web Traffic', - }), - hits: 0, - description: i18n.translate('home.sampleData.logsTsdbSpec.webTrafficDescription', { - defaultMessage: "Analyze mock web traffic log data for Elastic's website", - }), - panelsJSON: - '[{"version":"8.6.0","type":"visualization","gridData":{"x":0,"y":14,"w":24,"h":18,"i":"4"},"panelIndex":"4","embeddableConfig":{"isLayerTOCOpen":false,"enhancements":{},"mapCenter":{"lat":42.16337,"lon":-88.92107,"zoom":3.64},"mapBuffer":{"minLon":-112.5,"minLat":21.94305,"maxLon":-45,"maxLat":55.77657},"openTOCDetails":[],"hiddenLayers":[]},"panelRefName":"panel_4"},{"version":"8.6.0","type":"visualization","gridData":{"x":0,"y":47,"w":24,"h":13,"i":"9"},"panelIndex":"9","embeddableConfig":{"mapCenter":[36.8092847020594,-96.94335937500001],"vis":{"params":{"sort":{"columnIndex":null,"direction":null}}},"enhancements":{}},"panelRefName":"panel_9"},{"version":"8.6.0","type":"visualization","gridData":{"x":36,"y":0,"w":12,"h":7,"i":"11"},"panelIndex":"11","embeddableConfig":{"vis":{"colors":{"0 - 500":"#BF1B00","1000 - 1500":"#7EB26D","500 - 1000":"#F2C96D"},"defaultColors":{"0 - 500":"rgb(165,0,38)","1000 - 1500":"rgb(0,104,55)","500 - 1000":"rgb(255,255,190)"},"legendOpen":false},"enhancements":{},"hidePanelTitles":true},"title":"","panelRefName":"panel_11"},{"version":"8.6.0","type":"visualization","gridData":{"x":24,"y":14,"w":24,"h":33,"i":"14"},"panelIndex":"14","embeddableConfig":{"enhancements":{}},"panelRefName":"panel_14"},{"version":"8.6.0","type":"visualization","gridData":{"x":0,"y":7,"w":24,"h":7,"i":"15"},"panelIndex":"15","embeddableConfig":{"enhancements":{"dynamicActions":{"events":[]}}},"panelRefName":"panel_15"},{"version":"8.6.0","type":"visualization","gridData":{"x":0,"y":0,"w":24,"h":7,"i":"343f0bef-0b19-452e-b1c8-59beb18b6f0c"},"panelIndex":"343f0bef-0b19-452e-b1c8-59beb18b6f0c","embeddableConfig":{"savedVis":{"title":"[Logs] Markdown Instructions","description":"","type":"markdown","params":{"fontSize":12,"openLinksInNewTab":true,"markdown":"## Sample Logs Data\\nThis dashboard contains sample data for you to play with. You can view it, search it, and interact with the visualizations. For more information about Kibana, check our [docs](https://www.elastic.co/guide/en/kibana/current/index.html)."},"uiState":{},"data":{"aggs":[],"searchSource":{"query":{"query":"","language":"kuery"},"filter":[]}}},"enhancements":{},"hidePanelTitles":true}},{"version":"8.6.0","type":"lens","gridData":{"x":24,"y":0,"w":12,"h":7,"i":"bb94016e-f4a6-49ca-87a9-296a2869d570"},"panelIndex":"bb94016e-f4a6-49ca-87a9-296a2869d570","embeddableConfig":{"attributes":{"title":"","type":"lens","visualizationType":"lnsLegacyMetric","state":{"datasourceStates":{"indexpattern":{"layers":{"483defd2-775b-4a62-bdef-496c819bb8ed":{"columns":{"37430d12-7452-4cc9-b035-5cfd4061edf0":{"label":"Visits","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true}},"columnOrder":["37430d12-7452-4cc9-b035-5cfd4061edf0"],"incompleteColumns":{}}}}},"visualization":{"layerId":"483defd2-775b-4a62-bdef-496c819bb8ed","accessor":"37430d12-7452-4cc9-b035-5cfd4061edf0","layerType":"data","textAlign":"center","titlePosition":"bottom","size":"xl"},"query":{"query":"","language":"kuery"},"filters":[]},"references":[{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"indexpattern-datasource-current-indexpattern","type":"index-pattern"},{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"indexpattern-datasource-layer-483defd2-775b-4a62-bdef-496c819bb8ed","type":"index-pattern"}]},"enhancements":{}}},{"version":"8.6.0","type":"lens","gridData":{"x":24,"y":7,"w":12,"h":7,"i":"01d8e435-91c0-484f-a11e-856747050b0a"},"panelIndex":"01d8e435-91c0-484f-a11e-856747050b0a","embeddableConfig":{"attributes":{"title":"","type":"lens","visualizationType":"lnsLegacyMetric","state":{"datasourceStates":{"indexpattern":{"layers":{"f3793bb7-3971-4753-866d-4008e77a9f9a":{"columns":{"71c076a6-e782-4866-b8df-5fd85a41f08bX0":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","filter":{"query":"response.keyword >= 400 and response.keyword < 500","language":"kuery"},"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08bX1":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08bX2":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"math","isBucketed":false,"scale":"ratio","params":{"tinymathAst":{"type":"function","name":"divide","args":["71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1"],"location":{"min":0,"max":73},"text":"count(kql=\'response.keyword >= 400 and response.keyword < 500\') / count()"}},"references":["71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1"],"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08b":{"label":"HTTP 4xx","dataType":"number","operationType":"formula","isBucketed":false,"scale":"ratio","params":{"formula":"count(kql=\'response.keyword >= 400 and response.keyword < 500\') / count()","isFormulaBroken":false,"format":{"id":"percent","params":{"decimals":1}}},"references":["71c076a6-e782-4866-b8df-5fd85a41f08bX2"],"customLabel":true}},"columnOrder":["71c076a6-e782-4866-b8df-5fd85a41f08b","71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1","71c076a6-e782-4866-b8df-5fd85a41f08bX2"],"incompleteColumns":{}}}}},"visualization":{"layerId":"f3793bb7-3971-4753-866d-4008e77a9f9a","accessor":"71c076a6-e782-4866-b8df-5fd85a41f08b","layerType":"data","textAlign":"center","titlePosition":"bottom","size":"xl"},"query":{"query":"","language":"kuery"},"filters":[]},"references":[{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"indexpattern-datasource-current-indexpattern","type":"index-pattern"},{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a","type":"index-pattern"}]},"enhancements":{}}},{"version":"8.6.0","type":"lens","gridData":{"x":36,"y":7,"w":12,"h":7,"i":"8c1456d4-1993-4ba2-b701-04aca02c9fef"},"panelIndex":"8c1456d4-1993-4ba2-b701-04aca02c9fef","embeddableConfig":{"attributes":{"title":"","type":"lens","visualizationType":"lnsLegacyMetric","state":{"datasourceStates":{"indexpattern":{"layers":{"f3793bb7-3971-4753-866d-4008e77a9f9a":{"columns":{"71c076a6-e782-4866-b8df-5fd85a41f08bX0":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","filter":{"query":"response.keyword >= 500","language":"kuery"},"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08bX1":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08bX2":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"math","isBucketed":false,"scale":"ratio","params":{"tinymathAst":{"type":"function","name":"divide","args":["71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1"],"location":{"min":0,"max":46},"text":"count(kql=\'response.keyword >= 500\') / count()"}},"references":["71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1"],"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08b":{"label":"HTTP 5xx","dataType":"number","operationType":"formula","isBucketed":false,"scale":"ratio","params":{"formula":"count(kql=\'response.keyword >= 500\') / count()","isFormulaBroken":false,"format":{"id":"percent","params":{"decimals":1}}},"references":["71c076a6-e782-4866-b8df-5fd85a41f08bX2"],"customLabel":true}},"columnOrder":["71c076a6-e782-4866-b8df-5fd85a41f08b","71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1","71c076a6-e782-4866-b8df-5fd85a41f08bX2"],"incompleteColumns":{}}}}},"visualization":{"layerId":"f3793bb7-3971-4753-866d-4008e77a9f9a","accessor":"71c076a6-e782-4866-b8df-5fd85a41f08b","layerType":"data","textAlign":"center","titlePosition":"bottom","size":"xl"},"query":{"query":"","language":"kuery"},"filters":[]},"references":[{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"indexpattern-datasource-current-indexpattern","type":"index-pattern"},{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a","type":"index-pattern"}]},"enhancements":{}}},{"version":"8.6.0","type":"visualization","gridData":{"x":0,"y":32,"w":24,"h":15,"i":"8e59c7cf-6e42-4343-a113-c4a255fcf2ce"},"panelIndex":"8e59c7cf-6e42-4343-a113-c4a255fcf2ce","embeddableConfig":{"savedVis":{"title":"","description":"","type":"vega","params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega-lite/v5.json\\n data: {\\n url: {\\n %context%: true\\n %timefield%: @timestamp\\n index: kibana_sample_data_logstsdb\\n body: {\\n aggs: {\\n countries: {\\n terms: {\\n field: geo.src\\n size: 25\\n }\\n aggs: {\\n hours: {\\n histogram: {\\n field: hour_of_day\\n interval: 1\\n }\\n aggs: {\\n unique: {\\n cardinality: {\\n field: clientip\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n size: 0\\n }\\n }\\n format: {property: \\"aggregations.countries.buckets\\"}\\n }\\n \\n transform: [\\n {\\n flatten: [\\"hours.buckets\\"],\\n as: [\\"buckets\\"]\\n }\\n ]\\n\\n mark: {\\n type: rect\\n tooltip: true\\n }\\n\\n encoding: {\\n x: {\\n field: buckets.key\\n type: ordinal\\n axis: {\\n title: false\\n labelAngle: 0\\n }\\n }\\n y: {\\n field: key\\n type: nominal\\n sort: {\\n field: -buckets.unique.value\\n }\\n axis: {title: false}\\n }\\n color: {\\n field: buckets.unique.value\\n type: quantitative\\n axis: {title: false}\\n scale: {\\n scheme: reds\\n }\\n }\\n }\\n}\\n"},"uiState":{},"data":{"aggs":[],"searchSource":{"query":{"query":"","language":"kuery"},"filter":[]}}},"enhancements":{}},"panelRefName":"panel_8e59c7cf-6e42-4343-a113-c4a255fcf2ce"},{"version":"8.6.0","type":"lens","gridData":{"x":24,"y":47,"w":24,"h":13,"i":"cbca842c-b9fa-4523-9ce0-14e350866e33"},"panelIndex":"cbca842c-b9fa-4523-9ce0-14e350866e33","embeddableConfig":{"hidePanelTitles":false,"enhancements":{}},"title":"[Logs] Bytes distribution","panelRefName":"panel_cbca842c-b9fa-4523-9ce0-14e350866e33"},{"version":"8.6.0","type":"lens","gridData":{"x":0,"y":60,"w":48,"h":19,"i":"1d5f0b3f-d9d2-4b26-997b-83bc5ca3090b"},"panelIndex":"1d5f0b3f-d9d2-4b26-997b-83bc5ca3090b","embeddableConfig":{"attributes":{"title":"","type":"lens","visualizationType":"lnsDatatable","state":{"datasourceStates":{"indexpattern":{"layers":{"c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0":{"columns":{"42783ad7-dbcf-4310-bc06-f21f4eaaac96":{"label":"URL","dataType":"string","operationType":"terms","scale":"ordinal","sourceField":"url.keyword","isBucketed":true,"params":{"size":1000,"orderBy":{"type":"column","columnId":"f7835375-4d5b-4839-95ea-41928192a319"},"orderDirection":"desc","otherBucket":true,"missingBucket":false},"customLabel":true},"f7835375-4d5b-4839-95ea-41928192a319":{"label":"Visits","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true},"07fc84ca-4147-4ba9-879e-d1b4e086e1daX0":{"label":"Part of HTTP 4xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","filter":{"query":"response.keyword >= 400 and response.keyword < 500","language":"kuery"},"customLabel":true},"07fc84ca-4147-4ba9-879e-d1b4e086e1daX1":{"label":"Part of HTTP 4xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true},"07fc84ca-4147-4ba9-879e-d1b4e086e1daX2":{"label":"Part of HTTP 4xx","dataType":"number","operationType":"math","isBucketed":false,"scale":"ratio","params":{"tinymathAst":{"type":"function","name":"divide","args":["07fc84ca-4147-4ba9-879e-d1b4e086e1daX0","07fc84ca-4147-4ba9-879e-d1b4e086e1daX1"],"location":{"min":0,"max":73},"text":"count(kql=\'response.keyword >= 400 and response.keyword < 500\') / count()"}},"references":["07fc84ca-4147-4ba9-879e-d1b4e086e1daX0","07fc84ca-4147-4ba9-879e-d1b4e086e1daX1"],"customLabel":true},"07fc84ca-4147-4ba9-879e-d1b4e086e1da":{"label":"HTTP 4xx","dataType":"number","operationType":"formula","isBucketed":false,"scale":"ratio","params":{"formula":"count(kql=\'response.keyword >= 400 and response.keyword < 500\') / count()","isFormulaBroken":false,"format":{"id":"percent","params":{"decimals":1}}},"references":["07fc84ca-4147-4ba9-879e-d1b4e086e1daX2"],"customLabel":true},"791d5a5b-a7ba-4e9e-b533-51b33c7d7747":{"label":"Unique","dataType":"number","operationType":"unique_count","scale":"ratio","sourceField":"clientip","isBucketed":false,"customLabel":true},"611e3509-e834-4fdd-b573-44e959e95d27":{"label":"95th percentile of bytes","dataType":"number","operationType":"percentile","sourceField":"bytes","isBucketed":false,"scale":"ratio","params":{"percentile":95,"format":{"id":"bytes","params":{"decimals":0}}}},"9f79ecca-123f-4098-a658-6b0e998da003":{"label":"Median of bytes","dataType":"number","operationType":"median","sourceField":"bytes","isBucketed":false,"scale":"ratio","params":{"format":{"id":"bytes","params":{"decimals":0}}}},"491285fd-0196-402c-9b7f-4660fdc1c22aX0":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","filter":{"query":"response.keyword >= 500","language":"kuery"},"customLabel":true},"491285fd-0196-402c-9b7f-4660fdc1c22aX1":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true},"491285fd-0196-402c-9b7f-4660fdc1c22aX2":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"math","isBucketed":false,"scale":"ratio","params":{"tinymathAst":{"type":"function","name":"divide","args":["491285fd-0196-402c-9b7f-4660fdc1c22aX0","491285fd-0196-402c-9b7f-4660fdc1c22aX1"],"location":{"min":0,"max":46},"text":"count(kql=\'response.keyword >= 500\') / count()"}},"references":["491285fd-0196-402c-9b7f-4660fdc1c22aX0","491285fd-0196-402c-9b7f-4660fdc1c22aX1"],"customLabel":true},"491285fd-0196-402c-9b7f-4660fdc1c22a":{"label":"HTTP 5xx","dataType":"number","operationType":"formula","isBucketed":false,"scale":"ratio","params":{"formula":"count(kql=\'response.keyword >= 500\') / count()","isFormulaBroken":false,"format":{"id":"percent","params":{"decimals":1}}},"references":["491285fd-0196-402c-9b7f-4660fdc1c22aX2"],"customLabel":true}},"columnOrder":["42783ad7-dbcf-4310-bc06-f21f4eaaac96","f7835375-4d5b-4839-95ea-41928192a319","791d5a5b-a7ba-4e9e-b533-51b33c7d7747","07fc84ca-4147-4ba9-879e-d1b4e086e1da","491285fd-0196-402c-9b7f-4660fdc1c22a","491285fd-0196-402c-9b7f-4660fdc1c22aX0","491285fd-0196-402c-9b7f-4660fdc1c22aX1","491285fd-0196-402c-9b7f-4660fdc1c22aX2","07fc84ca-4147-4ba9-879e-d1b4e086e1daX0","07fc84ca-4147-4ba9-879e-d1b4e086e1daX1","07fc84ca-4147-4ba9-879e-d1b4e086e1daX2","611e3509-e834-4fdd-b573-44e959e95d27","9f79ecca-123f-4098-a658-6b0e998da003"],"incompleteColumns":{}}}}},"visualization":{"layerId":"c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0","columns":[{"columnId":"42783ad7-dbcf-4310-bc06-f21f4eaaac96","width":650.6666666666666},{"columnId":"f7835375-4d5b-4839-95ea-41928192a319"},{"columnId":"491285fd-0196-402c-9b7f-4660fdc1c22a","isTransposed":false,"width":81.66666666666669,"colorMode":"cell","palette":{"name":"custom","type":"palette","params":{"steps":5,"stops":[{"color":"#fbddd6","stop":0.1},{"color":"#CC5642","stop":1}],"rangeType":"number","name":"custom","colorStops":[{"color":"#fbddd6","stop":0.05},{"color":"#CC5642","stop":0.1}],"rangeMin":0.05,"rangeMax":0.1}}},{"columnId":"07fc84ca-4147-4ba9-879e-d1b4e086e1da","isTransposed":false,"colorMode":"cell","palette":{"name":"custom","type":"palette","params":{"steps":5,"stops":[{"color":"#fbddd6","stop":0.1},{"color":"#cc5642","stop":1.1}],"name":"custom","colorStops":[{"color":"#fbddd6","stop":0.05},{"color":"#cc5642","stop":0.1}],"rangeType":"number","rangeMin":0.05,"rangeMax":0.1}}},{"columnId":"791d5a5b-a7ba-4e9e-b533-51b33c7d7747","isTransposed":false},{"columnId":"611e3509-e834-4fdd-b573-44e959e95d27","isTransposed":false},{"columnId":"9f79ecca-123f-4098-a658-6b0e998da003","isTransposed":false}],"sorting":{"columnId":"491285fd-0196-402c-9b7f-4660fdc1c22a","direction":"desc"},"layerType":"data","rowHeight":"single","rowHeightLines":1},"query":{"query":"","language":"kuery"},"filters":[]},"references":[{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"indexpattern-datasource-current-indexpattern","type":"index-pattern"},{"id":"90943e30-9a47-11e8-b64d-95841ca0b247","name":"indexpattern-datasource-layer-c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0","type":"index-pattern"}]},"enhancements":{"dynamicActions":{"events":[]}},"hidePanelTitles":false},"title":"[Logs] Errors by host"}]', - optionsJSON: '{"hidePanelTitles":false,"useMargins":true}', - version: 2, - timeRestore: true, - timeTo: 'now', - timeFrom: 'now-7d', - refreshInterval: { - pause: false, - value: 900000, - }, controlGroupInput: { controlStyle: 'oneLine', chainingSystem: 'HIERARCHICAL', @@ -412,9 +301,26 @@ export const getSavedObjects = (): SavedObject[] => [ '{"ignoreFilters":false,"ignoreQuery":false,"ignoreTimerange":false,"ignoreValidations":false}', }, kibanaSavedObjectMeta: { - searchSourceJSON: - '{"query":{"language":"kuery","query":""},"highlightAll":true,"version":true,"filter":[]}', + searchSourceJSON: '{"query":{"language":"kuery","query":""},"filter":[]}', + }, + description: i18n.translate('home.sampleData.logsTsdbSpec.webTrafficDescription', { + defaultMessage: "Analyze mock web traffic log data for Elastic's website", + }), + refreshInterval: { + pause: false, + value: 900000, }, + timeRestore: true, + optionsJSON: + '{"useMargins":true,"syncColors":false,"syncCursor":true,"syncTooltips":false,"hidePanelTitles":false}', + panelsJSON: + '[{"version":"8.8.0","type":"map","gridData":{"x":0,"y":14,"w":24,"h":18,"i":"4"},"panelIndex":"4","embeddableConfig":{"isLayerTOCOpen":false,"hiddenLayers":[],"mapCenter":{"lat":42.16337,"lon":-88.92107,"zoom":3.64},"openTOCDetails":[],"enhancements":{}},"panelRefName":"panel_4"},{"version":"8.8.0","type":"lens","gridData":{"x":36,"y":0,"w":12,"h":7,"i":"11"},"panelIndex":"11","embeddableConfig":{"attributes":{"title":"","visualizationType":"lnsMetric","type":"lens","references":[{"type":"index-pattern","id":"90943e30-9a47-11e8-b64d-95841ca0c247","name":"indexpattern-datasource-layer-28b89898-3feb-415a-8dd9-74d755ac7c2a"}],"state":{"visualization":{"layerId":"28b89898-3feb-415a-8dd9-74d755ac7c2a","layerType":"data","metricAccessor":"f92c482e-1eee-4c2a-9338-64fb3eec286a","palette":{"name":"custom","type":"palette","params":{"steps":3,"name":"custom","reverse":false,"rangeType":"number","rangeMin":0,"rangeMax":null,"progression":"fixed","stops":[{"color":"#D23115","stop":500},{"color":"#FCC400","stop":1000},{"color":"#68BC00","stop":1658}],"colorStops":[{"color":"#D23115","stop":0},{"color":"#FCC400","stop":500},{"color":"#68BC00","stop":1000}],"continuity":"above","maxSteps":5}}},"query":{"query":"","language":"kuery"},"filters":[],"datasourceStates":{"formBased":{"layers":{"28b89898-3feb-415a-8dd9-74d755ac7c2a":{"columns":{"f92c482e-1eee-4c2a-9338-64fb3eec286a":{"label":"Unique Visitors","dataType":"number","operationType":"unique_count","scale":"ratio","sourceField":"clientip","isBucketed":false,"params":{"emptyAsNull":true},"customLabel":true}},"columnOrder":["f92c482e-1eee-4c2a-9338-64fb3eec286a"],"incompleteColumns":{}}}},"textBased":{"layers":{}}},"internalReferences":[],"adHocDataViews":{}}},"hidePanelTitles":true,"enhancements":{}}},{"version":"8.8.0","type":"visualization","gridData":{"x":24,"y":14,"w":24,"h":33,"i":"14"},"panelIndex":"14","embeddableConfig":{"enhancements":{}},"panelRefName":"panel_14"},{"version":"8.8.0","type":"lens","gridData":{"x":0,"y":7,"w":24,"h":7,"i":"15"},"panelIndex":"15","embeddableConfig":{"attributes":{"title":"[Logs] Response Codes Over Time + Annotations (converted)","visualizationType":"lnsXY","type":"lens","references":[{"type":"index-pattern","id":"90943e30-9a47-11e8-b64d-95841ca0c247","name":"indexpattern-datasource-layer-b38fe501-4b47-4de8-a423-6656d1162174"},{"type":"index-pattern","id":"90943e30-9a47-11e8-b64d-95841ca0c247","name":"xy-visualization-layer-f265e722-ae38-495c-903c-48aa7931fa82"}],"state":{"visualization":{"legend":{"isVisible":true,"showSingleSeries":true,"position":"bottom","shouldTruncate":true,"maxLines":1},"valueLabels":"hide","fittingFunction":"None","fillOpacity":0.5,"yLeftExtent":{"mode":"full"},"yRightExtent":{"mode":"full"},"yLeftScale":"linear","yRightScale":"linear","axisTitlesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"tickLabelsVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"labelsOrientation":{"x":0,"yLeft":0,"yRight":0},"gridlinesVisibilitySettings":{"x":true,"yLeft":true,"yRight":true},"preferredSeriesType":"bar_stacked","layers":[{"seriesType":"area_percentage_stacked","layerType":"data","layerId":"b38fe501-4b47-4de8-a423-6656d1162174","accessors":["896c5eb2-81c5-44f1-a4a1-57344161ea62"],"yConfig":[{"forAccessor":"896c5eb2-81c5-44f1-a4a1-57344161ea62","color":"rgba(115,216,255,1)","axisMode":"left"}],"xAccessor":"8986e393-d24f-49b0-96ca-118fd66d75e5","splitAccessor":"43f5bb0f-c6da-43a0-8a0a-50e9838ed34b","palette":{"name":"default","type":"palette"}},{"layerId":"f265e722-ae38-495c-903c-48aa7931fa82","layerType":"annotations","ignoreGlobalFilters":true,"annotations":[{"type":"query","id":"bd7548a0-2223-11e8-832f-d5027f3c8a47","label":"Event","key":{"type":"point_in_time"},"color":"#D33115","timeField":"timestamp","icon":"asterisk","filter":{"type":"kibana_query","query":"tags:error AND tags:security","language":"lucene"},"extraFields":["geo.src"]}]}]},"query":{"query":"","language":"kuery"},"filters":[],"datasourceStates":{"formBased":{"layers":{"b38fe501-4b47-4de8-a423-6656d1162174":{"columns":{"8986e393-d24f-49b0-96ca-118fd66d75e5":{"label":"timestamp","dataType":"date","operationType":"date_histogram","sourceField":"timestamp","isBucketed":true,"scale":"interval","params":{"interval":"auto","includeEmptyRows":true,"dropPartials":false}},"43f5bb0f-c6da-43a0-8a0a-50e9838ed34b":{"label":"Filters","dataType":"string","operationType":"filters","scale":"ordinal","isBucketed":true,"params":{"filters":[{"input":{"query":"response.keyword >= 200 and response.keyword < 400","language":"kuery"},"label":"HTTP 2xx and 3xx"},{"input":{"query":"response.keyword >= 400 and response.keyword < 500","language":"kuery"},"label":"HTTP 4xx"},{"input":{"query":"response.keyword >= 500","language":"kuery"},"label":"HTTP 5xx"}]}},"896c5eb2-81c5-44f1-a4a1-57344161ea62":{"label":"Response Code Count","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","params":{"emptyAsNull":true},"customLabel":true}},"columnOrder":["8986e393-d24f-49b0-96ca-118fd66d75e5","43f5bb0f-c6da-43a0-8a0a-50e9838ed34b","896c5eb2-81c5-44f1-a4a1-57344161ea62"],"incompleteColumns":{}}}},"textBased":{"layers":{}}},"internalReferences":[],"adHocDataViews":{}}},"enhancements":{},"hidePanelTitles":false},"title":"[Logs] Response Codes Over Time + Annotations"},{"version":"8.8.0","type":"visualization","gridData":{"x":0,"y":0,"w":24,"h":7,"i":"343f0bef-0b19-452e-b1c8-59beb18b6f0c"},"panelIndex":"343f0bef-0b19-452e-b1c8-59beb18b6f0c","embeddableConfig":{"savedVis":{"title":"[Logs] Markdown Instructions","description":"","type":"markdown","params":{"fontSize":12,"openLinksInNewTab":true,"markdown":"## Sample Logs Data\\nThis dashboard contains sample data for you to play with. You can view it, search it, and interact with the visualizations. For more information about Kibana, check our [docs](https://www.elastic.co/guide/en/kibana/current/index.html)."},"uiState":{},"data":{"aggs":[],"searchSource":{"query":{"query":"","language":"kuery"},"filter":[]}}},"enhancements":{},"hidePanelTitles":true}},{"version":"8.8.0","type":"lens","gridData":{"x":24,"y":0,"w":12,"h":7,"i":"bb94016e-f4a6-49ca-87a9-296a2869d570"},"panelIndex":"bb94016e-f4a6-49ca-87a9-296a2869d570","embeddableConfig":{"attributes":{"title":"","visualizationType":"lnsMetric","type":"lens","references":[{"type":"index-pattern","id":"90943e30-9a47-11e8-b64d-95841ca0c247","name":"indexpattern-datasource-layer-483defd2-775b-4a62-bdef-496c819bb8ed"}],"state":{"visualization":{"layerId":"483defd2-775b-4a62-bdef-496c819bb8ed","layerType":"data","metricAccessor":"37430d12-7452-4cc9-b035-5cfd4061edf0"},"query":{"query":"","language":"kuery"},"filters":[],"datasourceStates":{"formBased":{"layers":{"483defd2-775b-4a62-bdef-496c819bb8ed":{"columns":{"37430d12-7452-4cc9-b035-5cfd4061edf0":{"label":"Visits","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true}},"columnOrder":["37430d12-7452-4cc9-b035-5cfd4061edf0"],"incompleteColumns":{}}}}},"internalReferences":[],"adHocDataViews":{}}},"enhancements":{}}},{"version":"8.8.0","type":"lens","gridData":{"x":36,"y":7,"w":12,"h":7,"i":"8c1456d4-1993-4ba2-b701-04aca02c9fef"},"panelIndex":"8c1456d4-1993-4ba2-b701-04aca02c9fef","embeddableConfig":{"attributes":{"title":"","visualizationType":"lnsMetric","type":"lens","references":[{"type":"index-pattern","id":"90943e30-9a47-11e8-b64d-95841ca0c247","name":"indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a"}],"state":{"visualization":{"layerId":"f3793bb7-3971-4753-866d-4008e77a9f9a","layerType":"data","metricAccessor":"71c076a6-e782-4866-b8df-5fd85a41f08b"},"query":{"query":"","language":"kuery"},"filters":[],"datasourceStates":{"formBased":{"layers":{"f3793bb7-3971-4753-866d-4008e77a9f9a":{"columns":{"71c076a6-e782-4866-b8df-5fd85a41f08bX0":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","filter":{"query":"response.keyword >= 500","language":"kuery"},"params":{"emptyAsNull":false},"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08bX1":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","params":{"emptyAsNull":false},"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08bX2":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"math","isBucketed":false,"scale":"ratio","params":{"tinymathAst":{"type":"function","name":"divide","args":["71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1"],"location":{"min":0,"max":46},"text":"count(kql=\'response.keyword >= 500\') / count()"}},"references":["71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1"],"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08b":{"label":"HTTP 5xx","dataType":"number","operationType":"formula","isBucketed":false,"scale":"ratio","params":{"formula":"count(kql=\'response.keyword >= 500\') / count()","isFormulaBroken":false,"format":{"id":"percent","params":{"decimals":1}}},"references":["71c076a6-e782-4866-b8df-5fd85a41f08bX2"],"customLabel":true}},"columnOrder":["71c076a6-e782-4866-b8df-5fd85a41f08b","71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1","71c076a6-e782-4866-b8df-5fd85a41f08bX2"],"incompleteColumns":{}}}}},"internalReferences":[],"adHocDataViews":{}}},"enhancements":{}}},{"version":"8.8.0","type":"lens","gridData":{"x":24,"y":7,"w":12,"h":7,"i":"01d8e435-91c0-484f-a11e-856747050b0a"},"panelIndex":"01d8e435-91c0-484f-a11e-856747050b0a","embeddableConfig":{"attributes":{"title":"","visualizationType":"lnsMetric","type":"lens","references":[{"type":"index-pattern","id":"90943e30-9a47-11e8-b64d-95841ca0c247","name":"indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a"}],"state":{"visualization":{"layerId":"f3793bb7-3971-4753-866d-4008e77a9f9a","layerType":"data","metricAccessor":"71c076a6-e782-4866-b8df-5fd85a41f08b"},"query":{"query":"","language":"kuery"},"filters":[],"datasourceStates":{"formBased":{"layers":{"f3793bb7-3971-4753-866d-4008e77a9f9a":{"columns":{"71c076a6-e782-4866-b8df-5fd85a41f08bX0":{"label":"Part of HTTP 4xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","filter":{"query":"response.keyword >= 400 and response.keyword < 500","language":"kuery"},"params":{"emptyAsNull":false},"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08bX1":{"label":"Part of HTTP 4xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","params":{"emptyAsNull":false},"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08bX2":{"label":"Part of HTTP 4xx","dataType":"number","operationType":"math","isBucketed":false,"scale":"ratio","params":{"tinymathAst":{"type":"function","name":"divide","args":["71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1"],"location":{"min":0,"max":73},"text":"count(kql=\'response.keyword >= 400 and response.keyword < 500\') / count()"}},"references":["71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1"],"customLabel":true},"71c076a6-e782-4866-b8df-5fd85a41f08b":{"label":"HTTP 4xx","dataType":"number","operationType":"formula","isBucketed":false,"scale":"ratio","params":{"formula":"count(kql=\'response.keyword >= 400 and response.keyword < 500\') / count()","isFormulaBroken":false,"format":{"id":"percent","params":{"decimals":1}}},"references":["71c076a6-e782-4866-b8df-5fd85a41f08bX2"],"customLabel":true}},"columnOrder":["71c076a6-e782-4866-b8df-5fd85a41f08b","71c076a6-e782-4866-b8df-5fd85a41f08bX0","71c076a6-e782-4866-b8df-5fd85a41f08bX1","71c076a6-e782-4866-b8df-5fd85a41f08bX2"],"incompleteColumns":{}}}}},"internalReferences":[],"adHocDataViews":{}}},"enhancements":{}}},{"version":"8.8.0","type":"visualization","gridData":{"x":0,"y":32,"w":24,"h":15,"i":"8e59c7cf-6e42-4343-a113-c4a255fcf2ce"},"panelIndex":"8e59c7cf-6e42-4343-a113-c4a255fcf2ce","embeddableConfig":{"savedVis":{"title":"","description":"","type":"vega","params":{"spec":"{\\n $schema: https://vega.github.io/schema/vega-lite/v5.json\\n data: {\\n url: {\\n %context%: true\\n %timefield%: @timestamp\\n index: kibana_sample_data_logs\\n body: {\\n aggs: {\\n countries: {\\n terms: {\\n field: geo.src\\n size: 25\\n }\\n aggs: {\\n hours: {\\n histogram: {\\n field: hour_of_day\\n interval: 1\\n }\\n aggs: {\\n unique: {\\n cardinality: {\\n field: clientip\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n size: 0\\n }\\n }\\n format: {property: \\"aggregations.countries.buckets\\"}\\n }\\n \\n transform: [\\n {\\n flatten: [\\"hours.buckets\\"],\\n as: [\\"buckets\\"]\\n }\\n ]\\n\\n mark: {\\n type: rect\\n tooltip: true\\n }\\n\\n encoding: {\\n x: {\\n field: buckets.key\\n type: ordinal\\n axis: {\\n title: false\\n labelAngle: 0\\n }\\n }\\n y: {\\n field: key\\n type: nominal\\n sort: {\\n field: -buckets.unique.value\\n }\\n axis: {title: false}\\n }\\n color: {\\n field: buckets.unique.value\\n type: quantitative\\n axis: {title: false}\\n scale: {\\n scheme: reds\\n }\\n }\\n }\\n}\\n"},"uiState":{},"data":{"aggs":[],"searchSource":{"query":{"query":"","language":"kuery"},"filter":[]}}},"enhancements":{}},"panelRefName":"panel_8e59c7cf-6e42-4343-a113-c4a255fcf2ce"},{"version":"8.8.0","type":"lens","gridData":{"x":0,"y":47,"w":24,"h":13,"i":"21bb0939-ee09-4021-8848-6552b3a6a788"},"panelIndex":"21bb0939-ee09-4021-8848-6552b3a6a788","embeddableConfig":{"attributes":{"title":"","visualizationType":"lnsDatatable","type":"lens","references":[{"type":"index-pattern","id":"90943e30-9a47-11e8-b64d-95841ca0c247","name":"indexpattern-datasource-layer-c840e93e-2949-4723-ad35-6bdb2d724404"}],"state":{"visualization":{"columns":[{"columnId":"4e64d6d7-4f92-4d5e-abbb-13796604db30","isTransposed":false},{"columnId":"fb9a848d-76f3-4005-a067-4259a50b5621","isTransposed":false},{"columnId":"a2760bc2-9a6e-46a1-8595-86f61573c7cf","isTransposed":false},{"columnId":"2c8bd8d5-35ff-4386-8d27-3ba882b13e43","isTransposed":false,"colorMode":"text","palette":{"name":"custom","type":"palette","params":{"steps":5,"stops":[{"color":"#d23115","stop":1000},{"color":"#fcc400","stop":1500},{"color":"#68bc00","stop":1501}],"rangeType":"number","rangeMin":0,"rangeMax":null,"continuity":"above","colorStops":[{"color":"#d23115","stop":0},{"color":"#fcc400","stop":1000},{"color":"#68bc00","stop":1500}],"name":"custom"}}},{"columnId":"defa6f97-b874-4556-8438-056fb437787b","isTransposed":false,"colorMode":"text","palette":{"name":"custom","type":"palette","params":{"steps":5,"stops":[{"color":"#D23115","stop":10},{"color":"#FCC400","stop":25},{"color":"#68bc00","stop":26}],"rangeType":"number","rangeMin":0,"rangeMax":null,"continuity":"above","colorStops":[{"color":"#D23115","stop":0},{"color":"#FCC400","stop":10},{"color":"#68bc00","stop":25}],"name":"custom"}}}],"layerId":"c840e93e-2949-4723-ad35-6bdb2d724404","layerType":"data"},"query":{"query":"","language":"kuery"},"filters":[],"datasourceStates":{"formBased":{"layers":{"c840e93e-2949-4723-ad35-6bdb2d724404":{"columns":{"4e64d6d7-4f92-4d5e-abbb-13796604db30":{"label":"Type","dataType":"string","operationType":"terms","scale":"ordinal","sourceField":"extension.keyword","isBucketed":true,"params":{"size":10,"orderBy":{"type":"column","columnId":"fb9a848d-76f3-4005-a067-4259a50b5621"},"orderDirection":"desc","otherBucket":true,"missingBucket":false,"parentFormat":{"id":"terms"},"include":[],"exclude":[],"includeIsRegex":false,"excludeIsRegex":false},"customLabel":true},"fb9a848d-76f3-4005-a067-4259a50b5621":{"label":"Bytes (Total)","dataType":"number","operationType":"sum","sourceField":"bytes","isBucketed":false,"scale":"ratio","params":{"emptyAsNull":true,"format":{"id":"bytes","params":{"decimals":2}}},"customLabel":true},"a2760bc2-9a6e-46a1-8595-86f61573c7cf":{"label":"Bytes (Last Hour)","dataType":"number","operationType":"sum","sourceField":"bytes","isBucketed":false,"scale":"ratio","reducedTimeRange":"1h","params":{"emptyAsNull":true,"format":{"id":"bytes","params":{"decimals":2}}},"customLabel":true},"2c8bd8d5-35ff-4386-8d27-3ba882b13e43":{"label":"Unique Visits (Total)","dataType":"number","operationType":"unique_count","scale":"ratio","sourceField":"clientip","isBucketed":false,"params":{"emptyAsNull":true},"customLabel":true},"defa6f97-b874-4556-8438-056fb437787b":{"label":"Unique count of clientip","dataType":"number","operationType":"unique_count","scale":"ratio","sourceField":"clientip","isBucketed":false,"reducedTimeRange":"1h","params":{"emptyAsNull":true}}},"columnOrder":["4e64d6d7-4f92-4d5e-abbb-13796604db30","fb9a848d-76f3-4005-a067-4259a50b5621","a2760bc2-9a6e-46a1-8595-86f61573c7cf","2c8bd8d5-35ff-4386-8d27-3ba882b13e43","defa6f97-b874-4556-8438-056fb437787b"],"sampling":1,"incompleteColumns":{}}}},"textBased":{"layers":{}}},"internalReferences":[],"adHocDataViews":{}}},"enhancements":{}}},{"version":"8.8.0","type":"lens","gridData":{"x":24,"y":47,"w":24,"h":13,"i":"cbca842c-b9fa-4523-9ce0-14e350866e33"},"panelIndex":"cbca842c-b9fa-4523-9ce0-14e350866e33","embeddableConfig":{"hidePanelTitles":false,"enhancements":{}},"title":"[Logs] Bytes distribution","panelRefName":"panel_cbca842c-b9fa-4523-9ce0-14e350866e33"},{"version":"8.8.0","type":"lens","gridData":{"x":0,"y":60,"w":48,"h":19,"i":"1d5f0b3f-d9d2-4b26-997b-83bc5ca3090b"},"panelIndex":"1d5f0b3f-d9d2-4b26-997b-83bc5ca3090b","embeddableConfig":{"attributes":{"title":"","type":"lens","visualizationType":"lnsDatatable","state":{"datasourceStates":{"formBased":{"layers":{"c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0":{"columns":{"42783ad7-dbcf-4310-bc06-f21f4eaaac96":{"label":"URL","dataType":"string","operationType":"terms","scale":"ordinal","sourceField":"url","isBucketed":true,"params":{"size":1000,"orderBy":{"type":"column","columnId":"f7835375-4d5b-4839-95ea-41928192a319"},"orderDirection":"desc","otherBucket":true,"missingBucket":false},"customLabel":true},"f7835375-4d5b-4839-95ea-41928192a319":{"label":"Visits","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true},"07fc84ca-4147-4ba9-879e-d1b4e086e1daX0":{"label":"Part of HTTP 4xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","filter":{"query":"response.keyword >= 400 and response.keyword < 500","language":"kuery"},"customLabel":true},"07fc84ca-4147-4ba9-879e-d1b4e086e1daX1":{"label":"Part of HTTP 4xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true},"07fc84ca-4147-4ba9-879e-d1b4e086e1daX2":{"label":"Part of HTTP 4xx","dataType":"number","operationType":"math","isBucketed":false,"scale":"ratio","params":{"tinymathAst":{"type":"function","name":"divide","args":["07fc84ca-4147-4ba9-879e-d1b4e086e1daX0","07fc84ca-4147-4ba9-879e-d1b4e086e1daX1"],"location":{"min":0,"max":73},"text":"count(kql=\'response.keyword >= 400 and response.keyword < 500\') / count()"}},"references":["07fc84ca-4147-4ba9-879e-d1b4e086e1daX0","07fc84ca-4147-4ba9-879e-d1b4e086e1daX1"],"customLabel":true},"07fc84ca-4147-4ba9-879e-d1b4e086e1da":{"label":"HTTP 4xx","dataType":"number","operationType":"formula","isBucketed":false,"scale":"ratio","params":{"formula":"count(kql=\'response.keyword >= 400 and response.keyword < 500\') / count()","isFormulaBroken":false,"format":{"id":"percent","params":{"decimals":1}}},"references":["07fc84ca-4147-4ba9-879e-d1b4e086e1daX2"],"customLabel":true},"791d5a5b-a7ba-4e9e-b533-51b33c7d7747":{"label":"Unique","dataType":"number","operationType":"unique_count","scale":"ratio","sourceField":"clientip","isBucketed":false,"customLabel":true},"611e3509-e834-4fdd-b573-44e959e95d27":{"label":"95th percentile of bytes","dataType":"number","operationType":"percentile","sourceField":"bytes","isBucketed":false,"scale":"ratio","params":{"percentile":95,"format":{"id":"bytes","params":{"decimals":0}}}},"9f79ecca-123f-4098-a658-6b0e998da003":{"label":"Median of bytes","dataType":"number","operationType":"median","sourceField":"bytes","isBucketed":false,"scale":"ratio","params":{"format":{"id":"bytes","params":{"decimals":0}}}},"491285fd-0196-402c-9b7f-4660fdc1c22aX0":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","filter":{"query":"response.keyword >= 500","language":"kuery"},"customLabel":true},"491285fd-0196-402c-9b7f-4660fdc1c22aX1":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"count","isBucketed":false,"scale":"ratio","sourceField":"___records___","customLabel":true},"491285fd-0196-402c-9b7f-4660fdc1c22aX2":{"label":"Part of HTTP 5xx","dataType":"number","operationType":"math","isBucketed":false,"scale":"ratio","params":{"tinymathAst":{"type":"function","name":"divide","args":["491285fd-0196-402c-9b7f-4660fdc1c22aX0","491285fd-0196-402c-9b7f-4660fdc1c22aX1"],"location":{"min":0,"max":46},"text":"count(kql=\'response.keyword >= 500\') / count()"}},"references":["491285fd-0196-402c-9b7f-4660fdc1c22aX0","491285fd-0196-402c-9b7f-4660fdc1c22aX1"],"customLabel":true},"491285fd-0196-402c-9b7f-4660fdc1c22a":{"label":"HTTP 5xx","dataType":"number","operationType":"formula","isBucketed":false,"scale":"ratio","params":{"formula":"count(kql=\'response.keyword >= 500\') / count()","isFormulaBroken":false,"format":{"id":"percent","params":{"decimals":1}}},"references":["491285fd-0196-402c-9b7f-4660fdc1c22aX2"],"customLabel":true}},"columnOrder":["42783ad7-dbcf-4310-bc06-f21f4eaaac96","f7835375-4d5b-4839-95ea-41928192a319","791d5a5b-a7ba-4e9e-b533-51b33c7d7747","07fc84ca-4147-4ba9-879e-d1b4e086e1da","491285fd-0196-402c-9b7f-4660fdc1c22a","491285fd-0196-402c-9b7f-4660fdc1c22aX0","491285fd-0196-402c-9b7f-4660fdc1c22aX1","491285fd-0196-402c-9b7f-4660fdc1c22aX2","07fc84ca-4147-4ba9-879e-d1b4e086e1daX0","07fc84ca-4147-4ba9-879e-d1b4e086e1daX1","07fc84ca-4147-4ba9-879e-d1b4e086e1daX2","611e3509-e834-4fdd-b573-44e959e95d27","9f79ecca-123f-4098-a658-6b0e998da003"],"incompleteColumns":{}}}}},"visualization":{"layerId":"c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0","columns":[{"columnId":"42783ad7-dbcf-4310-bc06-f21f4eaaac96","width":650.6666666666666},{"columnId":"f7835375-4d5b-4839-95ea-41928192a319"},{"columnId":"491285fd-0196-402c-9b7f-4660fdc1c22a","isTransposed":false,"width":81.66666666666669,"colorMode":"cell","palette":{"name":"custom","type":"palette","params":{"steps":5,"stops":[{"color":"#fbddd6","stop":0.1},{"color":"#CC5642","stop":1}],"rangeType":"number","name":"custom","colorStops":[{"color":"#fbddd6","stop":0.05},{"color":"#CC5642","stop":0.1}],"rangeMin":0.05,"rangeMax":0.1}}},{"columnId":"07fc84ca-4147-4ba9-879e-d1b4e086e1da","isTransposed":false,"colorMode":"cell","palette":{"name":"custom","type":"palette","params":{"steps":5,"stops":[{"color":"#fbddd6","stop":0.1},{"color":"#cc5642","stop":1.1}],"name":"custom","colorStops":[{"color":"#fbddd6","stop":0.05},{"color":"#cc5642","stop":0.1}],"rangeType":"number","rangeMin":0.05,"rangeMax":0.1}}},{"columnId":"791d5a5b-a7ba-4e9e-b533-51b33c7d7747","isTransposed":false},{"columnId":"611e3509-e834-4fdd-b573-44e959e95d27","isTransposed":false},{"columnId":"9f79ecca-123f-4098-a658-6b0e998da003","isTransposed":false}],"sorting":{"columnId":"491285fd-0196-402c-9b7f-4660fdc1c22a","direction":"desc"},"layerType":"data","rowHeight":"single","rowHeightLines":1},"query":{"query":"","language":"kuery"},"filters":[]},"references":[{"id":"90943e30-9a47-11e8-b64d-95841ca0c247","name":"indexpattern-datasource-current-indexpattern","type":"index-pattern"},{"id":"90943e30-9a47-11e8-b64d-95841ca0c247","name":"indexpattern-datasource-layer-c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0","type":"index-pattern"}]},"enhancements":{"dynamicActions":{"events":[]}},"hidePanelTitles":false},"title":"[Logs] Errors by host"}]', + timeFrom: 'now-7d/d', + title: i18n.translate('home.sampleData.logsTsdbSpec.webTrafficTitle', { + defaultMessage: '[Logs TSDB] Web Traffic', + }), + timeTo: 'now', + version: 1, }, references: [ { @@ -423,14 +329,9 @@ export const getSavedObjects = (): SavedObject[] => [ id: '06cf9c40-9ee8-11e7-8711-e7a007dcef99', }, { - name: '9:panel_9', - type: 'visualization', - id: '4eb6e500-e1c7-11e7-b6d5-4dc382ef7f5b', - }, - { - name: '11:panel_11', - type: 'visualization', - id: '69a34b00-9ee8-11e7-8711-e7a007dcef99', + type: 'index-pattern', + id: '90943e30-9a47-11e8-b64d-95841ca0c247', + name: '11:indexpattern-datasource-layer-28b89898-3feb-415a-8dd9-74d755ac7c2a', }, { name: '14:panel_14', @@ -438,45 +339,40 @@ export const getSavedObjects = (): SavedObject[] => [ id: '7cbd2350-2223-11e8-b802-5bcf64c2cfb4', }, { - name: '15:panel_15', - type: 'visualization', - id: '314c6f60-2224-11e8-b802-5bcf64c2cfb4', + type: 'index-pattern', + id: '90943e30-9a47-11e8-b64d-95841ca0c247', + name: '15:indexpattern-datasource-layer-b38fe501-4b47-4de8-a423-6656d1162174', }, { - id: '90943e30-9a47-11e8-b64d-95841ca0c247', - name: 'bb94016e-f4a6-49ca-87a9-296a2869d570:indexpattern-datasource-current-indexpattern', type: 'index-pattern', + id: '90943e30-9a47-11e8-b64d-95841ca0c247', + name: '15:xy-visualization-layer-f265e722-ae38-495c-903c-48aa7931fa82', }, { + type: 'index-pattern', id: '90943e30-9a47-11e8-b64d-95841ca0c247', name: 'bb94016e-f4a6-49ca-87a9-296a2869d570:indexpattern-datasource-layer-483defd2-775b-4a62-bdef-496c819bb8ed', - type: 'index-pattern', }, { - id: '90943e30-9a47-11e8-b64d-95841ca0c247', - name: '01d8e435-91c0-484f-a11e-856747050b0a:indexpattern-datasource-current-indexpattern', type: 'index-pattern', - }, - { id: '90943e30-9a47-11e8-b64d-95841ca0c247', - name: '01d8e435-91c0-484f-a11e-856747050b0a:indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a', - type: 'index-pattern', + name: '8c1456d4-1993-4ba2-b701-04aca02c9fef:indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a', }, { - id: '90943e30-9a47-11e8-b64d-95841ca0c247', - name: '8c1456d4-1993-4ba2-b701-04aca02c9fef:indexpattern-datasource-current-indexpattern', type: 'index-pattern', - }, - { id: '90943e30-9a47-11e8-b64d-95841ca0c247', - name: '8c1456d4-1993-4ba2-b701-04aca02c9fef:indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a', - type: 'index-pattern', + name: '01d8e435-91c0-484f-a11e-856747050b0a:indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a', }, { name: '8e59c7cf-6e42-4343-a113-c4a255fcf2ce:panel_8e59c7cf-6e42-4343-a113-c4a255fcf2ce', type: 'visualization', id: 'cb099a20-ea66-11eb-9425-113343a037e3', }, + { + type: 'index-pattern', + id: '90943e30-9a47-11e8-b64d-95841ca0c247', + name: '21bb0939-ee09-4021-8848-6552b3a6a788:indexpattern-datasource-layer-c840e93e-2949-4723-ad35-6bdb2d724404', + }, { name: 'cbca842c-b9fa-4523-9ce0-14e350866e33:panel_cbca842c-b9fa-4523-9ce0-14e350866e33', type: 'lens', @@ -508,19 +404,18 @@ export const getSavedObjects = (): SavedObject[] => [ id: '90943e30-9a47-11e8-b64d-95841ca0c247', }, ], - migrationVersion: { - dashboard: '8.5.0', - }, - coreMigrationVersion: '8.6.0', + coreMigrationVersion: '8.8.0', + typeMigrationVersion: '8.7.0', + managed: false, }, { - id: '2f360f30-ea74-11eb-b4c6-3d2afc1cc389', + id: '2f360f30-ea74-11eb-b4c6-3d2afc1cb389', type: 'search', updated_at: '2021-07-21T22:37:09.415Z', version: '1', - migrationVersion: { - search: '7.9.3', - }, + coreMigrationVersion: '8.8.0', + typeMigrationVersion: '7.9.3', + managed: false, attributes: { title: i18n.translate('home.sampleData.logsSpec.discoverTitle', { defaultMessage: '[Logs] Visits', diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/__snapshots__/clusters_view.test.tsx.snap b/src/plugins/inspector/public/views/requests/components/details/clusters_view/__snapshots__/clusters_view.test.tsx.snap new file mode 100644 index 00000000000000..4d4b46507925d4 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/__snapshots__/clusters_view.test.tsx.snap @@ -0,0 +1,115 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`render should render local and remote cluster details from _clusters 1`] = ` + + + + + +`; + +exports[`render should render local cluster details from _shards 1`] = ` + + + + + +`; diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/cluster_health.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/cluster_health.tsx new file mode 100644 index 00000000000000..4e4e57f5284c7b --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/cluster_health.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { i18n } from '@kbn/i18n'; +import { EuiHealth, EuiText } from '@elastic/eui'; +import { HEALTH_HEX_CODES } from './gradient'; + +interface Props { + count?: number; + status: string; +} + +export function ClusterHealth({ count, status }: Props) { + if (typeof count === 'number' && count === 0) { + return null; + } + + let color = 'subdued'; + let statusLabel = status; + if (status === 'successful') { + color = HEALTH_HEX_CODES.successful; + statusLabel = i18n.translate('inspector.requests.clusters.successfulLabel', { + defaultMessage: 'successful', + }); + } else if (status === 'partial') { + color = HEALTH_HEX_CODES.partial; + statusLabel = i18n.translate('inspector.requests.clusters.partialLabel', { + defaultMessage: 'partial', + }); + } else if (status === 'skipped') { + color = HEALTH_HEX_CODES.skipped; + statusLabel = i18n.translate('inspector.requests.clusters.skippedLabel', { + defaultMessage: 'skipped', + }); + } else if (status === 'failed') { + color = HEALTH_HEX_CODES.failed; + statusLabel = i18n.translate('inspector.requests.clusters.failedLabel', { + defaultMessage: 'failed', + }); + } + + const label = typeof count === 'number' ? `${count} ${statusLabel}` : statusLabel; + return ( + + + {label} + + + ); +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/clusters_health.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/clusters_health.tsx new file mode 100644 index 00000000000000..088e28c5e5787a --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/clusters_health.tsx @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { css } from '@emotion/react'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { i18n } from '@kbn/i18n'; +import type { ClusterDetails } from '@kbn/es-types'; +import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; +import { ClusterHealth } from './cluster_health'; +import { getHeathBarLinearGradient } from './gradient'; + +interface Props { + clusters: Record; +} + +export function ClustersHealth({ clusters }: Props) { + let successful = 0; + let partial = 0; + let skipped = 0; + let failed = 0; + Object.values(clusters).forEach((clusterDetails) => { + if (clusterDetails.status === 'successful') { + successful++; + } else if (clusterDetails.status === 'partial') { + partial++; + } else if (clusterDetails.status === 'skipped') { + skipped++; + } else if (clusterDetails.status === 'failed') { + failed++; + } + }); + + return ( + <> + + + + {i18n.translate('inspector.requests.clusters.totalClustersLabel', { + defaultMessage: '{total} {total, plural, one {cluster} other {clusters}}', + values: { total: Object.keys(clusters).length }, + })} + + + + {successful > 0 ? ( + + + + ) : null} + + {partial > 0 ? ( + + + + ) : null} + + {skipped > 0 ? ( + + + + ) : null} + + {failed > 0 ? ( + + + + ) : null} + + +
+ + ); +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/gradient.test.ts b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/gradient.test.ts new file mode 100644 index 00000000000000..fba44c72998ea9 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/gradient.test.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { getHeathBarLinearGradient, HEALTH_HEX_CODES } from './gradient'; + +describe('getHeathBarLinearGradient', () => { + test('should return linear-gradient with percentages for each status', () => { + expect(getHeathBarLinearGradient(5, 1, 1, 2)).toBe( + `linear-gradient(to right, ${HEALTH_HEX_CODES.successful} 0% 56%, ${HEALTH_HEX_CODES.partial} 56% 67%, ${HEALTH_HEX_CODES.skipped} 67% 78%, ${HEALTH_HEX_CODES.failed} 78% 100%)` + ); + }); + + test('should return linear-gradient with percentages for each status with count above zero', () => { + expect(getHeathBarLinearGradient(5, 0, 0, 2)).toBe( + `linear-gradient(to right, ${HEALTH_HEX_CODES.successful} 0% 71%, ${HEALTH_HEX_CODES.failed} 71% 100%)` + ); + }); +}); diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/gradient.ts b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/gradient.ts new file mode 100644 index 00000000000000..671819e31b3a7b --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/gradient.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 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 { euiThemeVars } from '@kbn/ui-theme'; + +export const HEALTH_HEX_CODES = { + successful: euiThemeVars.euiColorSuccess, + partial: euiThemeVars.euiColorWarning, + skipped: '#DA8B45', + failed: euiThemeVars.euiColorDanger, +}; + +export function getHeathBarLinearGradient( + successful: number, + partial: number, + skipped: number, + failed: number +) { + const total = successful + partial + skipped + failed; + const stops: string[] = []; + let startPercent: number = 0; + + function addStop(value: number, color: string) { + if (value <= 0) { + return; + } + + const percent = Math.round((value / total) * 100); + const endPercent = startPercent + percent; + stops.push(`${color} ${startPercent}% ${endPercent}%`); + startPercent = endPercent; + } + + addStop(successful, HEALTH_HEX_CODES.successful); + addStop(partial, HEALTH_HEX_CODES.partial); + addStop(skipped, HEALTH_HEX_CODES.skipped); + addStop(failed, HEALTH_HEX_CODES.failed); + + const printedStops = stops + .map((stop, index) => { + return index === stops.length - 1 ? stop : stop + ', '; + }) + .join(''); + + return `linear-gradient(to right, ${printedStops})`; +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/index.ts b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/index.ts new file mode 100644 index 00000000000000..d821f0b9f7b107 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_health/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { ClustersHealth } from './clusters_health'; +export { ClusterHealth } from './cluster_health'; diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/__snapshots__/cluster_view.test.tsx.snap b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/__snapshots__/cluster_view.test.tsx.snap new file mode 100644 index 00000000000000..66f1352ce8aabc --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/__snapshots__/cluster_view.test.tsx.snap @@ -0,0 +1,165 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`render partial should display callout when request timed out 1`] = ` + + + + +`; + +exports[`render partial should show view shard failure button when there are shard failures 1`] = ` + + + +`; + +exports[`render should display success 1`] = ` + + + +`; + +exports[`render skipped or failed should display callout when cluster is unavailable 1`] = ` + + +

+ no_such_remote_cluster_exception: "no such remote cluster: [remote1]" +

+
+ +
+`; + +exports[`render skipped or failed should display callout with view failed shards button when all shards fail 1`] = ` + + +

+ search_phase_execution_exception: "all shards failed" +

+ +
+ +
+`; diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/cluster_view.test.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/cluster_view.test.tsx new file mode 100644 index 00000000000000..762896bfb20d78 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/cluster_view.test.tsx @@ -0,0 +1,162 @@ +/* + * 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 { shallow } from 'enzyme'; +import type { ClusterDetails } from '@kbn/es-types'; +import { ClusterView } from './cluster_view'; + +describe('render', () => { + test('should display success', () => { + const clusterDetails = { + status: 'successful', + indices: 'kibana_sample_data*', + took: 10005, + timed_out: false, + _shards: { + total: 3, + successful: 3, + skipped: 0, + failed: 0, + }, + } as ClusterDetails; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); + + describe('partial', () => { + test('should show view shard failure button when there are shard failures', () => { + const clusterDetails = { + status: 'partial', + indices: 'kibana_sample_data_logs,kibana_sample_data_flights', + took: 5, + timed_out: false, + _shards: { + total: 2, + successful: 1, + skipped: 0, + failed: 1, + }, + failures: [ + { + shard: 0, + index: 'remote1:.ds-kibana_sample_data_logs-2023.08.21-000001', + node: 'NVzFRd6SS4qT9o0k2vIzlg', + reason: { + type: 'query_shard_exception', + reason: + 'failed to create query: [.ds-kibana_sample_data_logs-2023.08.21-000001][0] local shard failure message 123', + index_uuid: 'z1sPO8E4TdWcijNgsL_BxQ', + index: 'remote1:.ds-kibana_sample_data_logs-2023.08.21-000001', + caused_by: { + type: 'runtime_exception', + reason: + 'runtime_exception: [.ds-kibana_sample_data_logs-2023.08.21-000001][0] local shard failure message 123', + }, + }, + }, + ], + } as ClusterDetails; + + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); + + test('should display callout when request timed out', () => { + const clusterDetails = { + status: 'partial', + indices: 'kibana_sample_data*', + took: 10005, + timed_out: true, + _shards: { + total: 3, + successful: 3, + skipped: 0, + failed: 0, + }, + } as ClusterDetails; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); + }); + + describe('skipped or failed', () => { + test('should display callout when cluster is unavailable', () => { + const clusterDetails = { + status: 'skipped', + indices: 'kibana_sample_data*', + timed_out: false, + failures: [ + { + shard: -1, + index: null, + reason: { + type: 'no_such_remote_cluster_exception', + reason: 'no such remote cluster: [remote1]', + }, + }, + ], + } as unknown as ClusterDetails; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); + + test('should display callout with view failed shards button when all shards fail', () => { + const clusterDetails = { + status: 'skipped', + indices: 'kibana_sample_data*', + timed_out: false, + failures: [ + { + shard: -1, + index: null, + reason: { + type: 'search_phase_execution_exception', + reason: 'all shards failed', + phase: 'query', + grouped: true, + failed_shards: [ + { + shard: 0, + index: 'remote1:.ds-kibana_sample_data_logs-2023.09.21-000001', + node: '_JVoOnN5QKidGGXFJAlgpA', + reason: { + type: 'query_shard_exception', + reason: + 'failed to create query: [.ds-kibana_sample_data_logs-2023.09.21-000001][0] local shard failure message 123', + index_uuid: 'PAa7v-dKRIyo4kv6b8dxkQ', + index: 'remote1:.ds-kibana_sample_data_logs-2023.09.21-000001', + caused_by: { + type: 'runtime_exception', + reason: + 'runtime_exception: [.ds-kibana_sample_data_logs-2023.09.21-000001][0] local shard failure message 123', + }, + }, + }, + ], + caused_by: { + type: 'query_shard_exception', + reason: + 'failed to create query: [.ds-kibana_sample_data_logs-2023.09.21-000001][0] local shard failure message 123', + index_uuid: 'PAa7v-dKRIyo4kv6b8dxkQ', + index: 'remote1:.ds-kibana_sample_data_logs-2023.09.21-000001', + caused_by: { + type: 'runtime_exception', + reason: + 'runtime_exception: [.ds-kibana_sample_data_logs-2023.09.21-000001][0] local shard failure message 123', + }, + }, + }, + }, + ], + } as unknown as ClusterDetails; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); + }); +}); diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/cluster_view.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/cluster_view.tsx new file mode 100644 index 00000000000000..ef0509110153e7 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/cluster_view.tsx @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { i18n } from '@kbn/i18n'; +import type { ClusterDetails } from '@kbn/es-types'; +import { EuiCallOut, EuiText } from '@elastic/eui'; +import { ShardsView } from './shards_view'; +import { OpenShardFailureFlyoutButton } from './shards_view'; + +interface Props { + clusterDetails: ClusterDetails; +} + +export function ClusterView({ clusterDetails }: Props) { + const clusterFailure = (clusterDetails.failures ?? []).find((failure) => { + return failure.shard < 0; + }); + const shardFailures = (clusterDetails.failures ?? []).filter((failure) => { + return failure.shard >= 0; + }); + + return ( + + {clusterDetails.timed_out ? ( + + ) : null} + + {clusterFailure ? ( + +

+ {clusterFailure.reason.reason + ? `${clusterFailure.reason.type}: "${clusterFailure.reason.reason}"` + : clusterFailure.reason.type} +

+ {clusterFailure.reason.failed_shards ? ( + + ) : null} +
+ ) : null} + + +
+ ); +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/clusters_table.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/clusters_table.tsx new file mode 100644 index 00000000000000..c9fea1a470f49e --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/clusters_table.tsx @@ -0,0 +1,126 @@ +/* + * 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, { useState, ReactNode } from 'react'; +import type { ClusterDetails } from '@kbn/es-types'; +import { i18n } from '@kbn/i18n'; +import { EuiBasicTable, type EuiBasicTableColumn, EuiButtonIcon, EuiText } from '@elastic/eui'; +import { ClusterView } from './cluster_view'; +import { ClusterHealth } from '../clusters_health'; +import { LOCAL_CLUSTER_KEY } from '../local_cluster'; + +function getInitialExpandedRow(clusters: Record) { + const clusterNames = Object.keys(clusters); + return clusterNames.length === 1 + ? { [clusterNames[0]]: } + : {}; +} + +interface ClusterColumn { + name: string; + status: string; + responseTime?: number; +} + +interface Props { + clusters: Record; +} + +export function ClustersTable({ clusters }: Props) { + const [expandedRows, setExpandedRows] = useState>( + getInitialExpandedRow(clusters) + ); + + const toggleDetails = (name: string) => { + const nextExpandedRows = { ...expandedRows }; + if (name in nextExpandedRows) { + delete nextExpandedRows[name]; + } else { + nextExpandedRows[name] = ; + } + setExpandedRows(nextExpandedRows); + }; + + const columns: Array> = [ + { + field: 'name', + name: i18n.translate('inspector.requests.clusters.table.nameLabel', { + defaultMessage: 'Name', + }), + render: (name: string) => { + return ( + <> + toggleDetails(name)} + aria-label={ + name in expandedRows + ? i18n.translate('inspector.requests.clusters.table.collapseRow', { + defaultMessage: 'Collapse table row to hide cluster details', + }) + : i18n.translate('inspector.requests.clusters.table.expandRow', { + defaultMessage: 'Expand table row to view cluster details', + }) + } + iconType={name in expandedRows ? 'arrowDown' : 'arrowRight'} + /> + + {name === LOCAL_CLUSTER_KEY + ? i18n.translate('inspector.requests.clusters.table.localClusterDisplayName', { + defaultMessage: 'Local cluster', + }) + : name} + + + ); + }, + width: '60%', + }, + { + field: 'status', + name: i18n.translate('inspector.requests.clusters.table.statusLabel', { + defaultMessage: 'Status', + }), + render: (status: string) => { + return ; + }, + }, + { + align: 'right' as 'right', + field: 'responseTime', + name: i18n.translate('inspector.requests.clusters.table.responseTimeLabel', { + defaultMessage: 'Response time', + }), + render: (responseTime: number | undefined) => ( + + {responseTime + ? i18n.translate('inspector.requests.clusters.table.responseTimeInMilliseconds', { + defaultMessage: '{responseTime}ms', + values: { responseTime }, + }) + : null} + + ), + }, + ]; + + return ( + { + return { + name: key, + status: clusters[key].status, + responseTime: clusters[key].took, + }; + })} + isExpandable={true} + itemIdToExpandedRowMap={expandedRows} + itemId="name" + columns={columns} + /> + ); +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/index.ts b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/index.ts new file mode 100644 index 00000000000000..33825ff4adda26 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { ClustersTable } from './clusters_table'; diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/__snapshots__/shards_view.test.tsx.snap b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/__snapshots__/shards_view.test.tsx.snap new file mode 100644 index 00000000000000..d361437fd8e91c --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/__snapshots__/shards_view.test.tsx.snap @@ -0,0 +1,89 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`render should not render when no shard details are provided 1`] = `""`; + +exports[`render should render with failures 1`] = ` + + + + +

+ Shards +

+
+
+ + + +
+ + + 2 total shards + + + 1 of 2 successful + + +
+`; + +exports[`render should render with no failures 1`] = ` + + + + +

+ Shards +

+
+
+ + + +
+ + + 2 total shards + + + 2 of 2 successful + + +
+`; diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/index.ts b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/index.ts new file mode 100644 index 00000000000000..5c3988d6ce0917 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { ShardsView } from './shards_view'; +export { OpenShardFailureFlyoutButton } from './open_shard_failure_flyout_button'; diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/open_shard_failure_flyout_button.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/open_shard_failure_flyout_button.tsx new file mode 100644 index 00000000000000..dc90a1873b59bd --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/open_shard_failure_flyout_button.tsx @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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, { useState } from 'react'; +import { estypes } from '@elastic/elasticsearch'; +import { i18n } from '@kbn/i18n'; +import { EuiButtonEmpty } from '@elastic/eui'; +import { ShardFailureFlyout } from './shard_failure_flyout'; + +interface Props { + failures: estypes.ShardFailure[]; +} + +export function OpenShardFailureFlyoutButton({ failures }: Props) { + const [showFailures, setShowFailures] = useState(false); + + return ( + <> + {failures.length ? ( + { + setShowFailures(!showFailures); + }} + size="xs" + > + {i18n.translate('inspector.requests.clusters.shards.openShardFailureFlyoutButtonLabel', { + defaultMessage: + 'View {failedShardCount} failed {failedShardCount, plural, one {shard} other {shards}}', + values: { failedShardCount: failures.length }, + })} + + ) : null} + + {showFailures ? ( + { + setShowFailures(false); + }} + /> + ) : null} + + ); +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_details.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_details.tsx new file mode 100644 index 00000000000000..e6f767f5d9d7a5 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_details.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 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 { estypes } from '@elastic/elasticsearch'; +import { i18n } from '@kbn/i18n'; +import { EuiDescriptionList, EuiCodeBlock, EuiText } from '@elastic/eui'; +import { getFlattenedObject } from '@kbn/std'; + +/** + * Provides pretty formatting of a given key string + * e.g. formats "this_key.is_nice" to "This key is nice" + * @param key + */ +export function formatKey(key: string): string { + const nameCapitalized = key.charAt(0).toUpperCase() + key.slice(1); + return nameCapitalized.replace(/[\._]/g, ' '); +} +/** + * Adds a EuiCodeBlock to values of `script` and `script_stack` key + * Values of other keys are handled a strings + * @param value + * @param key + */ +export function formatValueByKey(value: unknown, key: string): JSX.Element { + if (key === 'script' || key === 'script_stack') { + const valueScript = Array.isArray(value) ? value.join('\n') : String(value); + return ( + + {valueScript} + + ); + } + + return {String(value)}; +} + +interface Props { + failure: estypes.ShardFailure; +} + +export function ShardFailureDetails({ failure }: Props) { + const flattendReason = getFlattenedObject(failure.reason); + + const reasonItems = Object.entries(flattendReason) + .filter(([key]) => key !== 'type') + .map(([key, value]) => ({ + title: formatKey(key), + description: formatValueByKey(value, key), + })); + + const items = [ + { + title: i18n.translate('inspector.requests.clusters.shards.details.nodeLabel', { + defaultMessage: 'Node', + }), + description: formatValueByKey(failure.node, 'node'), + }, + ...reasonItems, + ]; + + return ( + + + + ); +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_flyout.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_flyout.tsx new file mode 100644 index 00000000000000..8749f9764fe749 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_flyout.tsx @@ -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 React from 'react'; +import { estypes } from '@elastic/elasticsearch'; +import { i18n } from '@kbn/i18n'; +import { + EuiButtonIcon, + EuiButtonEmpty, + EuiFlyout, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiTitle, +} from '@elastic/eui'; +import { ShardFailureTable } from './shard_failure_table'; + +interface Props { + failures: estypes.ShardFailure[]; + onClose: () => void; +} + +export function ShardFailureFlyout({ failures, onClose }: Props) { + return ( + + + +

+ + {i18n.translate('inspector.requests.clusters.shards.flyoutTitle', { + defaultMessage: + '{failedShardCount} failured {failedShardCount, plural, one {shard} other {shards}}', + values: { failedShardCount: failures.length }, + })} +

+
+
+ + + + + + + + {i18n.translate('inspector.requests.clusters.shards.backButtonLabel', { + defaultMessage: 'Back', + })} + + +
+ ); +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_table.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_table.tsx new file mode 100644 index 00000000000000..344b17b38a741c --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shard_failure_table.tsx @@ -0,0 +1,117 @@ +/* + * 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, { useState, ReactNode } from 'react'; +import { estypes } from '@elastic/elasticsearch'; +import { i18n } from '@kbn/i18n'; +import { EuiBasicTable, type EuiBasicTableColumn, EuiButtonIcon, EuiText } from '@elastic/eui'; +import { ShardFailureDetails } from './shard_failure_details'; + +function getRowId(failure: estypes.ShardFailure) { + return `${failure.shard}${failure.index}`; +} + +interface ShardRow { + rowId: string; + shard: number; + index?: string; + failureType: string; +} + +interface Props { + failures: estypes.ShardFailure[]; +} + +export function ShardFailureTable({ failures }: Props) { + const [expandedRows, setExpandedRows] = useState>({}); + + const toggleDetails = (rowId: string) => { + const nextExpandedRows = { ...expandedRows }; + if (rowId in nextExpandedRows) { + delete nextExpandedRows[rowId]; + } else { + const shardFailure = failures.find((failure) => rowId === getRowId(failure)); + nextExpandedRows[rowId] = shardFailure ? ( + + ) : null; + } + setExpandedRows(nextExpandedRows); + }; + + const columns: Array> = [ + { + field: 'shard', + name: i18n.translate('inspector.requests.clusters.shards.table.shardLabel', { + defaultMessage: 'Shard', + }), + render: (shard: number, item: ShardRow) => { + return ( + <> + toggleDetails(item.rowId)} + aria-label={ + item.rowId in expandedRows + ? i18n.translate('inspector.requests.clusters.shards.table.collapseRow', { + defaultMessage: 'Collapse table row to hide shard details', + }) + : i18n.translate('inspector.requests.clusters.shards.table.expandRow', { + defaultMessage: 'Expand table row to view shard details', + }) + } + iconType={item.rowId in expandedRows ? 'arrowDown' : 'arrowRight'} + /> + + {shard} + + + ); + }, + width: '20%', + }, + { + field: 'index', + name: i18n.translate('inspector.requests.clusters.shards.table.indexLabel', { + defaultMessage: 'Index', + }), + render: (index?: string) => + index ? ( + + {index} + + ) : null, + }, + { + field: 'failureType', + name: i18n.translate('inspector.requests.clusters.shards.table.failureTypeLabel', { + defaultMessage: 'Failure type', + }), + render: (failureType: string) => ( + + {failureType} + + ), + }, + ]; + + return ( + { + return { + rowId: getRowId(failure), + shard: failure.shard, + index: failure.index, + failureType: failure.reason.type, + }; + })} + isExpandable={true} + itemIdToExpandedRowMap={expandedRows} + itemId="rowId" + columns={columns} + /> + ); +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shards_view.test.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shards_view.test.tsx new file mode 100644 index 00000000000000..14a69c03269f10 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shards_view.test.tsx @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { estypes } from '@elastic/elasticsearch'; +import { shallow } from 'enzyme'; +import { ShardsView } from './shards_view'; + +describe('render', () => { + test('should render with no failures', () => { + const shardStats = { + total: 2, + successful: 2, + skipped: 0, + failed: 0, + }; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); + + test('should render with failures', () => { + const shardStats = { + total: 2, + successful: 1, + skipped: 0, + failed: 1, + }; + const wrapper = shallow( + + ); + expect(wrapper).toMatchSnapshot(); + }); + + test('should not render when no shard details are provided', () => { + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shards_view.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shards_view.tsx new file mode 100644 index 00000000000000..479a71817d96c9 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_table/shards_view/shards_view.tsx @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { estypes } from '@elastic/elasticsearch'; +import { i18n } from '@kbn/i18n'; +import { EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; +import { OpenShardFailureFlyoutButton } from './open_shard_failure_flyout_button'; + +interface Props { + failures: estypes.ShardFailure[]; + shardStats?: estypes.ShardStatistics; +} + +export function ShardsView({ failures, shardStats }: Props) { + return !shardStats && failures.length === 0 ? null : ( + <> + + + +

+ {i18n.translate('inspector.requests.clusters.shards.shardsTitle', { + defaultMessage: 'Shards', + })} +

+
+
+ + + + +
+ + {shardStats ? ( + + + {i18n.translate('inspector.requests.clusters.shards.totalShardsLabel', { + defaultMessage: '{total} total shards', + values: { total: shardStats.total }, + })} + + + {i18n.translate('inspector.requests.clusters.shards.successfulShardsLabel', { + defaultMessage: '{successful} of {total} successful', + values: { + successful: shardStats.successful, + total: shardStats.total, + }, + })} + + + ) : null} + + ); +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_view.test.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_view.test.tsx new file mode 100644 index 00000000000000..971c3bad5bef88 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_view.test.tsx @@ -0,0 +1,116 @@ +/* + * 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 { shallow } from 'enzyme'; +import { ClustersView } from './clusters_view'; +import { Request } from '../../../../../../common/adapters/request/types'; + +describe('shouldShow', () => { + test('should return true when response contains _shards', () => { + const request = { + response: { + json: { + rawResponse: { + _shards: {}, + }, + }, + }, + } as unknown as Request; + expect(ClustersView.shouldShow(request)).toBe(true); + }); + + test('should return true when response contains _clusters', () => { + const request = { + response: { + json: { + rawResponse: { + _clusters: {}, + }, + }, + }, + } as unknown as Request; + expect(ClustersView.shouldShow(request)).toBe(true); + }); + + test('should return false when response does not contains _shards or _clusters', () => { + const request = { + response: { + json: { + rawResponse: {}, + }, + }, + } as unknown as Request; + expect(ClustersView.shouldShow(request)).toBe(false); + }); +}); + +describe('render', () => { + test('should render local cluster details from _shards', () => { + const request = { + response: { + json: { + rawResponse: { + _shards: { + total: 2, + successful: 2, + skipped: 0, + failed: 0, + }, + }, + }, + }, + } as unknown as Request; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); + + test('should render local and remote cluster details from _clusters', () => { + const request = { + response: { + json: { + rawResponse: { + _clusters: { + total: 2, + successful: 2, + skipped: 0, + details: { + '(local)': { + status: 'successful', + indices: 'kibana_sample_data_logs,kibana_sample_data_flights', + took: 0, + timed_out: false, + _shards: { + total: 2, + successful: 2, + skipped: 0, + failed: 0, + }, + }, + remote1: { + status: 'successful', + indices: 'kibana_sample_data_logs,kibana_sample_data_flights', + took: 1, + timed_out: false, + _shards: { + total: 2, + successful: 2, + skipped: 0, + failed: 0, + }, + }, + }, + }, + }, + }, + }, + } as unknown as Request; + const wrapper = shallow(); + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_view.tsx b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_view.tsx new file mode 100644 index 00000000000000..7621bbf842c8d8 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/clusters_view.tsx @@ -0,0 +1,52 @@ +/* + * 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, { Component } from 'react'; +import { estypes } from '@elastic/elasticsearch'; +import { EuiSpacer } from '@elastic/eui'; +import type { ClusterDetails } from '@kbn/es-types'; +import { Request } from '../../../../../../common/adapters/request/types'; +import type { RequestDetailsProps } from '../../types'; +import { getLocalClusterDetails, LOCAL_CLUSTER_KEY } from './local_cluster'; +import { ClustersHealth } from './clusters_health'; +import { ClustersTable } from './clusters_table'; + +export class ClustersView extends Component { + static shouldShow = (request: Request) => + Boolean( + (request.response?.json as { rawResponse?: estypes.SearchResponse })?.rawResponse?._shards || + (request.response?.json as { rawResponse?: estypes.SearchResponse })?.rawResponse?._clusters + ); + + render() { + const rawResponse = ( + this.props.request.response?.json as { rawResponse?: estypes.SearchResponse } + )?.rawResponse; + if (!rawResponse) { + return null; + } + + const clusters = rawResponse._clusters + ? ( + rawResponse._clusters as estypes.ClusterStatistics & { + details: Record; + } + ).details + : { + [LOCAL_CLUSTER_KEY]: getLocalClusterDetails(rawResponse), + }; + + return this.props.request.response?.json ? ( + <> + + + + + ) : null; + } +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/index.ts b/src/plugins/inspector/public/views/requests/components/details/clusters_view/index.ts new file mode 100644 index 00000000000000..f3eb2d611b0d7a --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { ClustersView } from './clusters_view'; diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/local_cluster.ts b/src/plugins/inspector/public/views/requests/components/details/clusters_view/local_cluster.ts new file mode 100644 index 00000000000000..aac2266500bab0 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/local_cluster.ts @@ -0,0 +1,39 @@ +/* + * 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 { estypes } from '@elastic/elasticsearch'; +import type { ClusterDetails } from '@kbn/es-types'; + +export const LOCAL_CLUSTER_KEY = '(local)'; + +function getLocalClusterStatus(rawResponse: estypes.SearchResponse): ClusterDetails['status'] { + if (rawResponse._shards?.successful === 0) { + return 'failed'; + } + + if (rawResponse.timed_out || rawResponse._shards.failed) { + return 'partial'; + } + + return 'successful'; +} + +export function getLocalClusterDetails(rawResponse: estypes.SearchResponse) { + const shards = { + ...rawResponse._shards, + }; + delete shards.failures; + return { + status: getLocalClusterStatus(rawResponse), + indices: '', + took: rawResponse.took, + timed_out: rawResponse.timed_out, + _shards: shards, + failures: rawResponse._shards.failures, + }; +} diff --git a/src/plugins/inspector/public/views/requests/components/details/clusters_view/local_clusters.test.ts b/src/plugins/inspector/public/views/requests/components/details/clusters_view/local_clusters.test.ts new file mode 100644 index 00000000000000..9ef80260b3a3f7 --- /dev/null +++ b/src/plugins/inspector/public/views/requests/components/details/clusters_view/local_clusters.test.ts @@ -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 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 { estypes } from '@elastic/elasticsearch'; +import { getLocalClusterDetails } from './local_cluster'; + +describe('getLocalClusterDetails', () => { + test('should convert local cluster SearchResponseBody into ClusterDetails', () => { + expect( + getLocalClusterDetails({ + took: 14, + timed_out: false, + _shards: { + total: 2, + successful: 1, + skipped: 0, + failed: 1, + failures: [ + { + shard: 0, + index: '.ds-kibana_sample_data_logs-2023.09.20-000001', + node: 'tGUEVPsHR4uhEAdL0oANsA', + reason: { + type: 'query_shard_exception', + reason: + 'failed to create query: [.ds-kibana_sample_data_logs-2023.09.20-000001][0] local shard failure message 123', + index_uuid: 'z31al9BiSk2prpzZED-hTA', + index: '.ds-kibana_sample_data_logs-2023.09.20-000001', + caused_by: { + type: 'runtime_exception', + reason: + '[.ds-kibana_sample_data_logs-2023.09.20-000001][0] local shard failure message 123', + }, + }, + }, + ], + }, + } as unknown as estypes.SearchResponse) + ).toEqual({ + _shards: { + failed: 1, + skipped: 0, + successful: 1, + total: 2, + }, + failures: [ + { + index: '.ds-kibana_sample_data_logs-2023.09.20-000001', + node: 'tGUEVPsHR4uhEAdL0oANsA', + reason: { + caused_by: { + reason: + '[.ds-kibana_sample_data_logs-2023.09.20-000001][0] local shard failure message 123', + type: 'runtime_exception', + }, + index: '.ds-kibana_sample_data_logs-2023.09.20-000001', + index_uuid: 'z31al9BiSk2prpzZED-hTA', + reason: + 'failed to create query: [.ds-kibana_sample_data_logs-2023.09.20-000001][0] local shard failure message 123', + type: 'query_shard_exception', + }, + shard: 0, + }, + ], + indices: '', + status: 'partial', + timed_out: false, + took: 14, + }); + }); +}); diff --git a/src/plugins/inspector/public/views/requests/components/details/index.ts b/src/plugins/inspector/public/views/requests/components/details/index.ts index 61bc021873e6a0..49356d695f47da 100644 --- a/src/plugins/inspector/public/views/requests/components/details/index.ts +++ b/src/plugins/inspector/public/views/requests/components/details/index.ts @@ -9,3 +9,4 @@ export { RequestDetailsRequest } from './req_details_request'; export { RequestDetailsResponse } from './req_details_response'; export { RequestDetailsStats } from './req_details_stats'; +export { ClustersView } from './clusters_view'; diff --git a/src/plugins/inspector/public/views/requests/components/request_details.tsx b/src/plugins/inspector/public/views/requests/components/request_details.tsx index 7292456f848df4..6130e9e33390ae 100644 --- a/src/plugins/inspector/public/views/requests/components/request_details.tsx +++ b/src/plugins/inspector/public/views/requests/components/request_details.tsx @@ -11,7 +11,12 @@ import PropTypes from 'prop-types'; import { i18n } from '@kbn/i18n'; import { EuiTab, EuiTabs } from '@elastic/eui'; -import { RequestDetailsRequest, RequestDetailsResponse, RequestDetailsStats } from './details'; +import { + ClustersView, + RequestDetailsRequest, + RequestDetailsResponse, + RequestDetailsStats, +} from './details'; import { RequestDetailsProps } from './types'; interface RequestDetailsState { @@ -33,6 +38,13 @@ const DETAILS: DetailViewData[] = [ }), component: RequestDetailsStats, }, + { + name: 'clusters', + label: i18n.translate('inspector.requests.clustersTabLabel', { + defaultMessage: 'Clusters', + }), + component: ClustersView, + }, { name: 'Request', label: i18n.translate('inspector.requests.requestTabLabel', { diff --git a/src/plugins/inspector/tsconfig.json b/src/plugins/inspector/tsconfig.json index 3417096596015c..9c5654be262496 100644 --- a/src/plugins/inspector/tsconfig.json +++ b/src/plugins/inspector/tsconfig.json @@ -14,6 +14,9 @@ "@kbn/monaco", "@kbn/core-ui-settings-browser-mocks", "@kbn/core-ui-settings-browser", + "@kbn/std", + "@kbn/es-types", + "@kbn/ui-theme" ], "exclude": [ "target/**/*", diff --git a/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap b/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap index 453d20385e7062..656a59a6425f61 100644 --- a/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap +++ b/src/plugins/kibana_overview/public/components/overview/__snapshots__/overview.test.tsx.snap @@ -711,6 +711,7 @@ exports[`Overview renders correctly when there is no user data view 1`] = ` dataViewEditor={ Object { "IndexPatternEditorComponent": [MockFunction], + "dataViewEditorServiceFactory": [MockFunction], "openEditor": [MockFunction], "userPermissions": Object { "editDataView": [MockFunction], diff --git a/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx b/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx index aad1734dff6576..d660a8bf2857ad 100644 --- a/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx +++ b/src/plugins/saved_objects_finder/public/finder/saved_object_finder.tsx @@ -75,6 +75,7 @@ interface BaseSavedObjectFinder { savedObjectMetaData: Array>; showFilter?: boolean; leftChildren?: ReactElement | ReactElement[]; + children?: ReactElement | ReactElement[]; helpText?: string; } diff --git a/src/plugins/unified_histogram/public/__mocks__/lens_adapters.ts b/src/plugins/unified_histogram/public/__mocks__/lens_adapters.ts new file mode 100644 index 00000000000000..87e7f782f1bd88 --- /dev/null +++ b/src/plugins/unified_histogram/public/__mocks__/lens_adapters.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 { UnifiedHistogramChartLoadEvent } from '../types'; + +export const lensAdaptersMock = { + tables: { + tables: { + default: { + columns: [ + { + id: 'col-0-1', + meta: { + dimensionName: 'Slice size', + type: 'number', + }, + name: 'Field 1', + }, + { + id: 'col-0-2', + meta: { + dimensionName: 'Slice', + type: 'number', + }, + name: 'Field 2', + }, + ], + rows: [ + { + 'col-0-1': 0, + 'col-0-2': 0, + 'col-0-3': 0, + 'col-0-4': 0, + }, + ], + type: 'datatable', + }, + }, + }, +} as unknown as UnifiedHistogramChartLoadEvent['adapters']; diff --git a/src/plugins/unified_histogram/public/__mocks__/lens_table_adapter.ts b/src/plugins/unified_histogram/public/__mocks__/lens_table_adapter.ts deleted file mode 100644 index 60e38fecbbfaea..00000000000000 --- a/src/plugins/unified_histogram/public/__mocks__/lens_table_adapter.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { Datatable } from '@kbn/expressions-plugin/common'; - -export const lensTablesAdapterMock: Record = { - default: { - columns: [ - { - id: 'col-0-1', - meta: { - dimensionName: 'Slice size', - type: 'number', - }, - name: 'Field 1', - }, - { - id: 'col-0-2', - meta: { - dimensionName: 'Slice', - type: 'number', - }, - name: 'Field 2', - }, - ], - rows: [ - { - 'col-0-1': 0, - 'col-0-2': 0, - 'col-0-3': 0, - 'col-0-4': 0, - }, - ], - type: 'datatable', - }, -}; diff --git a/src/plugins/unified_histogram/public/chart/chart.tsx b/src/plugins/unified_histogram/public/chart/chart.tsx index 56b6ed223df2bf..42f3d565847891 100644 --- a/src/plugins/unified_histogram/public/chart/chart.tsx +++ b/src/plugins/unified_histogram/public/chart/chart.tsx @@ -7,6 +7,7 @@ */ import React, { ReactElement, useMemo, useState, useEffect, useCallback, memo } from 'react'; +import type { Observable } from 'rxjs'; import { EuiButtonIcon, EuiContextMenu, @@ -17,8 +18,11 @@ import { EuiProgress, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { EmbeddableComponentProps, Suggestion } from '@kbn/lens-plugin/public'; -import type { Datatable } from '@kbn/expressions-plugin/common'; +import type { + EmbeddableComponentProps, + Suggestion, + LensEmbeddableOutput, +} from '@kbn/lens-plugin/public'; import { DataView, DataViewField, DataViewType } from '@kbn/data-views-plugin/public'; import type { LensEmbeddableInput } from '@kbn/lens-plugin/public'; import type { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query'; @@ -69,7 +73,8 @@ export interface ChartProps { disableTriggers?: LensEmbeddableInput['disableTriggers']; disabledActions?: LensEmbeddableInput['disabledActions']; input$?: UnifiedHistogramInput$; - lensTablesAdapter?: Record; + lensAdapters?: UnifiedHistogramChartLoadEvent['adapters']; + lensEmbeddableOutput$?: Observable; isOnHistogramMode?: boolean; isChartLoading?: boolean; onResetChartHeight?: () => void; @@ -107,7 +112,8 @@ export function Chart({ disableTriggers, disabledActions, input$: originalInput$, - lensTablesAdapter, + lensAdapters, + lensEmbeddableOutput$, isOnHistogramMode, isChartLoading, onResetChartHeight, @@ -463,8 +469,8 @@ export function Chart({ {...{ services, lensAttributesContext, - dataView, - lensTablesAdapter, + lensAdapters, + lensEmbeddableOutput$, currentSuggestion, isFlyoutVisible, setIsFlyoutVisible, diff --git a/src/plugins/unified_histogram/public/chart/chart_config_panel.test.tsx b/src/plugins/unified_histogram/public/chart/chart_config_panel.test.tsx index ef673826672eaf..5238fc0ac12bb4 100644 --- a/src/plugins/unified_histogram/public/chart/chart_config_panel.test.tsx +++ b/src/plugins/unified_histogram/public/chart/chart_config_panel.test.tsx @@ -13,7 +13,7 @@ import { act } from 'react-dom/test-utils'; import { setTimeout } from 'timers/promises'; import { dataViewWithTimefieldMock } from '../__mocks__/data_view_with_timefield'; import { unifiedHistogramServicesMock } from '../__mocks__/services'; -import { lensTablesAdapterMock } from '../__mocks__/lens_table_adapter'; +import { lensAdaptersMock } from '../__mocks__/lens_adapters'; import { ChartConfigPanel } from './chart_config_panel'; import type { LensAttributesContext } from './utils/get_lens_attributes'; @@ -34,7 +34,7 @@ describe('ChartConfigPanel', () => { isFlyoutVisible: true, setIsFlyoutVisible: jest.fn(), isPlainRecord: true, - lensTablesAdapter: lensTablesAdapterMock, + lensAdapters: lensAdaptersMock, query: { esql: 'from test', }, diff --git a/src/plugins/unified_histogram/public/chart/chart_config_panel.tsx b/src/plugins/unified_histogram/public/chart/chart_config_panel.tsx index c3faacd5b9a404..486ea7da798722 100644 --- a/src/plugins/unified_histogram/public/chart/chart_config_panel.tsx +++ b/src/plugins/unified_histogram/public/chart/chart_config_panel.tsx @@ -6,20 +6,20 @@ * Side Public License, v 1. */ import React, { useCallback, useEffect, useRef, useState } from 'react'; +import type { Observable } from 'rxjs'; import type { AggregateQuery, Query } from '@kbn/es-query'; import { isEqual } from 'lodash'; -import type { Suggestion } from '@kbn/lens-plugin/public'; -import type { DataView } from '@kbn/data-views-plugin/public'; +import type { LensEmbeddableOutput, Suggestion } from '@kbn/lens-plugin/public'; import type { Datatable } from '@kbn/expressions-plugin/common'; -import type { UnifiedHistogramServices } from '../types'; +import type { UnifiedHistogramServices, UnifiedHistogramChartLoadEvent } from '../types'; import type { LensAttributesContext } from './utils/get_lens_attributes'; export function ChartConfigPanel({ services, lensAttributesContext, - dataView, - lensTablesAdapter, + lensAdapters, + lensEmbeddableOutput$, currentSuggestion, isFlyoutVisible, setIsFlyoutVisible, @@ -29,10 +29,10 @@ export function ChartConfigPanel({ }: { services: UnifiedHistogramServices; lensAttributesContext: LensAttributesContext; - dataView: DataView; isFlyoutVisible: boolean; setIsFlyoutVisible: (flag: boolean) => void; - lensTablesAdapter?: Record; + lensAdapters?: UnifiedHistogramChartLoadEvent['adapters']; + lensEmbeddableOutput$?: Observable; currentSuggestion?: Suggestion; isPlainRecord?: boolean; query?: Query | AggregateQuery; @@ -49,26 +49,25 @@ export function ChartConfigPanel({ ...(datasourceState && { datasourceState }), ...(visualizationState && { visualizationState }), } as Suggestion; - if (!isEqual(updatedSuggestion, currentSuggestion)) { - onSuggestionChange?.(updatedSuggestion); - } + onSuggestionChange?.(updatedSuggestion); }, [currentSuggestion, onSuggestionChange] ); useEffect(() => { + const tablesAdapters = lensAdapters?.tables?.tables; const dataHasChanged = - Boolean(lensTablesAdapter) && - !isEqual(previousAdapters.current, lensTablesAdapter) && + Boolean(tablesAdapters) && + !isEqual(previousAdapters.current, tablesAdapters) && query !== previousQuery?.current; async function fetchLensConfigComponent() { const Component = await services.lens.EditLensConfigPanelApi(); const panel = ( { setIsFlyoutVisible(false); }} @@ -78,7 +77,7 @@ export function ChartConfigPanel({ ); setEditLensConfigPanel(panel); previousSuggestion.current = currentSuggestion; - previousAdapters.current = lensTablesAdapter; + previousAdapters.current = tablesAdapters; if (dataHasChanged) { previousQuery.current = query; } @@ -92,14 +91,14 @@ export function ChartConfigPanel({ }, [ lensAttributesContext.attributes, services.lens, - dataView, updateSuggestion, isPlainRecord, currentSuggestion, query, isFlyoutVisible, - lensTablesAdapter, setIsFlyoutVisible, + lensAdapters, + lensEmbeddableOutput$, ]); return isPlainRecord ? editLensConfigPanel : null; diff --git a/src/plugins/unified_histogram/public/chart/histogram.test.tsx b/src/plugins/unified_histogram/public/chart/histogram.test.tsx index 78f06687a0e7e1..8fd749051f2ce0 100644 --- a/src/plugins/unified_histogram/public/chart/histogram.test.tsx +++ b/src/plugins/unified_histogram/public/chart/histogram.test.tsx @@ -8,6 +8,7 @@ import { mountWithIntl } from '@kbn/test-jest-helpers'; import { Histogram } from './histogram'; import React from 'react'; +import { of } from 'rxjs'; import { unifiedHistogramServicesMock } from '../__mocks__/services'; import { dataViewWithTimefieldMock } from '../__mocks__/data_view_with_timefield'; import { createDefaultInspectorAdapters } from '@kbn/expressions-plugin/common'; @@ -166,24 +167,25 @@ describe('Histogram', () => { jest .spyOn(adapters.requests, 'getRequests') .mockReturnValue([{ response: { json: { rawResponse } } } as any]); - onLoad(true, undefined); + const embeddableOutput$ = jest.fn().mockReturnValue(of('output$')); + onLoad(true, undefined, embeddableOutput$); expect(props.onTotalHitsChange).toHaveBeenLastCalledWith( UnifiedHistogramFetchStatus.loading, undefined ); - expect(props.onChartLoad).toHaveBeenLastCalledWith({ adapters: {} }); + expect(props.onChartLoad).toHaveBeenLastCalledWith({ adapters: {}, embeddableOutput$ }); expect(buildBucketInterval.buildBucketInterval).not.toHaveBeenCalled(); expect(useTimeRange.useTimeRange).toHaveBeenLastCalledWith( expect.objectContaining({ bucketInterval: undefined }) ); act(() => { - onLoad(false, adapters); + onLoad(false, adapters, embeddableOutput$); }); expect(props.onTotalHitsChange).toHaveBeenLastCalledWith( UnifiedHistogramFetchStatus.complete, 100 ); - expect(props.onChartLoad).toHaveBeenLastCalledWith({ adapters }); + expect(props.onChartLoad).toHaveBeenLastCalledWith({ adapters, embeddableOutput$ }); expect(buildBucketInterval.buildBucketInterval).toHaveBeenCalled(); expect(useTimeRange.useTimeRange).toHaveBeenLastCalledWith( expect.objectContaining({ bucketInterval: mockBucketInterval }) diff --git a/src/plugins/unified_histogram/public/chart/histogram.tsx b/src/plugins/unified_histogram/public/chart/histogram.tsx index 0046e0b6a87bd3..1d91b2a505174c 100644 --- a/src/plugins/unified_histogram/public/chart/histogram.tsx +++ b/src/plugins/unified_histogram/public/chart/histogram.tsx @@ -14,7 +14,11 @@ import type { DefaultInspectorAdapters, Datatable } from '@kbn/expressions-plugi import type { IKibanaSearchResponse } from '@kbn/data-plugin/public'; import type { estypes } from '@elastic/elasticsearch'; import type { TimeRange } from '@kbn/es-query'; -import type { EmbeddableComponentProps, LensEmbeddableInput } from '@kbn/lens-plugin/public'; +import type { + EmbeddableComponentProps, + LensEmbeddableInput, + LensEmbeddableOutput, +} from '@kbn/lens-plugin/public'; import { RequestStatus } from '@kbn/inspector-plugin/public'; import type { Observable } from 'rxjs'; import { @@ -118,7 +122,11 @@ export function Histogram({ }, [attributes, containerHeight, containerWidth]); const onLoad = useStableCallback( - (isLoading: boolean, adapters: Partial | undefined) => { + ( + isLoading: boolean, + adapters: Partial | undefined, + lensEmbeddableOutput$?: Observable + ) => { const lensRequest = adapters?.requests?.getRequests()[0]; const requestFailed = lensRequest?.status === RequestStatus.ERROR; const json = lensRequest?.response?.json as @@ -155,7 +163,7 @@ export function Histogram({ setBucketInterval(newBucketInterval); } - onChartLoad?.({ adapters: adapters ?? {} }); + onChartLoad?.({ adapters: adapters ?? {}, embeddableOutput$: lensEmbeddableOutput$ }); } ); diff --git a/src/plugins/unified_histogram/public/container/hooks/use_state_props.test.ts b/src/plugins/unified_histogram/public/container/hooks/use_state_props.test.ts index c9ab0d5220aedb..d32235f06f356c 100644 --- a/src/plugins/unified_histogram/public/container/hooks/use_state_props.test.ts +++ b/src/plugins/unified_histogram/public/container/hooks/use_state_props.test.ts @@ -5,7 +5,6 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ - import { DataView, DataViewField, DataViewType } from '@kbn/data-views-plugin/common'; import { RequestAdapter } from '@kbn/inspector-plugin/common'; import { Suggestion } from '@kbn/lens-plugin/public'; @@ -15,7 +14,7 @@ import { UnifiedHistogramFetchStatus } from '../../types'; import { dataViewMock } from '../../__mocks__/data_view'; import { dataViewWithTimefieldMock } from '../../__mocks__/data_view_with_timefield'; import { currentSuggestionMock } from '../../__mocks__/suggestions'; -import { lensTablesAdapterMock } from '../../__mocks__/lens_table_adapter'; +import { lensAdaptersMock } from '../../__mocks__/lens_adapters'; import { unifiedHistogramServicesMock } from '../../__mocks__/services'; import { createStateService, @@ -29,7 +28,7 @@ describe('useStateProps', () => { breakdownField: 'bytes', chartHidden: false, lensRequestAdapter: new RequestAdapter(), - lensTablesAdapter: lensTablesAdapterMock, + lensAdapters: lensAdaptersMock, timeInterval: 'auto', topPanelHeight: 100, totalHitsStatus: UnifiedHistogramFetchStatus.uninitialized, @@ -84,37 +83,42 @@ describe('useStateProps', () => { "total": undefined, }, "isPlainRecord": false, - "lensTablesAdapter": Object { - "default": Object { - "columns": Array [ - Object { - "id": "col-0-1", - "meta": Object { - "dimensionName": "Slice size", - "type": "number", - }, - "name": "Field 1", - }, - Object { - "id": "col-0-2", - "meta": Object { - "dimensionName": "Slice", - "type": "number", - }, - "name": "Field 2", - }, - ], - "rows": Array [ - Object { - "col-0-1": 0, - "col-0-2": 0, - "col-0-3": 0, - "col-0-4": 0, + "lensAdapters": Object { + "tables": Object { + "tables": Object { + "default": Object { + "columns": Array [ + Object { + "id": "col-0-1", + "meta": Object { + "dimensionName": "Slice size", + "type": "number", + }, + "name": "Field 1", + }, + Object { + "id": "col-0-2", + "meta": Object { + "dimensionName": "Slice", + "type": "number", + }, + "name": "Field 2", + }, + ], + "rows": Array [ + Object { + "col-0-1": 0, + "col-0-2": 0, + "col-0-3": 0, + "col-0-4": 0, + }, + ], + "type": "datatable", }, - ], - "type": "datatable", + }, }, }, + "lensEmbeddableOutput$": undefined, "onBreakdownFieldChange": [Function], "onChartHiddenChange": [Function], "onChartLoad": [Function], @@ -159,37 +163,42 @@ describe('useStateProps', () => { "total": undefined, }, "isPlainRecord": true, - "lensTablesAdapter": Object { - "default": Object { - "columns": Array [ - Object { - "id": "col-0-1", - "meta": Object { - "dimensionName": "Slice size", - "type": "number", - }, - "name": "Field 1", - }, - Object { - "id": "col-0-2", - "meta": Object { - "dimensionName": "Slice", - "type": "number", - }, - "name": "Field 2", - }, - ], - "rows": Array [ - Object { - "col-0-1": 0, - "col-0-2": 0, - "col-0-3": 0, - "col-0-4": 0, + "lensAdapters": Object { + "tables": Object { + "tables": Object { + "default": Object { + "columns": Array [ + Object { + "id": "col-0-1", + "meta": Object { + "dimensionName": "Slice size", + "type": "number", + }, + "name": "Field 1", + }, + Object { + "id": "col-0-2", + "meta": Object { + "dimensionName": "Slice", + "type": "number", + }, + "name": "Field 2", + }, + ], + "rows": Array [ + Object { + "col-0-1": 0, + "col-0-2": 0, + "col-0-3": 0, + "col-0-4": 0, + }, + ], + "type": "datatable", }, - ], - "type": "datatable", + }, }, }, + "lensEmbeddableOutput$": undefined, "onBreakdownFieldChange": [Function], "onChartHiddenChange": [Function], "onChartLoad": [Function], @@ -255,37 +264,42 @@ describe('useStateProps', () => { "total": undefined, }, "isPlainRecord": false, - "lensTablesAdapter": Object { - "default": Object { - "columns": Array [ - Object { - "id": "col-0-1", - "meta": Object { - "dimensionName": "Slice size", - "type": "number", - }, - "name": "Field 1", + "lensAdapters": Object { + "tables": Object { + "tables": Object { + "default": Object { + "columns": Array [ + Object { + "id": "col-0-1", + "meta": Object { + "dimensionName": "Slice size", + "type": "number", + }, + "name": "Field 1", + }, + Object { + "id": "col-0-2", + "meta": Object { + "dimensionName": "Slice", + "type": "number", + }, + "name": "Field 2", + }, + ], + "rows": Array [ + Object { + "col-0-1": 0, + "col-0-2": 0, + "col-0-3": 0, + "col-0-4": 0, + }, + ], + "type": "datatable", }, - Object { - "id": "col-0-2", - "meta": Object { - "dimensionName": "Slice", - "type": "number", - }, - "name": "Field 2", - }, - ], - "rows": Array [ - Object { - "col-0-1": 0, - "col-0-2": 0, - "col-0-3": 0, - "col-0-4": 0, - }, - ], - "type": "datatable", + }, }, }, + "lensEmbeddableOutput$": undefined, "onBreakdownFieldChange": [Function], "onChartHiddenChange": [Function], "onChartLoad": [Function], @@ -327,37 +341,42 @@ describe('useStateProps', () => { "total": undefined, }, "isPlainRecord": false, - "lensTablesAdapter": Object { - "default": Object { - "columns": Array [ - Object { - "id": "col-0-1", - "meta": Object { - "dimensionName": "Slice size", - "type": "number", - }, - "name": "Field 1", - }, - Object { - "id": "col-0-2", - "meta": Object { - "dimensionName": "Slice", - "type": "number", - }, - "name": "Field 2", - }, - ], - "rows": Array [ - Object { - "col-0-1": 0, - "col-0-2": 0, - "col-0-3": 0, - "col-0-4": 0, + "lensAdapters": Object { + "tables": Object { + "tables": Object { + "default": Object { + "columns": Array [ + Object { + "id": "col-0-1", + "meta": Object { + "dimensionName": "Slice size", + "type": "number", + }, + "name": "Field 1", + }, + Object { + "id": "col-0-2", + "meta": Object { + "dimensionName": "Slice", + "type": "number", + }, + "name": "Field 2", + }, + ], + "rows": Array [ + Object { + "col-0-1": 0, + "col-0-2": 0, + "col-0-3": 0, + "col-0-4": 0, + }, + ], + "type": "datatable", }, - ], - "type": "datatable", + }, }, }, + "lensEmbeddableOutput$": undefined, "onBreakdownFieldChange": [Function], "onChartHiddenChange": [Function], "onChartLoad": [Function], diff --git a/src/plugins/unified_histogram/public/container/hooks/use_state_props.ts b/src/plugins/unified_histogram/public/container/hooks/use_state_props.ts index a5845731cf12ed..d78afc50c15f57 100644 --- a/src/plugins/unified_histogram/public/container/hooks/use_state_props.ts +++ b/src/plugins/unified_histogram/public/container/hooks/use_state_props.ts @@ -23,7 +23,8 @@ import { timeIntervalSelector, totalHitsResultSelector, totalHitsStatusSelector, - lensTablesAdapterSelector, + lensAdaptersSelector, + lensEmbeddableOutputSelector$, } from '../utils/state_selectors'; import { useStateSelector } from '../utils/use_state_selector'; @@ -45,7 +46,11 @@ export const useStateProps = ({ const timeInterval = useStateSelector(stateService?.state$, timeIntervalSelector); const totalHitsResult = useStateSelector(stateService?.state$, totalHitsResultSelector); const totalHitsStatus = useStateSelector(stateService?.state$, totalHitsStatusSelector); - const lensTablesAdapter = useStateSelector(stateService?.state$, lensTablesAdapterSelector); + const lensAdapters = useStateSelector(stateService?.state$, lensAdaptersSelector); + const lensEmbeddableOutput$ = useStateSelector( + stateService?.state$, + lensEmbeddableOutputSelector$ + ); /** * Contexts */ @@ -140,7 +145,8 @@ export const useStateProps = ({ (event: UnifiedHistogramChartLoadEvent) => { // We need to store the Lens request adapter in order to inspect its requests stateService?.setLensRequestAdapter(event.adapters.requests); - stateService?.setLensTablesAdapter(event.adapters.tables?.tables); + stateService?.setLensAdapters(event.adapters); + stateService?.setLensEmbeddableOutput$(event.embeddableOutput$); }, [stateService] ); @@ -176,7 +182,8 @@ export const useStateProps = ({ breakdown, request, isPlainRecord, - lensTablesAdapter, + lensAdapters, + lensEmbeddableOutput$, onTopPanelHeightChange, onTimeIntervalChange, onTotalHitsChange, diff --git a/src/plugins/unified_histogram/public/container/services/state_service.test.ts b/src/plugins/unified_histogram/public/container/services/state_service.test.ts index eb7232e889037d..73a493e167c194 100644 --- a/src/plugins/unified_histogram/public/container/services/state_service.test.ts +++ b/src/plugins/unified_histogram/public/container/services/state_service.test.ts @@ -9,7 +9,7 @@ import { RequestAdapter } from '@kbn/inspector-plugin/common'; import { UnifiedHistogramFetchStatus } from '../..'; import { unifiedHistogramServicesMock } from '../../__mocks__/services'; -import { lensTablesAdapterMock } from '../../__mocks__/lens_table_adapter'; +import { lensAdaptersMock } from '../../__mocks__/lens_adapters'; import { getChartHidden, getTopPanelHeight, @@ -47,7 +47,7 @@ describe('UnifiedHistogramStateService', () => { breakdownField: 'bytes', chartHidden: false, lensRequestAdapter: new RequestAdapter(), - lensTablesAdapter: lensTablesAdapterMock, + lensAdapters: lensAdaptersMock, timeInterval: 'auto', topPanelHeight: 100, totalHitsStatus: UnifiedHistogramFetchStatus.uninitialized, @@ -136,8 +136,11 @@ describe('UnifiedHistogramStateService', () => { expect(state).toEqual(newState); stateService.setLensRequestAdapter(undefined); newState = { ...newState, lensRequestAdapter: undefined }; - stateService.setLensTablesAdapter(undefined); - newState = { ...newState, lensTablesAdapter: undefined }; + stateService.setLensAdapters(undefined); + newState = { ...newState, lensAdapters: undefined }; + expect(state).toEqual(newState); + stateService.setLensEmbeddableOutput$(undefined); + newState = { ...newState, lensEmbeddableOutput$: undefined }; expect(state).toEqual(newState); stateService.setTotalHits({ totalHitsStatus: UnifiedHistogramFetchStatus.complete, diff --git a/src/plugins/unified_histogram/public/container/services/state_service.ts b/src/plugins/unified_histogram/public/container/services/state_service.ts index 4cb29507630944..f96a4b5b7b033e 100644 --- a/src/plugins/unified_histogram/public/container/services/state_service.ts +++ b/src/plugins/unified_histogram/public/container/services/state_service.ts @@ -7,11 +7,10 @@ */ import type { RequestAdapter } from '@kbn/inspector-plugin/common'; -import type { Suggestion } from '@kbn/lens-plugin/public'; -import type { Datatable } from '@kbn/expressions-plugin/common'; +import type { LensEmbeddableOutput, Suggestion } from '@kbn/lens-plugin/public'; import { BehaviorSubject, Observable } from 'rxjs'; import { UnifiedHistogramFetchStatus } from '../..'; -import type { UnifiedHistogramServices } from '../../types'; +import type { UnifiedHistogramServices, UnifiedHistogramChartLoadEvent } from '../../types'; import { getBreakdownField, getChartHidden, @@ -42,9 +41,13 @@ export interface UnifiedHistogramState { */ lensRequestAdapter: RequestAdapter | undefined; /** - * The current Lens request table + * The current Lens adapters */ - lensTablesAdapter?: Record; + lensAdapters?: UnifiedHistogramChartLoadEvent['adapters']; + /** + * Lens embeddable output observable + */ + lensEmbeddableOutput$?: Observable; /** * The current time interval of the chart */ @@ -114,9 +117,12 @@ export interface UnifiedHistogramStateService { */ setLensRequestAdapter: (lensRequestAdapter: RequestAdapter | undefined) => void; /** - * Sets the current Lens tables + * Sets the current Lens adapters */ - setLensTablesAdapter: (lensTablesAdapter: Record | undefined) => void; + setLensAdapters: (lensAdapters: UnifiedHistogramChartLoadEvent['adapters'] | undefined) => void; + setLensEmbeddableOutput$: ( + lensEmbeddableOutput$: Observable | undefined + ) => void; /** * Sets the current total hits status and result */ @@ -198,8 +204,13 @@ export const createStateService = ( updateState({ lensRequestAdapter }); }, - setLensTablesAdapter: (lensTablesAdapter: Record | undefined) => { - updateState({ lensTablesAdapter }); + setLensAdapters: (lensAdapters: UnifiedHistogramChartLoadEvent['adapters'] | undefined) => { + updateState({ lensAdapters }); + }, + setLensEmbeddableOutput$: ( + lensEmbeddableOutput$: Observable | undefined + ) => { + updateState({ lensEmbeddableOutput$ }); }, setTotalHits: (totalHits: { diff --git a/src/plugins/unified_histogram/public/container/utils/state_selectors.ts b/src/plugins/unified_histogram/public/container/utils/state_selectors.ts index 80e809f4fc38fd..f0707cdbe747ed 100644 --- a/src/plugins/unified_histogram/public/container/utils/state_selectors.ts +++ b/src/plugins/unified_histogram/public/container/utils/state_selectors.ts @@ -15,4 +15,6 @@ export const topPanelHeightSelector = (state: UnifiedHistogramState) => state.to export const totalHitsResultSelector = (state: UnifiedHistogramState) => state.totalHitsResult; export const totalHitsStatusSelector = (state: UnifiedHistogramState) => state.totalHitsStatus; export const currentSuggestionSelector = (state: UnifiedHistogramState) => state.currentSuggestion; -export const lensTablesAdapterSelector = (state: UnifiedHistogramState) => state.lensTablesAdapter; +export const lensAdaptersSelector = (state: UnifiedHistogramState) => state.lensAdapters; +export const lensEmbeddableOutputSelector$ = (state: UnifiedHistogramState) => + state.lensEmbeddableOutput$; diff --git a/src/plugins/unified_histogram/public/layout/layout.tsx b/src/plugins/unified_histogram/public/layout/layout.tsx index e3c80679c5c3f6..014495427f30a3 100644 --- a/src/plugins/unified_histogram/public/layout/layout.tsx +++ b/src/plugins/unified_histogram/public/layout/layout.tsx @@ -9,13 +9,15 @@ import { EuiSpacer, useEuiTheme, useIsWithinBreakpoints } from '@elastic/eui'; import { PropsWithChildren, ReactElement, RefObject } from 'react'; import React, { useMemo } from 'react'; +import { Observable } from 'rxjs'; import { createHtmlPortalNode, InPortal, OutPortal } from 'react-reverse-portal'; import { css } from '@emotion/css'; -import type { Datatable, DatatableColumn } from '@kbn/expressions-plugin/common'; +import type { DatatableColumn } from '@kbn/expressions-plugin/common'; import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import type { EmbeddableComponentProps, LensEmbeddableInput, + LensEmbeddableOutput, LensSuggestionsApi, Suggestion, } from '@kbn/lens-plugin/public'; @@ -83,7 +85,8 @@ export interface UnifiedHistogramLayoutProps extends PropsWithChildren * Context object for the hits count -- leave undefined to hide the hits count */ hits?: UnifiedHistogramHitsContext; - lensTablesAdapter?: Record; + lensAdapters?: UnifiedHistogramChartLoadEvent['adapters']; + lensEmbeddableOutput$?: Observable; /** * Context object for the chart -- leave undefined to hide the chart */ @@ -185,7 +188,8 @@ export const UnifiedHistogramLayout = ({ columns, request, hits, - lensTablesAdapter, + lensAdapters, + lensEmbeddableOutput$, chart: originalChart, breakdown, resizeRef, @@ -294,7 +298,8 @@ export const UnifiedHistogramLayout = ({ onChartLoad={onChartLoad} onFilter={onFilter} onBrushEnd={onBrushEnd} - lensTablesAdapter={lensTablesAdapter} + lensAdapters={lensAdapters} + lensEmbeddableOutput$={lensEmbeddableOutput$} isOnHistogramMode={isOnHistogramMode} withDefaultActions={withDefaultActions} /> diff --git a/src/plugins/unified_histogram/public/types.ts b/src/plugins/unified_histogram/public/types.ts index 803c74304a3a6d..3ba27f7c5b26e9 100644 --- a/src/plugins/unified_histogram/public/types.ts +++ b/src/plugins/unified_histogram/public/types.ts @@ -9,11 +9,11 @@ import type { IUiSettingsClient, Capabilities } from '@kbn/core/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; -import type { LensPublicStart } from '@kbn/lens-plugin/public'; +import type { LensEmbeddableOutput, LensPublicStart } from '@kbn/lens-plugin/public'; import type { DataViewField } from '@kbn/data-views-plugin/public'; import type { RequestAdapter } from '@kbn/inspector-plugin/public'; import type { DefaultInspectorAdapters } from '@kbn/expressions-plugin/common'; -import type { Subject } from 'rxjs'; +import type { Observable, Subject } from 'rxjs'; import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import type { Storage } from '@kbn/kibana-utils-plugin/public'; import type { ExpressionsStart } from '@kbn/expressions-plugin/public'; @@ -65,6 +65,10 @@ export interface UnifiedHistogramChartLoadEvent { * Inspector adapters for the request */ adapters: UnifiedHistogramAdapters; + /** + * Observable of the lens embeddable output + */ + embeddableOutput$?: Observable; } /** diff --git a/test/functional/apps/console/_autocomplete.ts b/test/functional/apps/console/_autocomplete.ts index dd2e5a131efea8..2f9d8db9cf9d20 100644 --- a/test/functional/apps/console/_autocomplete.ts +++ b/test/functional/apps/console/_autocomplete.ts @@ -213,11 +213,10 @@ GET _search 'pressRight', 'pressLeft', 'pressLeft', - ]; + ] as const; for (const keyPress of keyPresses) { await PageObjects.console.sleepForDebouncePeriod(); log.debug('Key', keyPress); - // @ts-ignore await PageObjects.console[keyPress](); expect(await PageObjects.console.isAutocompleteVisible()).to.be.eql(false); } @@ -258,7 +257,7 @@ GET _search for (const char of [method.at(-1), ' ', '_']) { await PageObjects.console.sleepForDebouncePeriod(); log.debug('Key type "%s"', char); - await PageObjects.console.enterText(char ?? ''); // e.g. 'Post ' -> 'Post _' + await PageObjects.console.enterText(char!); // e.g. 'Post ' -> 'Post _' } await retry.waitFor('autocomplete to be visible', () => diff --git a/test/functional/apps/dashboard/group3/copy_panel_to.ts b/test/functional/apps/dashboard/group3/copy_panel_to.ts index dbafa5d68b5e8a..3c6fa6d790eaf6 100644 --- a/test/functional/apps/dashboard/group3/copy_panel_to.ts +++ b/test/functional/apps/dashboard/group3/copy_panel_to.ts @@ -14,7 +14,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardPanelActions = getService('dashboardPanelActions'); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); - const find = getService('find'); const PageObjects = getPageObjects([ 'header', diff --git a/test/functional/services/dashboard/panel_actions.ts b/test/functional/services/dashboard/panel_actions.ts index f81ddf9d69bb5c..65e5904f14f808 100644 --- a/test/functional/services/dashboard/panel_actions.ts +++ b/test/functional/services/dashboard/panel_actions.ts @@ -11,6 +11,8 @@ import { FtrService } from '../../ftr_provider_context'; const REMOVE_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-deletePanel'; const EDIT_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-editPanel'; +const INLINE_EDIT_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-ACTION_CONFIGURE_IN_LENS'; +const EDIT_IN_LENS_EDITOR_DATA_TEST_SUBJ = 'navigateToLensEditorLink'; const REPLACE_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-replacePanel'; const CLONE_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-clonePanel'; const TOGGLE_EXPAND_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-togglePanel'; @@ -87,16 +89,53 @@ export class DashboardPanelActionsService extends FtrService { await this.clickContextMenuMoreItem(); } + private async navigateToEditorFromFlyout() { + await this.testSubjects.clickWhenNotDisabledWithoutRetry(INLINE_EDIT_PANEL_DATA_TEST_SUBJ); + await this.header.waitUntilLoadingHasFinished(); + await this.testSubjects.click(EDIT_IN_LENS_EDITOR_DATA_TEST_SUBJ); + const isConfirmModalVisible = await this.testSubjects.exists('confirmModalConfirmButton'); + if (isConfirmModalVisible) { + await this.testSubjects.click('confirmModalConfirmButton', 20000); + } + } + + async clickInlineEdit() { + this.log.debug('clickInlineEditAction'); + await this.expectContextMenuToBeOpen(); + const isInlineEditingActionVisible = await this.testSubjects.exists( + INLINE_EDIT_PANEL_DATA_TEST_SUBJ + ); + if (!isInlineEditingActionVisible) await this.clickContextMenuMoreItem(); + await this.testSubjects.clickWhenNotDisabledWithoutRetry(INLINE_EDIT_PANEL_DATA_TEST_SUBJ); + await this.header.waitUntilLoadingHasFinished(); + await this.common.waitForTopNavToBeVisible(); + } + + /** The dashboard/canvas panels can be either edited on their editor or inline. + * The inline editing panels allow the navigation to the editor after the flyout opens + */ async clickEdit() { this.log.debug('clickEdit'); await this.expectContextMenuToBeOpen(); const isActionVisible = await this.testSubjects.exists(EDIT_PANEL_DATA_TEST_SUBJ); - if (!isActionVisible) await this.clickContextMenuMoreItem(); - await this.testSubjects.clickWhenNotDisabledWithoutRetry(EDIT_PANEL_DATA_TEST_SUBJ); + const isInlineEditingActionVisible = await this.testSubjects.exists( + INLINE_EDIT_PANEL_DATA_TEST_SUBJ + ); + if (!isActionVisible && !isInlineEditingActionVisible) await this.clickContextMenuMoreItem(); + // navigate to the editor + if (await this.testSubjects.exists(EDIT_PANEL_DATA_TEST_SUBJ)) { + await this.testSubjects.clickWhenNotDisabledWithoutRetry(EDIT_PANEL_DATA_TEST_SUBJ); + // open the flyout and then navigate to the editor + } else { + await this.navigateToEditorFromFlyout(); + } await this.header.waitUntilLoadingHasFinished(); await this.common.waitForTopNavToBeVisible(); } + /** The dashboard/canvas panels can be either edited on their editor or inline. + * The inline editing panels allow the navigation to the editor after the flyout opens + */ async editPanelByTitle(title?: string) { this.log.debug(`editPanelByTitle(${title})`); if (title) { @@ -105,7 +144,11 @@ export class DashboardPanelActionsService extends FtrService { } else { await this.openContextMenu(); } - await this.testSubjects.clickWhenNotDisabledWithoutRetry(EDIT_PANEL_DATA_TEST_SUBJ); + if (await this.testSubjects.exists(EDIT_PANEL_DATA_TEST_SUBJ)) { + await this.testSubjects.clickWhenNotDisabledWithoutRetry(EDIT_PANEL_DATA_TEST_SUBJ); + } else { + await this.navigateToEditorFromFlyout(); + } } async clickExpandPanelToggle() { @@ -266,9 +309,13 @@ export class DashboardPanelActionsService extends FtrService { await this.expectExistsPanelAction(REMOVE_PANEL_DATA_TEST_SUBJ); } - async expectExistsEditPanelAction(title?: string) { + async expectExistsEditPanelAction(title?: string, allowsInlineEditing?: boolean) { this.log.debug('expectExistsEditPanelAction'); - await this.expectExistsPanelAction(EDIT_PANEL_DATA_TEST_SUBJ, title); + let testSubj = EDIT_PANEL_DATA_TEST_SUBJ; + if (allowsInlineEditing) { + testSubj = INLINE_EDIT_PANEL_DATA_TEST_SUBJ; + } + await this.expectExistsPanelAction(testSubj, title); } async expectExistsReplacePanelAction() { diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index ecbcba8b201897..90c25c04b4a270 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -257,6 +257,9 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.license_management.ui.enabled (boolean)', 'xpack.maps.preserveDrawingBuffer (boolean)', 'xpack.maps.showMapsInspectorAdapter (boolean)', + 'xpack.ml.ad.enabled (boolean)', + 'xpack.ml.dfa.enabled (boolean)', + 'xpack.ml.nlp.enabled (boolean)', 'xpack.osquery.actionEnabled (boolean)', 'xpack.remote_clusters.ui.enabled (boolean)', /** diff --git a/tsconfig.base.json b/tsconfig.base.json index 08afa3562fdd20..10f8f78781437a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -770,6 +770,8 @@ "@kbn/expressions-plugin/*": ["src/plugins/expressions/*"], "@kbn/failed-test-reporter-cli": ["packages/kbn-failed-test-reporter-cli"], "@kbn/failed-test-reporter-cli/*": ["packages/kbn-failed-test-reporter-cli/*"], + "@kbn/feature-controls-examples-plugin": ["examples/feature_control_examples"], + "@kbn/feature-controls-examples-plugin/*": ["examples/feature_control_examples/*"], "@kbn/feature-usage-test-plugin": ["x-pack/test/plugin_api_integration/plugins/feature_usage_test"], "@kbn/feature-usage-test-plugin/*": ["x-pack/test/plugin_api_integration/plugins/feature_usage_test/*"], "@kbn/features-plugin": ["x-pack/plugins/features"], diff --git a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx index 967821db0e0dbb..dd0d30862ea783 100644 --- a/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx +++ b/x-pack/packages/ml/aiops_components/src/document_count_chart/document_count_chart.tsx @@ -104,6 +104,8 @@ export interface DocumentCountChartProps { brushSelectionUpdateHandler?: BrushSelectionUpdateHandler; /** Optional width */ width?: number; + /** Optional chart height */ + height?: number; /** Data chart points */ chartPoints: LogRateHistogramItem[]; /** Data chart points split */ @@ -130,6 +132,8 @@ export interface DocumentCountChartProps { deviationBrush?: BrushSettings; /** Optional settings override for the 'baseline' brush */ baselineBrush?: BrushSettings; + /** Optional data-test-subject */ + dataTestSubj?: string; } const SPEC_ID = 'document_count'; @@ -174,9 +178,11 @@ function getBaselineBadgeOverflow( */ export const DocumentCountChart: FC = (props) => { const { + dataTestSubj, dependencies, brushSelectionUpdateHandler, width, + height, chartPoints, chartPointsSplit, timeRangeEarliest, @@ -417,7 +423,7 @@ export const DocumentCountChart: FC = (props) => { return ( <> {isBrushVisible && ( -
+
= (props) => {
)} -
+
= (props) => disabled, callback, apiPath, - hideFrozenDataTierChoice = false, } = props; const { http, notifications: { toasts }, - isServerless, + showFrozenDataTierChoice, } = useDatePickerContext(); // wrapper around setFullTimeRange to allow for the calling of the optional callBack prop @@ -114,9 +109,7 @@ export const FullTimeRangeSelector: FC = (props) => toasts, http, query, - isServerless || hideFrozenDataTierChoice - ? false - : frozenDataPreference === FROZEN_TIER_PREFERENCE.EXCLUDE, + showFrozenDataTierChoice ? frozenDataPreference === FROZEN_TIER_PREFERENCE.EXCLUDE : false, apiPath ); if (typeof callback === 'function' && fullTimeRange !== undefined) { @@ -138,8 +131,7 @@ export const FullTimeRangeSelector: FC = (props) => toasts, http, query, - isServerless, - hideFrozenDataTierChoice, + showFrozenDataTierChoice, frozenDataPreference, apiPath, callback, @@ -230,7 +222,7 @@ export const FullTimeRangeSelector: FC = (props) => /> - {isServerless || hideFrozenDataTierChoice ? null : ( + {showFrozenDataTierChoice ? ( = (props) => {popoverContent} - )} + ) : null} ); }; diff --git a/x-pack/packages/ml/date_picker/src/hooks/use_date_picker_context.tsx b/x-pack/packages/ml/date_picker/src/hooks/use_date_picker_context.tsx index 60b1c66f95984e..49b090ef589834 100644 --- a/x-pack/packages/ml/date_picker/src/hooks/use_date_picker_context.tsx +++ b/x-pack/packages/ml/date_picker/src/hooks/use_date_picker_context.tsx @@ -45,9 +45,9 @@ export interface DatePickerDependencies { */ i18n: I18nStart; /** - * Optional flag to indicate whether kibana is running in serverless + * Optional flag to disable the frozen data tier choice. */ - isServerless?: boolean; + showFrozenDataTierChoice?: boolean; } /** diff --git a/x-pack/packages/ml/random_sampler_utils/src/random_sampler_manager.ts b/x-pack/packages/ml/random_sampler_utils/src/random_sampler_manager.ts index 364fbdfc4b8a0c..841253981b9e40 100644 --- a/x-pack/packages/ml/random_sampler_utils/src/random_sampler_manager.ts +++ b/x-pack/packages/ml/random_sampler_utils/src/random_sampler_manager.ts @@ -58,8 +58,8 @@ export class RandomSampler { private docCount$ = new BehaviorSubject(0); private mode$ = new BehaviorSubject(RANDOM_SAMPLER_OPTION.ON_AUTOMATIC); private probability$ = new BehaviorSubject(DEFAULT_PROBABILITY); - private setRandomSamplerModeInStorage: (mode: RandomSamplerOption) => void; - private setRandomSamplerProbabilityInStorage: (prob: RandomSamplerProbability) => void; + private setRandomSamplerModeInStorage?: (mode: RandomSamplerOption) => void; + private setRandomSamplerProbabilityInStorage?: (prob: RandomSamplerProbability) => void; /** * Initial values @@ -69,15 +69,17 @@ export class RandomSampler { * @param setRandomSamplerProbability - initial setter for random sampler probability */ constructor( - randomSamplerMode: RandomSamplerOption, - setRandomSamplerMode: (mode: RandomSamplerOption) => void, - randomSamplerProbability: RandomSamplerProbability, - setRandomSamplerProbability: (prob: RandomSamplerProbability) => void + randomSamplerMode?: RandomSamplerOption, + setRandomSamplerMode?: (mode: RandomSamplerOption) => void, + randomSamplerProbability?: RandomSamplerProbability, + setRandomSamplerProbability?: (prob: RandomSamplerProbability) => void ) { - this.mode$.next(randomSamplerMode); - this.setRandomSamplerModeInStorage = setRandomSamplerMode; - this.probability$.next(randomSamplerProbability); - this.setRandomSamplerProbabilityInStorage = setRandomSamplerProbability; + if (randomSamplerMode) this.mode$.next(randomSamplerMode); + + if (setRandomSamplerMode) this.setRandomSamplerModeInStorage = setRandomSamplerMode; + if (randomSamplerProbability) this.probability$.next(randomSamplerProbability); + if (setRandomSamplerProbability) + this.setRandomSamplerProbabilityInStorage = setRandomSamplerProbability; } /** @@ -100,7 +102,9 @@ export class RandomSampler { * @param {RandomSamplerOption} mode - mode to use when wrapping/unwrapping random sampling aggs */ public setMode(mode: RandomSamplerOption) { - this.setRandomSamplerModeInStorage(mode); + if (this.setRandomSamplerModeInStorage) { + this.setRandomSamplerModeInStorage(mode); + } return this.mode$.next(mode); } @@ -123,7 +127,9 @@ export class RandomSampler { * @param {RandomSamplerProbability} probability - numeric value 0 < probability < 1 to use for random sampling */ public setProbability(probability: RandomSamplerProbability) { - this.setRandomSamplerProbabilityInStorage(probability); + if (this.setRandomSamplerProbabilityInStorage) { + this.setRandomSamplerProbabilityInStorage(probability); + } return this.probability$.next(probability); } diff --git a/x-pack/packages/security-solution/upselling/service/index.ts b/x-pack/packages/security-solution/upselling/service/index.ts index 6a71fd9dde2ca1..75ae1a0f109bfe 100644 --- a/x-pack/packages/security-solution/upselling/service/index.ts +++ b/x-pack/packages/security-solution/upselling/service/index.ts @@ -6,6 +6,7 @@ */ export { UpsellingService } from './upselling_service'; export type { + MessageUpsellings, PageUpsellings, SectionUpsellings, UpsellingSectionId, diff --git a/x-pack/plugins/aiops/public/components/change_point_detection/change_point_detection_root.tsx b/x-pack/plugins/aiops/public/components/change_point_detection/change_point_detection_root.tsx index c18764e45797db..414e214fd1fe74 100644 --- a/x-pack/plugins/aiops/public/components/change_point_detection/change_point_detection_root.tsx +++ b/x-pack/plugins/aiops/public/components/change_point_detection/change_point_detection_root.tsx @@ -51,19 +51,19 @@ export interface ChangePointDetectionAppStateProps { /** App dependencies */ appDependencies: AiopsAppDependencies; /** Optional flag to indicate whether kibana is running in serverless */ - isServerless?: boolean; + showFrozenDataTierChoice?: boolean; } export const ChangePointDetectionAppState: FC = ({ dataView, savedSearch, appDependencies, - isServerless = false, + showFrozenDataTierChoice = true, }) => { const datePickerDeps: DatePickerDependencies = { ...pick(appDependencies, ['data', 'http', 'notifications', 'theme', 'uiSettings', 'i18n']), uiSettingsKeys: UI_SETTINGS, - isServerless, + showFrozenDataTierChoice, }; const warning = timeSeriesDataViewWarning(dataView, 'change_point_detection'); diff --git a/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx b/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx index 5ddf65d5b938df..c6e2600b7e4f4b 100644 --- a/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx +++ b/x-pack/plugins/aiops/public/components/log_categorization/log_categorization_app_state.tsx @@ -36,14 +36,14 @@ export interface LogCategorizationAppStateProps { /** App dependencies */ appDependencies: AiopsAppDependencies; /** Optional flag to indicate whether kibana is running in serverless */ - isServerless?: boolean; + showFrozenDataTierChoice?: boolean; } export const LogCategorizationAppState: FC = ({ dataView, savedSearch, appDependencies, - isServerless = false, + showFrozenDataTierChoice = true, }) => { if (!dataView) return null; @@ -56,7 +56,7 @@ export const LogCategorizationAppState: FC = ({ const datePickerDeps: DatePickerDependencies = { ...pick(appDependencies, ['data', 'http', 'notifications', 'theme', 'uiSettings', 'i18n']), uiSettingsKeys: UI_SETTINGS, - isServerless, + showFrozenDataTierChoice, }; return ( diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx index 0a41900feb9fb7..daa717b4fd4107 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_app_state.tsx @@ -41,7 +41,7 @@ export interface LogRateAnalysisAppStateProps { /** Option to make main histogram sticky */ stickyHistogram?: boolean; /** Optional flag to indicate whether kibana is running in serverless */ - isServerless?: boolean; + showFrozenDataTierChoice?: boolean; } export const LogRateAnalysisAppState: FC = ({ @@ -49,7 +49,7 @@ export const LogRateAnalysisAppState: FC = ({ savedSearch, appDependencies, stickyHistogram, - isServerless = false, + showFrozenDataTierChoice = true, }) => { if (!dataView) return null; @@ -62,7 +62,7 @@ export const LogRateAnalysisAppState: FC = ({ const datePickerDeps: DatePickerDependencies = { ...pick(appDependencies, ['data', 'http', 'notifications', 'theme', 'uiSettings', 'i18n']), uiSettingsKeys: UI_SETTINGS, - isServerless, + showFrozenDataTierChoice, }; return ( diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx index b19e72e7c4b5ae..806dc7f0e2cb25 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx @@ -58,7 +58,7 @@ export interface LogRateAnalysisContentWrapperProps { */ onAnalysisCompleted?: (d: LogRateAnalysisResultsData) => void; /** Optional flag to indicate whether kibana is running in serverless */ - isServerless?: boolean; + showFrozenDataTierChoice?: boolean; } export const LogRateAnalysisContentWrapper: FC = ({ @@ -72,7 +72,7 @@ export const LogRateAnalysisContentWrapper: FC { if (!dataView) return null; @@ -85,6 +85,7 @@ export const LogRateAnalysisContentWrapper: FC; diff --git a/x-pack/plugins/alerting/server/rules_client/methods/mute_instance.ts b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts similarity index 61% rename from x-pack/plugins/alerting/server/rules_client/methods/mute_instance.ts rename to x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts index 5f37988b7b718b..8adbdf7ae58c92 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/mute_instance.ts +++ b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/mute_instance.ts @@ -5,28 +5,37 @@ * 2.0. */ -import { Rule } from '../../types'; -import { WriteOperations, AlertingAuthorizationEntity } from '../../authorization'; -import { retryIfConflicts } from '../../lib/retry_if_conflicts'; -import { ruleAuditEvent, RuleAuditAction } from '../common/audit_events'; -import { MuteOptions } from '../types'; -import { RulesClientContext } from '../types'; -import { updateMeta } from '../lib'; +import Boom from '@hapi/boom'; +import { updateRuleSo } from '../../../../data/rule/methods/update_rule_so'; +import { muteAlertParamsSchema } from './schemas'; +import type { MuteAlertParams } from './types'; +import { Rule } from '../../../../types'; +import { WriteOperations, AlertingAuthorizationEntity } from '../../../../authorization'; +import { retryIfConflicts } from '../../../../lib/retry_if_conflicts'; +import { ruleAuditEvent, RuleAuditAction } from '../../../../rules_client/common/audit_events'; +import { RulesClientContext } from '../../../../rules_client/types'; +import { updateMeta } from '../../../../rules_client/lib'; export async function muteInstance( context: RulesClientContext, - { alertId, alertInstanceId }: MuteOptions + params: MuteAlertParams ): Promise { + try { + muteAlertParamsSchema.validate(params); + } catch (error) { + throw Boom.badRequest(`Failed to validate params: ${error.message}`); + } + return await retryIfConflicts( context.logger, - `rulesClient.muteInstance('${alertId}')`, - async () => await muteInstanceWithOCC(context, { alertId, alertInstanceId }) + `rulesClient.muteInstance('${params.alertId}')`, + async () => await muteInstanceWithOCC(context, params) ); } async function muteInstanceWithOCC( context: RulesClientContext, - { alertId, alertInstanceId }: MuteOptions + { alertId, alertInstanceId }: MuteAlertParams ) { const { attributes, version } = await context.unsecuredSavedObjectsClient.get( 'alert', @@ -68,15 +77,15 @@ async function muteInstanceWithOCC( const mutedInstanceIds = attributes.mutedInstanceIds || []; if (!attributes.muteAll && !mutedInstanceIds.includes(alertInstanceId)) { mutedInstanceIds.push(alertInstanceId); - await context.unsecuredSavedObjectsClient.update( - 'alert', - alertId, - updateMeta(context, { + await updateRuleSo({ + savedObjectsClient: context.unsecuredSavedObjectsClient, + savedObjectsUpdateOptions: { version }, + id: alertId, + updateRuleAttributes: updateMeta(context, { mutedInstanceIds, updatedBy: await context.getUserName(), updatedAt: new Date().toISOString(), }), - { version } - ); + }); } } diff --git a/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/schemas/index.ts b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/schemas/index.ts new file mode 100644 index 00000000000000..e7148adf7eefe0 --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/schemas/index.ts @@ -0,0 +1,7 @@ +/* + * 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 { muteAlertParamsSchema } from './mute_alert_params_schema'; diff --git a/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/schemas/mute_alert_params_schema.ts b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/schemas/mute_alert_params_schema.ts new file mode 100644 index 00000000000000..6c8df8cb907dad --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/schemas/mute_alert_params_schema.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { schema } from '@kbn/config-schema'; + +export const muteAlertParamsSchema = schema.object({ + alertId: schema.string(), + alertInstanceId: schema.string(), +}); diff --git a/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/types/index.ts b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/types/index.ts new file mode 100644 index 00000000000000..8b72247e15649b --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/types/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 type { MuteAlertParams } from './mute_alert_params'; diff --git a/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/types/mute_alert_params.ts b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/types/mute_alert_params.ts new file mode 100644 index 00000000000000..f94f454f1f78c1 --- /dev/null +++ b/x-pack/plugins/alerting/server/application/rule/methods/mute_alert/types/mute_alert_params.ts @@ -0,0 +1,11 @@ +/* + * 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 { TypeOf } from '@kbn/config-schema'; +import { muteAlertParamsSchema } from '../schemas'; + +export type MuteAlertParams = TypeOf; diff --git a/x-pack/plugins/alerting/server/routes/index.ts b/x-pack/plugins/alerting/server/routes/index.ts index a93803ed6d585c..5086cb56279ede 100644 --- a/x-pack/plugins/alerting/server/routes/index.ts +++ b/x-pack/plugins/alerting/server/routes/index.ts @@ -32,7 +32,7 @@ import { healthRoute } from './health'; import { resolveRuleRoute } from './resolve_rule'; import { ruleTypesRoute } from './rule_types'; import { muteAllRuleRoute } from './mute_all_rule'; -import { muteAlertRoute } from './mute_alert'; +import { muteAlertRoute } from './rule/apis/mute_alert/mute_alert'; import { unmuteAllRuleRoute } from './unmute_all_rule'; import { unmuteAlertRoute } from './unmute_alert'; import { updateRuleApiKeyRoute } from './update_rule_api_key'; diff --git a/x-pack/plugins/alerting/server/routes/mute_alert.test.ts b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/mute_alert.test.ts similarity index 87% rename from x-pack/plugins/alerting/server/routes/mute_alert.test.ts rename to x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/mute_alert.test.ts index ef67a6d2ef3bf1..440c040d74ff7b 100644 --- a/x-pack/plugins/alerting/server/routes/mute_alert.test.ts +++ b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/mute_alert.test.ts @@ -7,13 +7,13 @@ import { muteAlertRoute } from './mute_alert'; import { httpServiceMock } from '@kbn/core/server/mocks'; -import { licenseStateMock } from '../lib/license_state.mock'; -import { mockHandlerArguments } from './_mock_handler_arguments'; -import { rulesClientMock } from '../rules_client.mock'; -import { RuleTypeDisabledError } from '../lib/errors/rule_type_disabled'; +import { licenseStateMock } from '../../../../lib/license_state.mock'; +import { mockHandlerArguments } from '../../../_mock_handler_arguments'; +import { rulesClientMock } from '../../../../rules_client.mock'; +import { RuleTypeDisabledError } from '../../../../lib'; const rulesClient = rulesClientMock.create(); -jest.mock('../lib/license_api_access', () => ({ +jest.mock('../../../../lib/license_api_access', () => ({ verifyApiAccess: jest.fn(), })); diff --git a/x-pack/plugins/alerting/server/routes/mute_alert.ts b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/mute_alert.ts similarity index 62% rename from x-pack/plugins/alerting/server/routes/mute_alert.ts rename to x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/mute_alert.ts index 22d9a1670dde51..45a0a37f3164cb 100644 --- a/x-pack/plugins/alerting/server/routes/mute_alert.ts +++ b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/mute_alert.ts @@ -4,26 +4,15 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import { IRouter } from '@kbn/core/server'; -import { schema } from '@kbn/config-schema'; -import { ILicenseState, RuleTypeDisabledError } from '../lib'; -import { MuteOptions } from '../rules_client'; -import { RewriteRequestCase, verifyAccessAndContext } from './lib'; -import { AlertingRequestHandlerContext, BASE_ALERTING_API_PATH } from '../types'; - -const paramSchema = schema.object({ - rule_id: schema.string(), - alert_id: schema.string(), -}); - -const rewriteParamsReq: RewriteRequestCase = ({ - rule_id: alertId, - alert_id: alertInstanceId, -}) => ({ - alertId, - alertInstanceId, -}); +import { transformRequestParamsToApplicationV1 } from './transforms'; +import { ILicenseState, RuleTypeDisabledError } from '../../../../lib'; +import { verifyAccessAndContext } from '../../../lib'; +import { AlertingRequestHandlerContext, BASE_ALERTING_API_PATH } from '../../../../types'; +import { + muteAlertParamsSchemaV1, + MuteAlertRequestParamsV1, +} from '../../../../../common/routes/rule/apis/mute_alert'; export const muteAlertRoute = ( router: IRouter, @@ -33,15 +22,15 @@ export const muteAlertRoute = ( { path: `${BASE_ALERTING_API_PATH}/rule/{rule_id}/alert/{alert_id}/_mute`, validate: { - params: paramSchema, + params: muteAlertParamsSchemaV1, }, }, router.handleLegacyErrors( verifyAccessAndContext(licenseState, async function (context, req, res) { const rulesClient = (await context.alerting).getRulesClient(); - const params = rewriteParamsReq(req.params); + const params: MuteAlertRequestParamsV1 = req.params; try { - await rulesClient.muteInstance(params); + await rulesClient.muteInstance(transformRequestParamsToApplicationV1(params)); return res.noContent(); } catch (e) { if (e instanceof RuleTypeDisabledError) { diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/transforms/index.ts b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/transforms/index.ts new file mode 100644 index 00000000000000..21a7250aed4e2e --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/transforms/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 { transformRequestParamsToApplication } from './transform_request_params_to_application/latest'; +export { transformRequestParamsToApplication as transformRequestParamsToApplicationV1 } from './transform_request_params_to_application/v1'; diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/transforms/transform_request_params_to_application/latest.ts b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/transforms/transform_request_params_to_application/latest.ts new file mode 100644 index 00000000000000..5983069f0d8fd2 --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/transforms/transform_request_params_to_application/latest.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 { transformRequestParamsToApplication } from './v1'; diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/transforms/transform_request_params_to_application/v1.ts b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/transforms/transform_request_params_to_application/v1.ts new file mode 100644 index 00000000000000..37966060dba022 --- /dev/null +++ b/x-pack/plugins/alerting/server/routes/rule/apis/mute_alert/transforms/transform_request_params_to_application/v1.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MuteAlertParams } from '../../../../../../application/rule/methods/mute_alert/types'; +import { RewriteRequestCase } from '../../../../../lib'; + +export const transformRequestParamsToApplication: RewriteRequestCase = ({ + rule_id: alertId, + alert_id: alertInstanceId, +}) => ({ + alertId, + alertInstanceId, +}); diff --git a/x-pack/plugins/alerting/server/rules_client/rules_client.ts b/x-pack/plugins/alerting/server/rules_client/rules_client.ts index 4c1138f23cb39d..d7a576ac99d0b2 100644 --- a/x-pack/plugins/alerting/server/rules_client/rules_client.ts +++ b/x-pack/plugins/alerting/server/rules_client/rules_client.ts @@ -5,9 +5,10 @@ * 2.0. */ +import { MuteAlertParams } from '../application/rule/methods/mute_alert/types'; import { SanitizedRule, RuleTypeParams } from '../types'; import { parseDuration } from '../../common/parse_duration'; -import { RulesClientContext, BulkOptions, MuteOptions } from './types'; +import { RulesClientContext, BulkOptions } from './types'; import { clone, CloneArguments } from './methods/clone'; import { createRule, CreateRuleParams } from '../application/rule/methods/create'; import { get, GetParams } from './methods/get'; @@ -52,9 +53,9 @@ import { disable } from './methods/disable'; import { snooze, SnoozeParams } from './methods/snooze'; import { unsnooze, UnsnoozeParams } from './methods/unsnooze'; import { clearExpiredSnoozes } from './methods/clear_expired_snoozes'; +import { muteInstance } from '../application/rule/methods/mute_alert/mute_instance'; import { muteAll } from './methods/mute_all'; import { unmuteAll } from './methods/unmute_all'; -import { muteInstance } from './methods/mute_instance'; import { unmuteInstance } from './methods/unmute_instance'; import { runSoon } from './methods/run_soon'; import { listRuleTypes } from './methods/list_rule_types'; @@ -163,8 +164,8 @@ export class RulesClient { public muteAll = (options: { id: string }) => muteAll(this.context, options); public unmuteAll = (options: { id: string }) => unmuteAll(this.context, options); - public muteInstance = (options: MuteOptions) => muteInstance(this.context, options); - public unmuteInstance = (options: MuteOptions) => unmuteInstance(this.context, options); + public muteInstance = (options: MuteAlertParams) => muteInstance(this.context, options); + public unmuteInstance = (options: MuteAlertParams) => unmuteInstance(this.context, options); public runSoon = (options: { id: string }) => runSoon(this.context, options); diff --git a/x-pack/plugins/alerting/server/rules_client/types.ts b/x-pack/plugins/alerting/server/rules_client/types.ts index c755651f5524d6..87ae5949762468 100644 --- a/x-pack/plugins/alerting/server/rules_client/types.ts +++ b/x-pack/plugins/alerting/server/rules_client/types.ts @@ -121,6 +121,7 @@ export interface IndexType { [key: string]: unknown; } +// TODO: remove once all mute endpoints have been migrated to RuleMuteAlertOptions export interface MuteOptions extends IndexType { alertId: string; alertInstanceId: string; diff --git a/x-pack/plugins/apm/server/routes/assistant_functions/get_apm_service_summary/index.ts b/x-pack/plugins/apm/server/routes/assistant_functions/get_apm_service_summary/index.ts index 92eafdf0b4ee7b..64035f0373cfb9 100644 --- a/x-pack/plugins/apm/server/routes/assistant_functions/get_apm_service_summary/index.ts +++ b/x-pack/plugins/apm/server/routes/assistant_functions/get_apm_service_summary/index.ts @@ -275,6 +275,7 @@ export async function getApmServiceSummary({ start, end, serviceName, + environment, }), getAnomalies({ serviceName, diff --git a/x-pack/plugins/asset_manager/server/routes/assets/hosts.ts b/x-pack/plugins/asset_manager/server/routes/assets/hosts.ts index 2b1088990334c2..68ed4baaeb5c8f 100644 --- a/x-pack/plugins/asset_manager/server/routes/assets/hosts.ts +++ b/x-pack/plugins/asset_manager/server/routes/assets/hosts.ts @@ -47,12 +47,15 @@ export function hostsRoutes({ async (context, req, res) => { const { from = 'now-24h', to = 'now' } = req.query || {}; const esClient = await getEsClientFromContext(context); + const coreContext = await context.core; + const soClient = coreContext.savedObjects.client; try { const response = await assetAccessor.getHosts({ from: datemath.parse(from)!.toISOString(), to: datemath.parse(to)!.toISOString(), esClient, + soClient, }); return res.ok({ body: response }); diff --git a/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.test.ts b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.test.ts new file mode 100644 index 00000000000000..c7f500d891c1bb --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.test.ts @@ -0,0 +1,111 @@ +/* + * 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 { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; +import { loggingSystemMock } from '@kbn/core/server/mocks'; +import { createBenchmarkScoreIndex } from './create_indices'; +import { + BENCHMARK_SCORE_INDEX_DEFAULT_NS, + BENCHMARK_SCORE_INDEX_PATTERN, + BENCHMARK_SCORE_INDEX_TEMPLATE_NAME, + CSP_INGEST_TIMESTAMP_PIPELINE, +} from '../../common/constants'; +import { IndicesGetIndexTemplateIndexTemplateItem } from '@elastic/elasticsearch/lib/api/types'; + +const mockEsClient = elasticsearchClientMock.createClusterClient().asScoped().asInternalUser; + +describe('createBenchmarkScoreIndex', () => { + let logger: ReturnType; + + beforeEach(() => { + logger = loggingSystemMock.createLogger(); + jest.resetAllMocks(); + }); + + it('should delete old index template from prev verions first', async () => { + mockEsClient.indices.getIndexTemplate.mockResolvedValueOnce({ + index_templates: [{ name: 'foo' } as IndicesGetIndexTemplateIndexTemplateItem], + }); + // @ts-ignore + await createBenchmarkScoreIndex(mockEsClient, { serverless: { enabled: false } }, logger); + expect(mockEsClient.indices.deleteIndexTemplate).toHaveBeenCalledTimes(1); + expect(mockEsClient.indices.deleteIndexTemplate).toHaveBeenCalledWith({ + name: 'cloud_security_posture.scores', + }); + }); + + it('should create index template with the correct index pattern, index name and default ingest pipeline', async () => { + // @ts-ignore + await createBenchmarkScoreIndex(mockEsClient, { serverless: { enabled: false } }, logger); + expect(mockEsClient.indices.putIndexTemplate).toHaveBeenCalledTimes(1); + expect(mockEsClient.indices.putIndexTemplate).toHaveBeenCalledWith( + expect.objectContaining({ + name: BENCHMARK_SCORE_INDEX_TEMPLATE_NAME, + index_patterns: BENCHMARK_SCORE_INDEX_PATTERN, + template: expect.objectContaining({ + settings: { + index: { + default_pipeline: CSP_INGEST_TIMESTAMP_PIPELINE, + }, + lifecycle: { + name: '', + }, + }, + }), + }) + ); + }); + + it('should create index template the correct index patter, index name and default ingest pipeline but without lifecycle in serverless', async () => { + await createBenchmarkScoreIndex( + mockEsClient, + { serverless: { enabled: true }, enabled: true }, + logger + ); + expect(mockEsClient.indices.putIndexTemplate).toHaveBeenCalledTimes(1); + expect(mockEsClient.indices.putIndexTemplate).toHaveBeenCalledWith( + expect.objectContaining({ + name: BENCHMARK_SCORE_INDEX_TEMPLATE_NAME, + index_patterns: BENCHMARK_SCORE_INDEX_PATTERN, + template: expect.objectContaining({ + settings: expect.not.objectContaining({ + lifecycle: { + name: '', + }, + }), + }), + }) + ); + }); + + it('should create index if does not exist', async () => { + mockEsClient.indices.exists.mockResolvedValueOnce(false); + + await createBenchmarkScoreIndex( + mockEsClient, + { serverless: { enabled: true }, enabled: true }, + logger + ); + expect(mockEsClient.indices.create).toHaveBeenCalledTimes(1); + expect(mockEsClient.indices.create).toHaveBeenCalledWith({ + index: BENCHMARK_SCORE_INDEX_DEFAULT_NS, + }); + expect(mockEsClient.indices.putMapping).toHaveBeenCalledTimes(0); + }); + + it('should updat index mapping if index exists', async () => { + mockEsClient.indices.exists.mockResolvedValueOnce(true); + + await createBenchmarkScoreIndex( + mockEsClient, + { serverless: { enabled: true }, enabled: true }, + logger + ); + expect(mockEsClient.indices.create).toHaveBeenCalledTimes(0); + expect(mockEsClient.indices.putMapping).toHaveBeenCalledTimes(1); + }); +}); diff --git a/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts index 03e3b0c804dc08..f8a935f361ff6a 100644 --- a/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts +++ b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts @@ -65,7 +65,7 @@ export const initializeCspIndices = async ( } }; -const createBenchmarkScoreIndex = async ( +export const createBenchmarkScoreIndex = async ( esClient: ElasticsearchClient, cloudSecurityPostureConfig: CloudSecurityPostureConfig, logger: Logger diff --git a/x-pack/plugins/data_visualizer/public/api/index.ts b/x-pack/plugins/data_visualizer/public/api/index.ts index a07f4041637b19..68c265e200f12d 100644 --- a/x-pack/plugins/data_visualizer/public/api/index.ts +++ b/x-pack/plugins/data_visualizer/public/api/index.ts @@ -7,7 +7,7 @@ import { lazyLoadModules } from '../lazy_load_bundle'; import type { - DataComparisonSpec, + DataDriftSpec, FileDataVisualizerSpec, IndexDataVisualizerSpec, } from '../application'; @@ -22,7 +22,7 @@ export async function getIndexDataVisualizerComponent(): Promise<() => IndexData return () => modules.IndexDataVisualizer; } -export async function getDataComparisonComponent(): Promise<() => DataComparisonSpec> { +export async function getDataDriftComponent(): Promise<() => DataDriftSpec> { const modules = await lazyLoadModules(); - return () => modules.DataComparison; + return () => modules.DataDrift; } diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/total_count_header.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/total_count_header.tsx index 99ecd72d29857d..e681e6c85efcbe 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/total_count_header.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/document_count_content/total_count_header.tsx @@ -9,30 +9,44 @@ import { EuiFlexItem, EuiText, EuiLoadingSpinner, EuiIconTip } from '@elastic/eu import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; import { i18n } from '@kbn/i18n'; - +import { getDataTestSubject } from '../../util/get_data_test_subject'; const SIGFIGS_IF_ROUNDING = 3; // Number of sigfigs to use for values < 10 +const defaultDocCountLabel = i18n.translate( + 'xpack.dataVisualizer.searchPanel.totalDocumentsLabel', + { defaultMessage: 'Total documents' } +); + export const TotalCountHeader = ({ + id, totalCount, approximate, loading, + label = defaultDocCountLabel, }: { + id?: string; totalCount: number; + label?: string; loading?: boolean; approximate?: boolean; }) => { return ( - + ) : ( - + void; + id?: string; } -export const SamplingMenu: FC = ({ randomSampler, reload }) => { +export const SamplingMenu: FC = ({ randomSampler, reload, id }) => { const [showSamplingOptionsPopover, setShowSamplingOptionsPopover] = useState(false); const samplingProbability = useObservable( @@ -129,13 +131,15 @@ export const SamplingMenu: FC = ({ randomSampler, reload }) => { return ( setShowSamplingOptionsPopover(!showSamplingOptionsPopover)} iconSide="right" iconType="arrowDown" + size="s" > {buttonText} @@ -152,7 +156,7 @@ export const SamplingMenu: FC = ({ randomSampler, reload }) => { = ({ randomSampler, reload }) => { )} > setRandomSamplerPreference(e.target.value as RandomSamplerOption)} diff --git a/x-pack/plugins/data_visualizer/public/application/common/hooks/use_data.ts b/x-pack/plugins/data_visualizer/public/application/common/hooks/use_data.ts index 9e7e3f9633291a..65c882ba551d91 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/hooks/use_data.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/hooks/use_data.ts @@ -6,7 +6,6 @@ */ import { DataView } from '@kbn/data-views-plugin/common'; -import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Dictionary } from '@kbn/ml-url-state'; import { Moment } from 'moment'; import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; @@ -14,8 +13,14 @@ import { useEffect, useMemo, useState } from 'react'; import { mlTimefilterRefresh$, useTimefilter } from '@kbn/ml-date-picker'; import { merge } from 'rxjs'; import { RandomSampler } from '@kbn/ml-random-sampler-utils'; +import { mapAndFlattenFilters } from '@kbn/data-plugin/public'; +import { Query } from '@kbn/es-query'; +import { SearchQueryLanguage } from '@kbn/ml-query-utils'; +import { createMergedEsQuery } from '../../index_data_visualizer/utils/saved_search_utils'; +import { useDataDriftStateManagerContext } from '../../data_drift/use_state_manager'; +import type { InitialSettings } from '../../data_drift/use_data_drift_result'; import { - DocumentStatsSearchStrategyParams, + type DocumentStatsSearchStrategyParams, useDocumentCountStats, } from './use_document_count_stats'; import { useDataVisualizerKibana } from '../../kibana_context'; @@ -24,16 +29,23 @@ import { useTimeBuckets } from './use_time_buckets'; const DEFAULT_BAR_TARGET = 75; export const useData = ( + initialSettings: InitialSettings, selectedDataView: DataView, contextId: string, - searchQuery: estypes.QueryDslQueryContainer, + searchString: Query['query'], + searchQueryLanguage: SearchQueryLanguage, randomSampler: RandomSampler, + randomSamplerProd: RandomSampler, onUpdate?: (params: Dictionary) => void, barTarget: number = DEFAULT_BAR_TARGET, timeRange?: { min: Moment; max: Moment } ) => { const { - services: { executionContext }, + services: { + executionContext, + uiSettings, + data: { query: queryManager }, + }, } = useDataVisualizerKibana(); useExecutionContext(executionContext, { @@ -50,26 +62,95 @@ export const useData = ( autoRefreshSelector: true, }); - const docCountRequestParams: DocumentStatsSearchStrategyParams | undefined = useMemo(() => { - const timefilterActiveBounds = timeRange ?? timefilter.getActiveBounds(); - if (timefilterActiveBounds !== undefined) { - _timeBuckets.setInterval('auto'); - _timeBuckets.setBounds(timefilterActiveBounds); - _timeBuckets.setBarTarget(barTarget); - return { - earliest: timefilterActiveBounds.min?.valueOf(), - latest: timefilterActiveBounds.max?.valueOf(), - intervalMs: _timeBuckets.getInterval()?.asMilliseconds(), - index: selectedDataView.getIndexPattern(), - searchQuery, - timeFieldName: selectedDataView.timeFieldName, - runtimeFieldMap: selectedDataView.getRuntimeMappings(), - }; - } + const { reference: referenceStateManager, comparison: comparisonStateManager } = + useDataDriftStateManagerContext(); + + const docCountRequestParams: + | { + reference: DocumentStatsSearchStrategyParams | undefined; + comparison: DocumentStatsSearchStrategyParams | undefined; + } + | undefined = useMemo( + () => { + const searchQuery = + searchString !== undefined && searchQueryLanguage !== undefined + ? { query: searchString, language: searchQueryLanguage } + : undefined; + + const timefilterActiveBounds = timeRange ?? timefilter.getActiveBounds(); + if (timefilterActiveBounds !== undefined) { + _timeBuckets.setInterval('auto'); + _timeBuckets.setBounds(timefilterActiveBounds); + _timeBuckets.setBarTarget(barTarget); + const query = { + earliest: timefilterActiveBounds.min?.valueOf(), + latest: timefilterActiveBounds.max?.valueOf(), + intervalMs: _timeBuckets.getInterval()?.asMilliseconds(), + timeFieldName: selectedDataView.timeFieldName, + runtimeFieldMap: selectedDataView.getRuntimeMappings(), + }; + + const refQuery = createMergedEsQuery( + searchQuery, + mapAndFlattenFilters([ + ...queryManager.filterManager.getFilters(), + ...(referenceStateManager.filters ?? []), + ]), + selectedDataView, + uiSettings + ); + + const compQuery = createMergedEsQuery( + searchQuery, + mapAndFlattenFilters([ + ...queryManager.filterManager.getFilters(), + ...(comparisonStateManager.filters ?? []), + ]), + selectedDataView, + uiSettings + ); + + return { + reference: { + ...query, + searchQuery: refQuery, + index: initialSettings ? initialSettings.reference : selectedDataView.getIndexPattern(), + }, + comparison: { + ...query, + searchQuery: compQuery, + index: initialSettings + ? initialSettings.comparison + : selectedDataView.getIndexPattern(), + }, + }; + } + }, // eslint-disable-next-line react-hooks/exhaustive-deps - }, [lastRefresh, JSON.stringify({ searchQuery, timeRange })]); + [ + lastRefresh, + searchString, + searchQueryLanguage, + // eslint-disable-next-line react-hooks/exhaustive-deps + JSON.stringify({ + timeRange, + globalFilters: queryManager.filterManager.getFilters(), + compFilters: comparisonStateManager?.filters, + refFilters: referenceStateManager?.filters, + }), + ] + ); - const documentStats = useDocumentCountStats(docCountRequestParams, lastRefresh, randomSampler); + const documentStats = useDocumentCountStats( + docCountRequestParams?.reference, + lastRefresh, + randomSampler + ); + const documentStatsProd = useDocumentCountStats( + docCountRequestParams?.comparison, + lastRefresh, + randomSamplerProd + ); useEffect(() => { const timefilterUpdateSubscription = merge( @@ -102,12 +183,19 @@ export const useData = ( return { documentStats, + documentStatsProd, timefilter, /** Start timestamp filter */ - earliest: docCountRequestParams?.earliest, + earliest: Math.min( + docCountRequestParams?.reference?.earliest ?? 0, + docCountRequestParams?.comparison?.earliest ?? 0 + ), /** End timestamp filter */ - latest: docCountRequestParams?.latest, - intervalMs: docCountRequestParams?.intervalMs, + latest: Math.max( + docCountRequestParams?.reference?.latest ?? 0, + docCountRequestParams?.comparison?.latest ?? 0 + ), + intervalMs: docCountRequestParams?.reference?.intervalMs, forceRefresh: () => setLastRefresh(Date.now()), }; }; diff --git a/x-pack/plugins/data_visualizer/public/application/common/hooks/use_document_count_stats.ts b/x-pack/plugins/data_visualizer/public/application/common/hooks/use_document_count_stats.ts index 6514b1f98a2924..87a9a37d4d2c5c 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/hooks/use_document_count_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/hooks/use_document_count_stats.ts @@ -236,6 +236,7 @@ export function useDocumentCountStats { + if (!id) return testSubject; + return `${testSubject}-${id}`; +}; diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/data_comparison_distribution_chart.tsx b/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/data_comparison_distribution_chart.tsx deleted file mode 100644 index 96a4876d5df11d..00000000000000 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/data_comparison_distribution_chart.tsx +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { Axis, BarSeries, Chart, Position, ScaleType, Settings, Tooltip } from '@elastic/charts'; -import React from 'react'; -import { NoChartsData } from './no_charts_data'; -import { ComparisonHistogram } from '../types'; -import { DataComparisonChartTooltipBody } from '../data_comparison_chart_tooltip_body'; -import { COMPARISON_LABEL, DATA_COMPARISON_TYPE } from '../constants'; - -export const DataComparisonDistributionChart = ({ - featureName, - fieldType, - data, - colors, -}: { - featureName: string; - fieldType: string; - data: ComparisonHistogram[]; - colors: { referenceColor: string; productionColor: string }; -}) => { - if (data.length === 0) return ; - return ( - - - - - Number(d).toFixed(2)} /> - { - const key = identifier.seriesKeys[0]; - return key === COMPARISON_LABEL ? colors.productionColor : colors.referenceColor; - }} - /> - - ); -}; diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/overlap_distribution_chart.tsx b/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/overlap_distribution_chart.tsx deleted file mode 100644 index 34f6a797831c05..00000000000000 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/overlap_distribution_chart.tsx +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { AreaSeries, Chart, CurveType, ScaleType, Settings, Tooltip } from '@elastic/charts'; -import { i18n } from '@kbn/i18n'; -import React from 'react'; -import { NoChartsData } from './no_charts_data'; -import type { ComparisonHistogram, DataComparisonField } from '../types'; -import { DataComparisonChartTooltipBody } from '../data_comparison_chart_tooltip_body'; -import { COMPARISON_LABEL, DATA_COMPARISON_TYPE, REFERENCE_LABEL } from '../constants'; - -export const OverlapDistributionComparison = ({ - data, - colors, - fieldType, - fieldName, -}: { - data: ComparisonHistogram[]; - colors: { referenceColor: string; productionColor: string }; - fieldType?: DataComparisonField['type']; - fieldName?: DataComparisonField['field']; -}) => { - if (data.length === 0) return ; - - return ( - - - - - { - const key = identifier.seriesKeys[0]; - return key === COMPARISON_LABEL ? colors.productionColor : colors.referenceColor; - }} - /> - - ); -}; diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/charts/data_drift_distribution_chart.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/data_drift_distribution_chart.tsx new file mode 100644 index 00000000000000..1a777ceda0f045 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/data_drift_distribution_chart.tsx @@ -0,0 +1,71 @@ +/* + * 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 { Axis, BarSeries, Chart, Tooltip, Position, ScaleType, Settings } from '@elastic/charts'; +import React from 'react'; +import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; +import { NoChartsData } from './no_charts_data'; +import type { Feature } from '../types'; +import { COMPARISON_LABEL, DATA_COMPARISON_TYPE } from '../constants'; +import { DataComparisonChartTooltipBody } from '../data_drift_chart_tooltip_body'; +import { getFieldFormatType, useFieldFormatter } from './default_value_formatter'; + +const CHART_HEIGHT = 200; + +export const DataDriftDistributionChart = ({ + item, + colors, + secondaryType, +}: { + item: Feature | undefined; + colors: { referenceColor: string; comparisonColor: string }; + secondaryType: string; + domain?: Feature['domain']; +}) => { + const xAxisFormatter = useFieldFormatter(getFieldFormatType(secondaryType)); + const yAxisFormatter = useFieldFormatter(FIELD_FORMAT_IDS.NUMBER); + + if (!item || item.comparisonDistribution.length === 0) return ; + const { featureName, fieldType, comparisonDistribution: data } = item; + + return ( +
+ + + + + + { + const key = identifier.seriesKeys[0]; + return key === COMPARISON_LABEL ? colors.comparisonColor : colors.referenceColor; + }} + /> + +
+ ); +}; diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/charts/default_value_formatter.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/default_value_formatter.ts new file mode 100644 index 00000000000000..c97e5f371bb633 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/default_value_formatter.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { useMemo, useCallback } from 'react'; +import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; +import { useDataVisualizerKibana } from '../../kibana_context'; + +export const getFieldFormatType = (type: string) => { + switch (type) { + case 'number': + return FIELD_FORMAT_IDS.NUMBER; + case 'boolean': + return FIELD_FORMAT_IDS.BOOLEAN; + default: + return FIELD_FORMAT_IDS.STRING; + } +}; +export const useFieldFormatter = (fieldType: FIELD_FORMAT_IDS) => { + const { + services: { + data: { fieldFormats }, + }, + } = useDataVisualizerKibana(); + + const fieldFormatter = useMemo(() => { + return fieldFormats.deserialize({ + id: fieldType, + }); + }, [fieldFormats, fieldType]); + + return useCallback( + (v: unknown) => { + const func = fieldFormatter.convert.bind(fieldFormatter); + return func(v); + }, + [fieldFormatter] + ); +}; diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/no_charts_data.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/no_charts_data.tsx similarity index 100% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/charts/no_charts_data.tsx rename to x-pack/plugins/data_visualizer/public/application/data_drift/charts/no_charts_data.tsx diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/charts/overlap_distribution_chart.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/overlap_distribution_chart.tsx new file mode 100644 index 00000000000000..5913d9e8138812 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/overlap_distribution_chart.tsx @@ -0,0 +1,90 @@ +/* + * 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 { + AreaSeries, + Axis, + Chart, + CurveType, + Position, + ScaleType, + Settings, + Tooltip, +} from '@elastic/charts'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; +import { NoChartsData } from './no_charts_data'; +import type { ComparisonHistogram, DataDriftField } from '../types'; +import { DataComparisonChartTooltipBody } from '../data_drift_chart_tooltip_body'; +import { COMPARISON_LABEL, DATA_COMPARISON_TYPE, REFERENCE_LABEL } from '../constants'; +import { getFieldFormatType, useFieldFormatter } from './default_value_formatter'; + +export const OverlapDistributionComparison = ({ + data, + colors, + fieldType, + fieldName, + secondaryType, +}: { + data: ComparisonHistogram[]; + colors: { referenceColor: string; comparisonColor: string }; + secondaryType: string; + fieldType?: DataDriftField['type']; + fieldName?: DataDriftField['field']; +}) => { + const xAxisFormatter = useFieldFormatter(getFieldFormatType(secondaryType)); + const yAxisFormatter = useFieldFormatter(FIELD_FORMAT_IDS.NUMBER); + if (data.length === 0) return ; + + return ( + + + + + + + { + const key = identifier.seriesKeys[0]; + return key === COMPARISON_LABEL ? colors.comparisonColor : colors.referenceColor; + }} + /> + + ); +}; diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/single_distribution_chart.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/single_distribution_chart.tsx similarity index 51% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/charts/single_distribution_chart.tsx rename to x-pack/plugins/data_visualizer/public/application/data_drift/charts/single_distribution_chart.tsx index 22796f371cb559..a8232a2ea7e12d 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/charts/single_distribution_chart.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/charts/single_distribution_chart.tsx @@ -6,28 +6,55 @@ */ import { SeriesColorAccessor } from '@elastic/charts/dist/chart_types/xy_chart/utils/specs'; -import { BarSeries, Chart, ScaleType, Settings } from '@elastic/charts'; +import { Axis, BarSeries, Chart, Position, ScaleType, Settings, Tooltip } from '@elastic/charts'; import React from 'react'; +import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; +import { getFieldFormatType, useFieldFormatter } from './default_value_formatter'; +import { DataComparisonChartTooltipBody } from '../data_drift_chart_tooltip_body'; import { NoChartsData } from './no_charts_data'; import { DATA_COMPARISON_TYPE } from '../constants'; -import { DataComparisonField, Histogram } from '../types'; +import { DataDriftField, Feature, Histogram } from '../types'; export const SingleDistributionChart = ({ data, color, fieldType, + secondaryType, name, }: { data: Histogram[]; name: string; + secondaryType: string; color?: SeriesColorAccessor; - fieldType?: DataComparisonField['type']; + fieldType?: DataDriftField['type']; + domain?: Feature['domain']; }) => { + const xAxisFormatter = useFieldFormatter(getFieldFormatType(secondaryType)); + const yAxisFormatter = useFieldFormatter(FIELD_FORMAT_IDS.NUMBER); + if (data.length === 0) return ; return ( + + + + + + = ({ +const getStr = (arg: string | string[] | null, fallbackStr?: string): string => { + if (arg === undefined || arg == null) return fallbackStr ?? ''; + + if (typeof arg === 'string') return arg.replaceAll(`'`, ''); + + if (Array.isArray(arg)) return arg.join(','); + + return ''; +}; + +export const DataDriftDetectionAppState: FC = ({ dataView, savedSearch, }) => { @@ -75,6 +94,37 @@ export const DataComparisonDetectionAppState: FC @@ -83,7 +133,15 @@ export const DataComparisonDetectionAppState: FC - + + + diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_chart_tooltip_body.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_chart_tooltip_body.tsx similarity index 80% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_chart_tooltip_body.tsx rename to x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_chart_tooltip_body.tsx index b867239884f7e1..fff45cf27a0ccd 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_chart_tooltip_body.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_chart_tooltip_body.tsx @@ -17,9 +17,29 @@ import { TooltipTableRow, } from '@elastic/charts'; import React from 'react'; +import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; +import { useFieldFormatter } from './charts/default_value_formatter'; const style: TooltipCellStyle = { textAlign: 'right' }; export const DataComparisonChartTooltipBody: TooltipSpec['body'] = ({ items }) => { + const percentFormatter = useFieldFormatter(FIELD_FORMAT_IDS.PERCENT); + + const footer = + items.length > 1 ? ( + + + {} + Diff + + + {items[1].datum.doc_count - items[0].datum.doc_count} + + + {percentFormatter(items[1].datum.percentage - items[0].datum.percentage)} + + + + ) : null; return ( @@ -36,25 +56,12 @@ export const DataComparisonChartTooltipBody: TooltipSpec['body'] = ({ items }) = {} {label} {datum.doc_count} - {`${(datum.percentage * 100).toFixed( - 1 - )}`} + {percentFormatter(datum.percentage)} ))} - - - {} - Diff - - {items[1].datum.doc_count - items[0].datum.doc_count} - - - {`${((items[1].datum.percentage - items[0].datum.percentage) * 100).toFixed(1)}%`} - - - + {footer} ); }; diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_overview_table.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_overview_table.tsx similarity index 64% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_overview_table.tsx rename to x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_overview_table.tsx index 46cd0510443f8f..1c03e18f52e8ef 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_overview_table.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_overview_table.tsx @@ -6,7 +6,7 @@ */ import type { UseTableState } from '@kbn/ml-in-memory-table'; -import React, { ReactNode, useMemo, useState } from 'react'; +import React, { ReactNode, useEffect, useMemo, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiBasicTableColumn, @@ -21,26 +21,23 @@ import { FieldTypeIcon } from '../common/components/field_type_icon'; import { COLLAPSE_ROW, EXPAND_ROW } from '../../../common/i18n_constants'; import { COMPARISON_LABEL, REFERENCE_LABEL } from './constants'; import { useCurrentEuiTheme } from '../common/hooks/use_current_eui_theme'; -import { DataComparisonField, Feature, FETCH_STATUS } from './types'; -import { formatSignificanceLevel } from './data_comparison_utils'; +import { type DataDriftField, type Feature, FETCH_STATUS } from './types'; +import { formatSignificanceLevel } from './data_drift_utils'; import { SingleDistributionChart } from './charts/single_distribution_chart'; import { OverlapDistributionComparison } from './charts/overlap_distribution_chart'; -import { DataComparisonDistributionChart } from './charts/data_comparison_distribution_chart'; +import { DataDriftDistributionChart } from './charts/data_drift_distribution_chart'; -const dataComparisonYesLabel = i18n.translate( - 'xpack.dataVisualizer.dataComparison.fieldTypeYesLabel', - { - defaultMessage: 'Yes', - } -); +const dataComparisonYesLabel = i18n.translate('xpack.dataVisualizer.dataDrift.fieldTypeYesLabel', { + defaultMessage: 'Yes', +}); const dataComparisonNoLabel = i18n.translate( - 'xpack.dataVisualizer.dataComparison.driftDetectedNoLabel', + 'xpack.dataVisualizer.dataDrift.driftDetectedNoLabel', { defaultMessage: 'No', } ); -export const DataComparisonOverviewTable = ({ +export const DataDriftOverviewTable = ({ data, onTableChange, pagination, @@ -51,29 +48,55 @@ export const DataComparisonOverviewTable = ({ status: FETCH_STATUS; } & UseTableState) => { const euiTheme = useCurrentEuiTheme(); - const colors = { - referenceColor: euiTheme.euiColorVis2, - productionColor: euiTheme.euiColorVis1, - }; + + const colors = useMemo( + () => ({ + referenceColor: euiTheme.euiColorVis2, + comparisonColor: euiTheme.euiColorVis1, + }), + [euiTheme] + ); const [itemIdToExpandedRowMap, setItemIdToExpandedRowMap] = useState>( {} ); const referenceDistributionLabel = i18n.translate( - 'xpack.dataVisualizer.dataComparison.dataComparisonDistributionLabel', + 'xpack.dataVisualizer.dataDrift.dataComparisonDistributionLabel', { defaultMessage: '{label} distribution', values: { label: REFERENCE_LABEL }, } ); const comparisonDistributionLabel = i18n.translate( - 'xpack.dataVisualizer.dataComparison.dataComparisonDistributionLabel', + 'xpack.dataVisualizer.dataDrift.dataComparisonDistributionLabel', { defaultMessage: '{label} distribution', values: { label: COMPARISON_LABEL }, } ); + useEffect(() => { + const updatedItemIdToExpandedRowMap = { ...itemIdToExpandedRowMap }; + // Update expanded row in case data is stale + Object.keys(updatedItemIdToExpandedRowMap).forEach((itemId) => { + const item = data.find((d) => d.featureName === itemId); + if (item) { + const { featureName } = item; + + updatedItemIdToExpandedRowMap[featureName] = ( + + ); + } + }); + setItemIdToExpandedRowMap(updatedItemIdToExpandedRowMap); + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [data, colors]); + const columns: Array> = [ { align: 'left', @@ -99,31 +122,31 @@ export const DataComparisonOverviewTable = ({ { field: 'featureName', - name: i18n.translate('xpack.dataVisualizer.dataComparison.fieldNameLabel', { + name: i18n.translate('xpack.dataVisualizer.dataDrift.fieldNameLabel', { defaultMessage: 'Name', }), - 'data-test-subj': 'mlDataComparisonOverviewTableFeatureName', + 'data-test-subj': 'mlDataDriftOverviewTableFeatureName', sortable: true, textOnly: true, }, { field: 'secondaryType', - name: i18n.translate('xpack.dataVisualizer.dataComparison.fieldTypeLabel', { + name: i18n.translate('xpack.dataVisualizer.dataDrift.fieldTypeLabel', { defaultMessage: 'Type', }), - 'data-test-subj': 'mlDataComparisonOverviewTableFeatureType', + 'data-test-subj': 'mlDataDriftOverviewTableFeatureType', sortable: true, textOnly: true, - render: (secondaryType: DataComparisonField['secondaryType']) => { + render: (secondaryType: DataDriftField['secondaryType']) => { return ; }, }, { field: 'driftDetected', - name: i18n.translate('xpack.dataVisualizer.dataComparison.driftDetectedLabel', { + name: i18n.translate('xpack.dataVisualizer.dataDrift.driftDetectedLabel', { defaultMessage: 'Drift detected', }), - 'data-test-subj': 'mlDataComparisonOverviewTableDriftDetected', + 'data-test-subj': 'mlDataDriftOverviewTableDriftDetected', sortable: true, textOnly: true, render: (driftDetected: boolean) => { @@ -134,20 +157,20 @@ export const DataComparisonOverviewTable = ({ field: 'similarityTestPValue', name: ( - {i18n.translate('xpack.dataVisualizer.dataComparison.pValueLabel', { + {i18n.translate('xpack.dataVisualizer.dataDrift.pValueLabel', { defaultMessage: 'Similarity p-value', })} ), - 'data-test-subj': 'mlDataComparisonOverviewTableSimilarityTestPValue', + 'data-test-subj': 'mlDataDriftOverviewTableSimilarityTestPValue', sortable: true, textOnly: true, render: (similarityTestPValue: number) => { @@ -157,7 +180,7 @@ export const DataComparisonOverviewTable = ({ { field: 'referenceHistogram', name: referenceDistributionLabel, - 'data-test-subj': 'mlDataComparisonOverviewTableReferenceDistribution', + 'data-test-subj': 'mlDataDriftOverviewTableReferenceDistribution', sortable: false, render: (referenceHistogram: Feature['referenceHistogram'], item) => { return ( @@ -167,24 +190,26 @@ export const DataComparisonOverviewTable = ({ data={referenceHistogram} color={colors.referenceColor} name={referenceDistributionLabel} + secondaryType={item.secondaryType} />
); }, }, { - field: 'productionHistogram', + field: 'comparisonHistogram', name: comparisonDistributionLabel, - 'data-test-subj': 'mlDataComparisonOverviewTableDataComparisonDistributionChart', + 'data-test-subj': 'mlDataDriftOverviewTableDataComparisonDistributionChart', sortable: false, - render: (productionDistribution: Feature['productionHistogram'], item) => { + render: (comparisonDistribution: Feature['comparisonHistogram'], item) => { return (
); @@ -193,7 +218,7 @@ export const DataComparisonOverviewTable = ({ { field: 'comparisonDistribution', name: 'Comparison', - 'data-test-subj': 'mlDataComparisonOverviewTableDataComparisonDistributionChart', + 'data-test-subj': 'mlDataDriftOverviewTableDataComparisonDistributionChart', sortable: false, render: (comparisonDistribution: Feature['comparisonDistribution'], item) => { return ( @@ -203,6 +228,7 @@ export const DataComparisonOverviewTable = ({ fieldType={item.fieldType} data={comparisonDistribution} colors={colors} + secondaryType={item.secondaryType} />
); @@ -212,8 +238,8 @@ export const DataComparisonOverviewTable = ({ const getRowProps = (item: Feature) => { return { - 'data-test-subj': `mlDataComparisonOverviewTableRow row-${item.featureName}`, - className: 'mlDataComparisonOverviewTableRow', + 'data-test-subj': `mlDataDriftOverviewTableRow row-${item.featureName}`, + className: 'mlDataDriftOverviewTableRow', onClick: () => {}, }; }; @@ -221,8 +247,7 @@ export const DataComparisonOverviewTable = ({ const getCellProps = (item: Feature, column: EuiTableFieldDataColumnType) => { const { field } = column; return { - className: 'mlDataComparisonOverviewTableCell', - 'data-test-subj': `mlDataComparisonOverviewTableCell row-${item.featureName}-column-${String( + 'data-test-subj': `mlDataDriftOverviewTableCell row-${item.featureName}-column-${String( field )}`, textOnly: true, @@ -235,16 +260,12 @@ export const DataComparisonOverviewTable = ({ if (itemIdToExpandedRowMapValues[item.featureName]) { delete itemIdToExpandedRowMapValues[item.featureName]; } else { - const { featureName, comparisonDistribution } = item; itemIdToExpandedRowMapValues[item.featureName] = ( -
- -
+ ); } setItemIdToExpandedRowMap(itemIdToExpandedRowMapValues); @@ -253,11 +274,11 @@ export const DataComparisonOverviewTable = ({ const tableMessage = useMemo(() => { switch (status) { case FETCH_STATUS.NOT_INITIATED: - return i18n.translate('xpack.dataVisualizer.dataComparison.dataComparisonRunAnalysisMsg', { + return i18n.translate('xpack.dataVisualizer.dataDrift.dataComparisonRunAnalysisMsg', { defaultMessage: 'Run analysis to compare reference and comparison data', }); case FETCH_STATUS.LOADING: - return i18n.translate('xpack.dataVisualizer.dataComparison.dataComparisonLoadingMsg', { + return i18n.translate('xpack.dataVisualizer.dataDrift.dataComparisonLoadingMsg', { defaultMessage: 'Analyzing', }); default: @@ -267,12 +288,10 @@ export const DataComparisonOverviewTable = ({ return ( - tableCaption={i18n.translate( - 'xpack.dataVisualizer.dataComparison.dataComparisonTableCaption', - { - defaultMessage: 'Data comparison overview', - } - )} + data-test-subj="mlDataDriftTable" + tableCaption={i18n.translate('xpack.dataVisualizer.dataDrift.dataDriftTableCaption', { + defaultMessage: 'Data drift overview', + })} items={data} rowHeader="featureName" columns={columns} diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_page.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx similarity index 60% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_page.tsx rename to x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx index 801e3c1da7a4bf..86ddff5c25e3fa 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_page.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_page.tsx @@ -16,7 +16,7 @@ import { EuiPanel, EuiSpacer, EuiPageHeader, - EuiCallOut, + EuiHorizontalRule, } from '@elastic/eui'; import type { WindowParameters } from '@kbn/aiops-utils'; @@ -35,13 +35,11 @@ import moment from 'moment'; import { css } from '@emotion/react'; import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; import { i18n } from '@kbn/i18n'; -import { RANDOM_SAMPLER_OPTION, RandomSampler } from '@kbn/ml-random-sampler-utils'; -import { MIN_SAMPLER_PROBABILITY } from '../index_data_visualizer/constants/random_sampler'; +import type { InitialSettings } from './use_data_drift_result'; +import { useDataDriftStateManagerContext } from './use_state_manager'; import { useData } from '../common/hooks/use_data'; import { DV_FROZEN_TIER_PREFERENCE, - DV_RANDOM_SAMPLER_P_VALUE, - DV_RANDOM_SAMPLER_PREFERENCE, DVKey, DVStorageMapped, } from '../index_data_visualizer/types/storage'; @@ -49,7 +47,7 @@ import { useCurrentEuiTheme } from '../common/hooks/use_current_eui_theme'; import { DataComparisonFullAppState, getDefaultDataComparisonState } from './types'; import { useDataSource } from '../common/hooks/data_source_context'; import { useDataVisualizerKibana } from '../kibana_context'; -import { DataComparisonView } from './data_comparison_view'; +import { DataDriftView } from './data_drift_view'; import { COMPARISON_LABEL, REFERENCE_LABEL } from './constants'; import { SearchPanelContent } from '../index_data_visualizer/components/search_panel/search_bar'; import { useSearch } from '../common/hooks/use_search'; @@ -124,40 +122,39 @@ export const PageHeader: FC = () => { ); }; -export const DataComparisonPage: FC = () => { +const getDataDriftDataLabel = (label: string, indexPattern?: string) => + i18n.translate('xpack.dataVisualizer.dataDrift.dataLabel', { + defaultMessage: '{label} data', + values: { label }, + }) + (indexPattern ? `: ${indexPattern}` : ''); + +interface Props { + initialSettings: InitialSettings; +} + +export const DataDriftPage: FC = ({ initialSettings }) => { const { services: { data: dataService }, } = useDataVisualizerKibana(); const { dataView, savedSearch } = useDataSource(); - const [dataComparisonListState, setAiopsListState] = usePageUrlState<{ - pageKey: 'DV_DATA_COMP'; - pageUrlState: DataComparisonFullAppState; - }>('DV_DATA_COMP', getDefaultDataComparisonState()); + const { reference: referenceStateManager, comparison: comparisonStateManager } = + useDataDriftStateManagerContext(); - const [randomSamplerMode, setRandomSamplerMode] = useStorage< - DVKey, - DVStorageMapped - >(DV_RANDOM_SAMPLER_PREFERENCE, RANDOM_SAMPLER_OPTION.ON_AUTOMATIC); + const [dataComparisonListState, setDataComparisonListState] = usePageUrlState<{ + pageKey: 'DV_DATA_DRIFT'; + pageUrlState: DataComparisonFullAppState; + }>('DV_DATA_DRIFT', getDefaultDataComparisonState()); - const [randomSamplerProbability, setRandomSamplerProbability] = useStorage< - DVKey, - DVStorageMapped - >(DV_RANDOM_SAMPLER_P_VALUE, MIN_SAMPLER_PROBABILITY); const [lastRefresh, setLastRefresh] = useState(0); const forceRefresh = useCallback(() => setLastRefresh(Date.now()), [setLastRefresh]); - const randomSampler = useMemo( - () => - new RandomSampler( - randomSamplerMode, - setRandomSamplerMode, - randomSamplerProbability, - setRandomSamplerProbability - ), - // eslint-disable-next-line react-hooks/exhaustive-deps - [] + const randomSampler = useMemo(() => referenceStateManager.randomSampler, [referenceStateManager]); + + const randomSamplerProd = useMemo( + () => comparisonStateManager.randomSampler, + [comparisonStateManager] ); const [globalState, setGlobalState] = useUrlState('_g'); @@ -183,7 +180,7 @@ export const DataComparisonPage: FC = () => { setSelectedSavedSearch(null); } - setAiopsListState({ + setDataComparisonListState({ ...dataComparisonListState, searchQuery: searchParams.searchQuery, searchString: searchParams.searchString, @@ -191,7 +188,7 @@ export const DataComparisonPage: FC = () => { filters: searchParams.filters, }); }, - [selectedSavedSearch, dataComparisonListState, setAiopsListState] + [selectedSavedSearch, dataComparisonListState, setDataComparisonListState] ); const { searchQueryLanguage, searchString, searchQuery } = useSearch( @@ -199,11 +196,14 @@ export const DataComparisonPage: FC = () => { dataComparisonListState ); - const { documentStats, timefilter } = useData( + const { documentStats, documentStatsProd, timefilter } = useData( + initialSettings, dataView, 'data_drift', - searchQuery, + searchString, + searchQueryLanguage, randomSampler, + randomSamplerProd, setGlobalState, undefined ); @@ -243,7 +243,7 @@ export const DataComparisonPage: FC = () => { const euiTheme = useCurrentEuiTheme(); const colors = { referenceColor: euiTheme.euiColorVis2, - productionColor: euiTheme.euiColorVis1, + comparisonColor: euiTheme.euiColorVis1, }; const [windowParameters, setWindowParameters] = useState(); @@ -280,7 +280,7 @@ export const DataComparisonPage: FC = () => { return colors.referenceColor; } if (start >= windowParameters.deviationMin && end <= windowParameters.deviationMax) { - return colors.productionColor; + return colors.comparisonColor; } return null; @@ -289,12 +289,15 @@ export const DataComparisonPage: FC = () => { [JSON.stringify({ windowParameters, colors })] ); + const referenceIndexPatternLabel = initialSettings?.reference + ? getDataDriftDataLabel(REFERENCE_LABEL, initialSettings.reference) + : getDataDriftDataLabel(REFERENCE_LABEL); + const comparisonIndexPatternLabel = initialSettings?.comparison + ? getDataDriftDataLabel(COMPARISON_LABEL, initialSettings?.comparison) + : getDataDriftDataLabel(COMPARISON_LABEL); + return ( - + @@ -308,84 +311,97 @@ export const DataComparisonPage: FC = () => { setSearchParams={setSearchParams} /> - {documentCountStats !== undefined && ( - - - - - - )} + + + + + + + - {!dataView?.isTimeBased() ? ( - -

- {i18n.translate( - 'xpack.dataVisualizer.dataComparisonTimeSeriesWarning.description', - { - defaultMessage: 'Data comparison only runs over time-based indices.', - } - )} -

-
- ) : ( - - )} +
diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_utils.test.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.test.ts similarity index 87% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_utils.test.ts rename to x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.test.ts index 08f0305e4126a6..66dd69f66fb07f 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_utils.test.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { computeChi2PValue } from './data_comparison_utils'; +import { computeChi2PValue } from './data_drift_utils'; import { Histogram } from './types'; describe('computeChi2PValue()', () => { @@ -32,7 +32,7 @@ describe('computeChi2PValue()', () => { percentage: 0.5422117647058824, }, ]; - const productionTerms: Histogram[] = [ + const comparisonTerms: Histogram[] = [ { key: 'ap-northwest-1', doc_count: 40320, @@ -55,7 +55,7 @@ describe('computeChi2PValue()', () => { }, ]; expect(computeChi2PValue([], [])).toStrictEqual(1); - expect(computeChi2PValue(referenceTerms, productionTerms)).toStrictEqual(0.99); + expect(computeChi2PValue(referenceTerms, comparisonTerms)).toStrictEqual(0.99); }); test('should return close to 0 if datasets differ', () => { @@ -71,7 +71,7 @@ describe('computeChi2PValue()', () => { percentage: 0, }, ]; - const productionTerms: Histogram[] = [ + const comparisonTerms: Histogram[] = [ { key: 'jackson', doc_count: 0, @@ -83,6 +83,6 @@ describe('computeChi2PValue()', () => { percentage: 1, }, ]; - expect(computeChi2PValue(referenceTerms, productionTerms)).toStrictEqual(0); + expect(computeChi2PValue(referenceTerms, comparisonTerms)).toStrictEqual(0); }); }); diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_utils.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts similarity index 100% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_utils.ts rename to x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_utils.ts diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_view.tsx b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_view.tsx similarity index 78% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_view.tsx rename to x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_view.tsx index 31134832ec56af..dc4193fe8a331c 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/data_comparison_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/data_drift_view.tsx @@ -16,44 +16,44 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { EuiSwitchEvent } from '@elastic/eui/src/components/form/switch/switch'; import { useTableState } from '@kbn/ml-in-memory-table'; import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; -import { RandomSampler } from '@kbn/ml-random-sampler-utils'; -import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { kbnTypeToSupportedType } from '../common/util/field_types_utils'; -import { getDataComparisonType, useFetchDataComparisonResult } from './use_data_drift_result'; -import type { DataComparisonField, Feature, TimeRange } from './types'; -import { DataComparisonOverviewTable } from './data_comparison_overview_table'; +import { + getDataComparisonType, + type InitialSettings, + useFetchDataComparisonResult, +} from './use_data_drift_result'; +import type { DataDriftField, Feature, TimeRange } from './types'; +import { DataDriftOverviewTable } from './data_drift_overview_table'; const showOnlyDriftedFieldsOptionLabel = i18n.translate( - 'xpack.dataVisualizer.dataComparison.showOnlyDriftedFieldsOptionLabel', + 'xpack.dataVisualizer.dataDrift.showOnlyDriftedFieldsOptionLabel', { defaultMessage: 'Show only fields with drifted data' } ); -interface DataComparisonViewProps { +interface DataDriftViewProps { windowParameters?: WindowParameters; dataView: DataView; searchString: Query['query']; - searchQuery: QueryDslQueryContainer; searchQueryLanguage: SearchQueryLanguage; isBrushCleared: boolean; runAnalysisDisabled?: boolean; onReset: () => void; lastRefresh: number; - forceRefresh: () => void; - randomSampler: RandomSampler; + onRefresh: () => void; + initialSettings: InitialSettings; } // Data drift view -export const DataComparisonView = ({ +export const DataDriftView = ({ windowParameters, dataView, searchString, - searchQuery, searchQueryLanguage, onReset, isBrushCleared, lastRefresh, - forceRefresh, - randomSampler, -}: DataComparisonViewProps) => { + onRefresh, + initialSettings, +}: DataDriftViewProps) => { const [showDataComparisonOnly, setShowDataComparisonOnly] = useState(false); const [currentAnalysisWindowParameters, setCurrentAnalysisWindowParameters] = useState< @@ -62,16 +62,16 @@ export const DataComparisonView = ({ const [fetchInfo, setFetchIno] = useState< | { - fields: DataComparisonField[]; + fields: DataDriftField[]; currentDataView: DataView; - timeRanges?: { reference: TimeRange; production: TimeRange }; + timeRanges?: { reference: TimeRange; comparison: TimeRange }; } | undefined >(); - const onRefresh = useCallback(() => { + const refresh = useCallback(() => { setCurrentAnalysisWindowParameters(windowParameters); - const mergedFields: DataComparisonField[] = []; + const mergedFields: DataDriftField[] = []; if (dataView) { mergedFields.push( ...dataView.fields @@ -101,7 +101,7 @@ export const DataComparisonView = ({ start: windowParameters.baselineMin, end: windowParameters.baselineMax, }, - production: { + comparison: { start: windowParameters.deviationMin, end: windowParameters.deviationMax, }, @@ -109,18 +109,17 @@ export const DataComparisonView = ({ } : {}), }); - if (forceRefresh) { - forceRefresh(); + if (onRefresh) { + onRefresh(); } - }, [dataView, windowParameters, forceRefresh]); + }, [dataView, windowParameters, onRefresh]); const { result, cancelRequest } = useFetchDataComparisonResult({ ...fetchInfo, + initialSettings, lastRefresh, - randomSampler, searchString, searchQueryLanguage, - searchQuery, }); const filteredData = useMemo(() => { @@ -152,7 +151,9 @@ export const DataComparisonView = ({ setPageIndex(0); }; - return windowParameters === undefined ? ( + const requiresWindowParameters = dataView?.isTimeBased() && windowParameters === undefined; + + return requiresWindowParameters ? ( @@ -170,13 +171,12 @@ export const DataComparisonView = ({ body={

} - data-test-subj="dataVisualizerNoWindowParametersEmptyPrompt" + data-test-subj="dataDriftNoWindowParametersEmptyPrompt" /> ) : (
@@ -186,10 +186,10 @@ export const DataComparisonView = ({ progress={result.loaded} progressMessage={result.progressMessage ?? ''} isRunning={result.loaded > 0 && result.loaded < 1} - onRefresh={onRefresh} + onRefresh={refresh} onCancel={cancelRequest} shouldRerunAnalysis={shouldRerunAnalysis} - runAnalysisDisabled={!dataView || !windowParameters} + runAnalysisDisabled={!dataView || requiresWindowParameters} > @@ -214,7 +214,7 @@ export const DataComparisonView = ({ body={{result.errorBody}} /> ) : ( - void; approximate: boolean; + stateManager: DataDriftStateManager; + label?: string; + id?: string; } export const DocumentCountWithDualBrush: FC = ({ + id, randomSampler, reload, brushSelectionUpdateHandler, @@ -60,13 +70,35 @@ export const DocumentCountWithDualBrush: FC = ({ barHighlightColorOverride, windowParameters, incomingInitialAnalysisStart, - approximate, + stateManager, + label, ...docCountChartProps }) => { const { - services: { data, uiSettings, fieldFormats, charts }, + services: { + data, + uiSettings, + fieldFormats, + charts, + unifiedSearch: { + ui: { SearchBar }, + }, + }, } = useDataVisualizerKibana(); + const { dataView } = useDataDriftStateManagerContext(); + + const approximate = useObservable( + randomSampler + .getProbability$() + .pipe( + map((samplingProbability) => + isDefined(samplingProbability) ? samplingProbability < 1 : false + ) + ), + false + ); + const bucketTimestamps = Object.keys(documentCountStats?.buckets ?? {}).map((time) => +time); const splitBucketTimestamps = Object.keys(documentCountStatsSplit?.buckets ?? {}).map( (time) => +time @@ -74,6 +106,35 @@ export const DocumentCountWithDualBrush: FC = ({ const timeRangeEarliest = Math.min(...[...bucketTimestamps, ...splitBucketTimestamps]); const timeRangeLatest = Math.max(...[...bucketTimestamps, ...splitBucketTimestamps]); + if (dataView.getTimeField() === undefined) { + return ( + + +

{label}

+
+ + + stateManager.setFilters(filters)} + indexPatterns={[dataView]} + displayStyle={'inPage'} + isClearable={true} + /> + + + + + +
+ ); + } if ( documentCountStats === undefined || documentCountStats.buckets === undefined || @@ -99,13 +160,35 @@ export const DocumentCountWithDualBrush: FC = ({ } return ( - - + + + + + + - + stateManager.setFilters(filters)} + indexPatterns={[dataView]} + displayStyle={'inPage'} + isClearable={true} + customSubmitButton={
} + /> + - + @@ -125,6 +208,8 @@ export const DocumentCountWithDualBrush: FC = ({ barColorOverride={barColorOverride} barHighlightColorOverride={barHighlightColorOverride} {...docCountChartProps} + height={60} + dataTestSubj={getDataTestSubject('dataDriftDocCountChart', id)} /> )} diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/index.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/index.ts similarity index 64% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/index.ts rename to x-pack/plugins/data_visualizer/public/application/data_drift/index.ts index 887f640da0d1af..9d0507e9d404d1 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/index.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/index.ts @@ -5,11 +5,8 @@ * 2.0. */ -import { - DataComparisonDetectionAppState, - type DataComparisonSpec, -} from './data_comparison_app_state'; -export { type DataComparisonSpec }; +import { DataDriftDetectionAppState, type DataDriftSpec } from './data_drift_app_state'; +export { type DataDriftSpec }; // required for dynamic import using React.lazy() // eslint-disable-next-line import/no-default-export -export default DataComparisonDetectionAppState; +export default DataDriftDetectionAppState; diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/types.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/types.ts similarity index 76% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/types.ts rename to x-pack/plugins/data_visualizer/public/application/data_drift/types.ts index 46272c045d51c5..55da47f44d01cb 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/types.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/types.ts @@ -6,18 +6,23 @@ */ import { isPopulatedObject } from '@kbn/ml-is-populated-object'; -import { Filter, Query } from '@kbn/es-query'; +import type { Filter, Query } from '@kbn/es-query'; import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { SEARCH_QUERY_LANGUAGE, SearchQueryLanguage } from '@kbn/ml-query-utils'; import { DATA_COMPARISON_TYPE } from './constants'; -export interface DataComparisonAppState { +export interface DataComparisonQueryState { searchString?: Query['query']; searchQuery?: estypes.QueryDslQueryContainer; searchQueryLanguage: SearchQueryLanguage; filters?: Filter[]; } +export interface DataComparisonAppState extends DataComparisonQueryState { + reference: DataComparisonQueryState; + comparison: DataComparisonQueryState; +} + export type DataComparisonFullAppState = Required; export type BasicAppState = DataComparisonFullAppState; @@ -32,6 +37,18 @@ export const getDefaultDataComparisonState = ( searchQuery: defaultSearchQuery, searchQueryLanguage: SEARCH_QUERY_LANGUAGE.KUERY, filters: [], + reference: { + searchString: '', + searchQuery: defaultSearchQuery, + searchQueryLanguage: SEARCH_QUERY_LANGUAGE.KUERY, + filters: [], + }, + comparison: { + searchString: '', + searchQuery: defaultSearchQuery, + searchQueryLanguage: SEARCH_QUERY_LANGUAGE.KUERY, + filters: [], + }, ...overrides, }); @@ -45,18 +62,28 @@ export interface ComparisonHistogram extends Histogram { g: string; } +interface Domain { + min: number; + max: number; +} // Show the overview table export interface Feature { featureName: string; - fieldType: DataComparisonField['type']; + fieldType: DataDriftField['type']; + secondaryType: DataDriftField['secondaryType']; driftDetected: boolean; similarityTestPValue: number; - productionHistogram: Histogram[]; + comparisonHistogram: Histogram[]; referenceHistogram: Histogram[]; comparisonDistribution: ComparisonHistogram[]; + domain?: { + doc_count: Domain; + percentage: Domain; + x: Domain; + }; } -export interface DataComparisonField { +export interface DataDriftField { field: string; type: DataComparisonType; secondaryType: string; @@ -92,7 +119,7 @@ export interface NumericDriftData { pValue: number; range?: Range; referenceHistogram: Histogram[]; - productionHistogram: Histogram[]; + comparisonHistogram: Histogram[]; secondaryType: string; } export interface CategoricalDriftData { diff --git a/x-pack/plugins/data_visualizer/public/application/data_comparison/use_data_drift_result.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts similarity index 78% rename from x-pack/plugins/data_visualizer/public/application/data_comparison/use_data_drift_result.ts rename to x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts index a8e145c3fee1ba..7707f23afd3e02 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_comparison/use_data_drift_result.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts @@ -17,11 +17,14 @@ import type { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesW import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; import { getDefaultDSLQuery } from '@kbn/ml-query-utils'; import { i18n } from '@kbn/i18n'; -import { RandomSampler, RandomSamplerWrapper } from '@kbn/ml-random-sampler-utils'; +import { RandomSamplerWrapper } from '@kbn/ml-random-sampler-utils'; import { extractErrorMessage } from '@kbn/ml-error-utils'; import { AggregationsAggregate } from '@elastic/elasticsearch/lib/api/types'; import { QueryDslBoolQuery } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { isDefined } from '@kbn/ml-is-defined'; +import { mapAndFlattenFilters } from '@kbn/data-plugin/public'; +import { createMergedEsQuery } from '../index_data_visualizer/utils/saved_search_utils'; +import { useDataDriftStateManagerContext } from './use_state_manager'; import { useDataVisualizerKibana } from '../kibana_context'; import { REFERENCE_LABEL, @@ -39,12 +42,13 @@ import { Result, isNumericDriftData, Feature, - DataComparisonField, + DataDriftField, TimeRange, + ComparisonHistogram, } from './types'; -import { computeChi2PValue } from './data_comparison_utils'; +import { computeChi2PValue } from './data_drift_utils'; -export const getDataComparisonType = (kibanaType: string): DataComparisonField['type'] => { +export const getDataComparisonType = (kibanaType: string): DataDriftField['type'] => { switch (kibanaType) { case 'number': return DATA_COMPARISON_TYPE.NUMERIC; @@ -58,6 +62,41 @@ export const getDataComparisonType = (kibanaType: string): DataComparisonField[' type UseDataSearch = ReturnType; +const computeDomain = (comparisonDistribution: Histogram[] | ComparisonHistogram[]) => { + const domain: NonNullable = { + x: { min: 0, max: 0 }, + percentage: { min: 0, max: 0 }, + doc_count: { min: 0, max: 0 }, + }; + + comparisonDistribution.forEach((dist) => { + if (isDefined(dist.percentage)) { + if (dist.percentage >= domain.percentage.max) { + domain.percentage.max = dist.percentage; + } else { + domain.percentage.min = dist.percentage; + } + } + + if (isDefined(dist.doc_count)) { + if (dist.doc_count >= domain.doc_count.max) { + domain.doc_count.max = dist.doc_count; + } else { + domain.doc_count.min = dist.doc_count; + } + } + + const parsedKey = typeof dist.key === 'number' ? dist.key : parseFloat(dist.key); + if (!isNaN(parsedKey)) { + if (parsedKey >= domain.x.max) { + domain.x.max = parsedKey; + } else { + domain.x.min = parsedKey; + } + } + }); + return domain; +}; export const useDataSearch = () => { const { data } = useDataVisualizerKibana().services; @@ -130,10 +169,16 @@ const processDataComparisonResult = ( ): Feature[] => { return Object.entries(result).map(([featureName, data]) => { if (isNumericDriftData(data)) { - // normalize data.referenceHistogram and data.productionHistogram to use frequencies instead of counts + // normalize data.referenceHistogram and data.comparisonHistogram to use frequencies instead of counts const referenceHistogram: Histogram[] = normalizeHistogram(data.referenceHistogram); - const productionHistogram: Histogram[] = normalizeHistogram(data.productionHistogram); + const comparisonHistogram: Histogram[] = normalizeHistogram(data.comparisonHistogram); + const comparisonDistribution: ComparisonHistogram[] = [ + ...referenceHistogram.map((h) => ({ ...h, g: REFERENCE_LABEL })), + ...comparisonHistogram.map((h) => ({ ...h, g: COMPARISON_LABEL })), + ]; + + const domain = computeDomain(comparisonHistogram); return { featureName, secondaryType: data.secondaryType, @@ -141,11 +186,9 @@ const processDataComparisonResult = ( driftDetected: data.pValue < DRIFT_P_VALUE_THRESHOLD, similarityTestPValue: data.pValue, referenceHistogram: referenceHistogram ?? [], - productionHistogram: productionHistogram ?? [], - comparisonDistribution: [ - ...referenceHistogram.map((h) => ({ ...h, g: REFERENCE_LABEL })), - ...productionHistogram.map((h) => ({ ...h, g: COMPARISON_LABEL })), - ], + comparisonHistogram: comparisonHistogram ?? [], + comparisonDistribution, + domain, }; } @@ -163,12 +206,12 @@ const processDataComparisonResult = ( (acc, term) => acc + term.doc_count, data.baselineSumOtherDocCount ); - const productionTotalDocCount: number = data.driftedTerms.reduce( + const comparisonTotalDocCount: number = data.driftedTerms.reduce( (acc, term) => acc + term.doc_count, data.driftedSumOtherDocCount ); - // Sort the categories (allKeys) by the following metric: Math.abs(productionDocCount-referenceDocCount)/referenceDocCount + // Sort the categories (allKeys) by the following metric: Math.abs(comparisonDocCount-referenceDocCount)/referenceDocCount const sortedKeys = allKeys .map((k) => { const key = k.toString(); @@ -176,11 +219,11 @@ const processDataComparisonResult = ( const driftedTerm = data.driftedTerms.find((t) => t.key === key); if (baselineTerm && driftedTerm) { const referencePercentage = baselineTerm.doc_count / referenceTotalDocCount; - const productionPercentage = driftedTerm.doc_count / productionTotalDocCount; + const comparisonPercentage = driftedTerm.doc_count / comparisonTotalDocCount; return { key, relative_drift: - Math.abs(productionPercentage - referencePercentage) / referencePercentage, + Math.abs(comparisonPercentage - referencePercentage) / referencePercentage, }; } return { @@ -199,10 +242,14 @@ const processDataComparisonResult = ( const { normalizedTerms: normalizedDriftedTerms } = normalizeTerms( data.driftedTerms, sortedKeys, - productionTotalDocCount + comparisonTotalDocCount ); const pValue: number = computeChi2PValue(normalizedBaselineTerms, normalizedDriftedTerms); + const comparisonDistribution = [ + ...normalizedBaselineTerms.map((h) => ({ ...h, g: REFERENCE_LABEL })), + ...normalizedDriftedTerms.map((h) => ({ ...h, g: COMPARISON_LABEL })), + ]; return { featureName, secondaryType: data.secondaryType, @@ -210,11 +257,9 @@ const processDataComparisonResult = ( driftDetected: pValue < DRIFT_P_VALUE_THRESHOLD, similarityTestPValue: pValue, referenceHistogram: normalizedBaselineTerms ?? [], - productionHistogram: normalizedDriftedTerms ?? [], - comparisonDistribution: [ - ...normalizedBaselineTerms.map((h) => ({ ...h, g: REFERENCE_LABEL })), - ...normalizedDriftedTerms.map((h) => ({ ...h, g: COMPARISON_LABEL })), - ], + comparisonHistogram: normalizedDriftedTerms ?? [], + comparisonDistribution, + domain: computeDomain(comparisonDistribution), }; }); }; @@ -259,13 +304,13 @@ const getDataComparisonQuery = ({ } } - const refDataQuery: NonNullable = { + const queryAndRuntimeMappings: NonNullable = { query, }; if (runtimeFields) { - refDataQuery.runtime_mappings = runtimeFields; + queryAndRuntimeMappings.runtime_mappings = runtimeFields; } - return refDataQuery; + return queryAndRuntimeMappings; }; const fetchReferenceBaselineData = async ({ @@ -277,7 +322,7 @@ const fetchReferenceBaselineData = async ({ }: { baseRequest: EsRequestParams; dataSearch: UseDataSearch; - fields: DataComparisonField[]; + fields: DataDriftField[]; randomSamplerWrapper: RandomSamplerWrapper; signal: AbortSignal; }) => { @@ -332,7 +377,7 @@ const fetchComparisonDriftedData = async ({ }: { baseRequest: EsRequestParams; dataSearch: UseDataSearch; - fields: DataComparisonField[]; + fields: DataDriftField[]; randomSamplerWrapper: RandomSamplerWrapper; signal: AbortSignal; baselineResponseAggs: object; @@ -411,7 +456,7 @@ const fetchHistogramData = async ({ }: { baseRequest: EsRequestParams; dataSearch: UseDataSearch; - fields: DataComparisonField[]; + fields: DataDriftField[]; randomSamplerWrapper: RandomSamplerWrapper; signal: AbortSignal; baselineResponseAggs: Record; @@ -504,14 +549,14 @@ export const fetchInParallelChunks = async < asyncFetchFn, errorMsg, }: { - fields: DataComparisonField[]; + fields: DataDriftField[]; randomSamplerWrapper: RandomSamplerWrapper; - asyncFetchFn: (chunkedFields: DataComparisonField[]) => Promise; + asyncFetchFn: (chunkedFields: DataDriftField[]) => Promise; errorMsg?: string; }): Promise => { const { unwrap } = randomSamplerWrapper; const results = await Promise.allSettled( - chunk(fields, 30).map((chunkedFields: DataComparisonField[]) => asyncFetchFn(chunkedFields)) + chunk(fields, 30).map((chunkedFields: DataDriftField[]) => asyncFetchFn(chunkedFields)) ); const mergedResults = results @@ -532,7 +577,7 @@ export const fetchInParallelChunks = async < // eslint-disable-next-line no-console console.error(error); return { - error: errorMsg ?? 'An error occurred fetching data comparison data', + error: errorMsg ?? 'An error occurred fetching data drift data', errorBody: error.reason.message, }; } @@ -551,22 +596,29 @@ const initialState = { error: undefined, errorBody: undefined, }; + +export interface InitialSettings { + index: string; + comparison: string; + reference: string; + timeField: string; +} + export const useFetchDataComparisonResult = ( { fields, + initialSettings, currentDataView, timeRanges, - searchQuery, searchString, + searchQueryLanguage, lastRefresh, - randomSampler, }: { lastRefresh: number; - randomSampler?: RandomSampler; - fields?: DataComparisonField[]; + initialSettings?: InitialSettings; + fields?: DataDriftField[]; currentDataView?: DataView; - timeRanges?: { reference: TimeRange; production: TimeRange }; - searchQuery?: estypes.QueryDslQueryContainer; + timeRanges?: { reference: TimeRange; comparison: TimeRange }; searchString?: Query['query']; searchQueryLanguage?: SearchQueryLanguage; } = { lastRefresh: 0 } @@ -576,6 +628,13 @@ export const useFetchDataComparisonResult = ( const [loaded, setLoaded] = useState(0); const [progressMessage, setProgressMessage] = useState(); const abortController = useRef(new AbortController()); + const { + uiSettings, + data: { query: queryManager }, + } = useDataVisualizerKibana().services; + + const { reference: referenceStateManager, comparison: comparisonStateManager } = + useDataDriftStateManagerContext(); const cancelRequest = useCallback(() => { abortController.current.abort(); @@ -588,9 +647,12 @@ export const useFetchDataComparisonResult = ( useEffect( () => { const doFetchEsRequest = async function () { - if (!randomSampler) return; + const randomSampler = referenceStateManager.randomSampler; + const randomSamplerProd = comparisonStateManager.randomSampler; + if (!randomSampler || !randomSamplerProd) return; const randomSamplerWrapper = randomSampler.createRandomSamplerWrapper(); + const prodRandomSamplerWrapper = randomSamplerProd.createRandomSamplerWrapper(); setLoaded(0); setResult({ @@ -600,7 +662,7 @@ export const useFetchDataComparisonResult = ( }); setProgressMessage( - i18n.translate('xpack.dataVisualizer.dataComparison.progress.started', { + i18n.translate('xpack.dataVisualizer.dataDrift.progress.started', { defaultMessage: `Ready to fetch data for comparison.`, }) ); @@ -611,19 +673,35 @@ export const useFetchDataComparisonResult = ( setResult({ data: undefined, status: FETCH_STATUS.LOADING, error: undefined }); // Place holder for when there might be difference data views in the future - const referenceIndex = currentDataView?.getIndexPattern(); - const productionIndex = referenceIndex; + const referenceIndex = initialSettings + ? initialSettings.reference + : currentDataView?.getIndexPattern(); + const comparisonIndex = initialSettings ? initialSettings.comparison : referenceIndex; const runtimeFields = currentDataView?.getRuntimeMappings(); setProgressMessage( - i18n.translate('xpack.dataVisualizer.dataComparison.progress.loadedFields', { + i18n.translate('xpack.dataVisualizer.dataDrift.progress.loadedFields', { defaultMessage: `Loaded fields from index '{referenceIndex}' to analyze.`, values: { referenceIndex }, }) ); + + const kqlQuery = + searchString !== undefined && searchQueryLanguage !== undefined + ? { query: searchString, language: searchQueryLanguage } + : undefined; + const refDataQuery = getDataComparisonQuery({ - searchQuery, + searchQuery: createMergedEsQuery( + kqlQuery, + mapAndFlattenFilters([ + ...queryManager.filterManager.getFilters(), + ...(referenceStateManager.filters ?? []), + ]), + currentDataView, + uiSettings + ), datetimeField: currentDataView?.timeFieldName, runtimeFields, timeRange: timeRanges?.reference, @@ -633,7 +711,7 @@ export const useFetchDataComparisonResult = ( const fieldsCount = fields.length; setProgressMessage( - i18n.translate('xpack.dataVisualizer.dataComparison.progress.loadingReference', { + i18n.translate('xpack.dataVisualizer.dataDrift.progress.loadingReference', { defaultMessage: `Loading reference data for {fieldsCount} fields.`, values: { fieldsCount }, }) @@ -673,45 +751,54 @@ export const useFetchDataComparisonResult = ( } setProgressMessage( - i18n.translate('xpack.dataVisualizer.dataComparison.progress.loadedReference', { + i18n.translate('xpack.dataVisualizer.dataDrift.progress.loadedReference', { defaultMessage: `Loaded reference data.`, }) ); setLoaded(0.25); const prodDataQuery = getDataComparisonQuery({ - searchQuery, + searchQuery: createMergedEsQuery( + kqlQuery, + mapAndFlattenFilters([ + ...queryManager.filterManager.getFilters(), + ...(comparisonStateManager.filters ?? []), + ]), + currentDataView, + uiSettings + ), datetimeField: currentDataView?.timeFieldName, runtimeFields, - timeRange: timeRanges?.production, + timeRange: timeRanges?.comparison, }); setProgressMessage( - i18n.translate('xpack.dataVisualizer.dataComparison.progress.loadingComparison', { + i18n.translate('xpack.dataVisualizer.dataDrift.progress.loadingComparison', { defaultMessage: `Loading comparison data for {fieldsCount} fields.`, values: { fieldsCount }, }) ); const driftedRequest: EsRequestParams = { - index: productionIndex, + index: comparisonIndex, body: { size: 0, aggs: {} as Record, ...prodDataQuery, }, }; + const driftedRespAggs = await fetchInParallelChunks({ fields, - randomSamplerWrapper, + randomSamplerWrapper: prodRandomSamplerWrapper, - asyncFetchFn: (chunkedFields: DataComparisonField[]) => + asyncFetchFn: (chunkedFields: DataDriftField[]) => fetchComparisonDriftedData({ dataSearch, baseRequest: driftedRequest, baselineResponseAggs, fields: chunkedFields, - randomSamplerWrapper, + randomSamplerWrapper: prodRandomSamplerWrapper, signal, }), }); @@ -727,7 +814,7 @@ export const useFetchDataComparisonResult = ( setLoaded(0.5); setProgressMessage( - i18n.translate('xpack.dataVisualizer.dataComparison.progress.loadedComparison', { + i18n.translate('xpack.dataVisualizer.dataDrift.progress.loadedComparison', { defaultMessage: `Loaded comparison data. Now loading histogram data.`, }) ); @@ -745,7 +832,7 @@ export const useFetchDataComparisonResult = ( fields, randomSamplerWrapper, - asyncFetchFn: (chunkedFields: DataComparisonField[]) => + asyncFetchFn: (chunkedFields: DataDriftField[]) => fetchHistogramData({ dataSearch, baseRequest: referenceHistogramRequest, @@ -769,16 +856,13 @@ export const useFetchDataComparisonResult = ( setLoaded(0.75); setProgressMessage( - i18n.translate( - 'xpack.dataVisualizer.dataComparison.progress.loadedReferenceHistogram', - { - defaultMessage: `Loaded histogram data for reference data set.`, - } - ) + i18n.translate('xpack.dataVisualizer.dataDrift.progress.loadedReferenceHistogram', { + defaultMessage: `Loaded histogram data for reference data set.`, + }) ); - const productionHistogramRequest: EsRequestParams = { - index: productionIndex, + const comparisonHistogramRequest: EsRequestParams = { + index: comparisonIndex, body: { size: 0, aggs: {} as Record, @@ -786,14 +870,14 @@ export const useFetchDataComparisonResult = ( }, }; - const productionHistogramRespAggs = await fetchInParallelChunks({ + const comparisonHistogramRespAggs = await fetchInParallelChunks({ fields, randomSamplerWrapper, - asyncFetchFn: (chunkedFields: DataComparisonField[]) => + asyncFetchFn: (chunkedFields: DataDriftField[]) => fetchHistogramData({ dataSearch, - baseRequest: productionHistogramRequest, + baseRequest: comparisonHistogramRequest, baselineResponseAggs, driftedRespAggs, fields: chunkedFields, @@ -802,12 +886,12 @@ export const useFetchDataComparisonResult = ( }), }); - if (isReturnedError(productionHistogramRespAggs)) { + if (isReturnedError(comparisonHistogramRespAggs)) { setResult({ data: undefined, status: FETCH_STATUS.FAILURE, - error: productionHistogramRespAggs.error, - errorBody: productionHistogramRespAggs.errorBody, + error: comparisonHistogramRespAggs.error, + errorBody: comparisonHistogramRespAggs.errorBody, }); return; } @@ -818,14 +902,14 @@ export const useFetchDataComparisonResult = ( type === DATA_COMPARISON_TYPE.NUMERIC && driftedRespAggs[`${field}_ks_test`] && referenceHistogramRespAggs[`${field}_histogram`] && - productionHistogramRespAggs[`${field}_histogram`] + comparisonHistogramRespAggs[`${field}_histogram`] ) { data[field] = { secondaryType, type: DATA_COMPARISON_TYPE.NUMERIC, pValue: driftedRespAggs[`${field}_ks_test`].two_sided, referenceHistogram: referenceHistogramRespAggs[`${field}_histogram`].buckets, - productionHistogram: productionHistogramRespAggs[`${field}_histogram`].buckets, + comparisonHistogram: comparisonHistogramRespAggs[`${field}_histogram`].buckets, }; } if ( @@ -846,7 +930,7 @@ export const useFetchDataComparisonResult = ( } setProgressMessage( - i18n.translate('xpack.dataVisualizer.dataComparison.progress.loadedHistogramData', { + i18n.translate('xpack.dataVisualizer.dataDrift.progress.loadedHistogramData', { defaultMessage: `Loaded histogram data for comparison data set.`, }) ); @@ -862,7 +946,7 @@ export const useFetchDataComparisonResult = ( setResult({ data: undefined, status: FETCH_STATUS.FAILURE, - error: 'An error occurred while fetching data comparison data', + error: 'An error occurred while fetching data drift data', errorBody: extractErrorMessage(e), }); } @@ -872,6 +956,8 @@ export const useFetchDataComparisonResult = ( }, // eslint-disable-next-line react-hooks/exhaustive-deps [ + referenceStateManager, + comparisonStateManager, dataSearch, // eslint-disable-next-line react-hooks/exhaustive-deps JSON.stringify({ diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/use_state_manager.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/use_state_manager.ts new file mode 100644 index 00000000000000..e6536e130e9827 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/use_state_manager.ts @@ -0,0 +1,84 @@ +/* + * 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 { createContext, useContext, useState } from 'react'; +import { DataView } from '@kbn/data-views-plugin/common'; +import type { Filter } from '@kbn/es-query'; +import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; +import { RandomSampler } from '@kbn/ml-random-sampler-utils'; + +export const defaultSearchQuery = { + match_all: {}, +}; + +interface StateManagerInitialParams { + id: string; + indexPattern: string; + searchString: string; + searchQuery: estypes.QueryDslQueryContainer; + searchQueryLanguage: SearchQueryLanguage; + filters: Filter[]; + timeField?: string; +} + +export const DataDriftStateManagerContext = createContext<{ + dataView: DataView; + reference: DataDriftStateManager; + comparison: DataDriftStateManager; +}>({ + get dataView(): never { + throw new Error('DataDriftStateManagerContext is not implemented'); + }, + get reference(): never { + throw new Error('reference is not implemented'); + }, + get comparison(): never { + throw new Error('comparison is not implemented'); + }, +}); + +export type DataDriftStateManager = ReturnType; + +export const useDataDriftStateManager = ({ + id, + indexPattern: initialIndexPattern, + searchString: initialSearchString, + searchQuery: initialSearchQuery, + searchQueryLanguage: initialSearchQueryLanguage, + filters: initialFilters, + timeField: initialTimeField, +}: StateManagerInitialParams) => { + const [query, setQuery] = useState(initialSearchQuery); + const [indexPattern, setIndexPattern] = useState(initialIndexPattern); + const [searchString, setSearchString] = useState(initialSearchString); + const [searchQueryLanguage, setSearchQueryLanguage] = useState(initialSearchQueryLanguage); + const [filters, setFilters] = useState(initialFilters); + const [timeField, setTimeField] = useState(initialTimeField); + const [randomSampler] = useState(new RandomSampler()); + + return { + id, + query, + setQuery, + indexPattern, + setIndexPattern, + searchString, + setSearchString, + searchQueryLanguage, + setSearchQueryLanguage, + filters, + setFilters, + timeField, + setTimeField, + randomSampler, + }; +}; + +export function useDataDriftStateManagerContext() { + return useContext(DataDriftStateManagerContext); +} diff --git a/x-pack/plugins/data_visualizer/public/application/index.ts b/x-pack/plugins/data_visualizer/public/application/index.ts index 8a89702d5ea956..d2bf7ed6a8f0e9 100644 --- a/x-pack/plugins/data_visualizer/public/application/index.ts +++ b/x-pack/plugins/data_visualizer/public/application/index.ts @@ -12,4 +12,4 @@ export type { IndexDataVisualizerViewProps, } from './index_data_visualizer'; export { IndexDataVisualizer } from './index_data_visualizer'; -export type { DataComparisonSpec } from './data_comparison'; +export type { DataDriftSpec } from './data_drift'; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx index 256d77fec965b6..d752cb4b166f59 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx @@ -21,7 +21,7 @@ import { EuiTitle, } from '@elastic/eui'; -import { Filter, FilterStateStore, Query } from '@kbn/es-query'; +import { type Filter, FilterStateStore, type Query } from '@kbn/es-query'; import { generateFilters } from '@kbn/data-plugin/public'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { usePageUrlState, useUrlState } from '@kbn/ml-url-state'; @@ -33,7 +33,7 @@ import { import { useStorage } from '@kbn/ml-local-storage'; import type { SavedSearch } from '@kbn/saved-search-plugin/public'; -import { SEARCH_QUERY_LANGUAGE, SearchQueryLanguage } from '@kbn/ml-query-utils'; +import { SEARCH_QUERY_LANGUAGE, type SearchQueryLanguage } from '@kbn/ml-query-utils'; import { kbnTypeToSupportedType } from '../../../common/util/field_types_utils'; import { useCurrentEuiTheme } from '../../../common/hooks/use_current_eui_theme'; import { diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/search_bar.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/search_bar.tsx index 9819d3f9d9e91b..3ad691bbe11ce2 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/search_bar.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/search_panel/search_bar.tsx @@ -5,12 +5,12 @@ * 2.0. */ -import { Filter, Query, TimeRange } from '@kbn/es-query'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; import React, { useEffect, useState } from 'react'; import { isDefined } from '@kbn/ml-is-defined'; import { DataView } from '@kbn/data-views-plugin/common'; -import { SearchQueryLanguage } from '@kbn/ml-query-utils'; +import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; import { createMergedEsQuery } from '../../utils/saved_search_utils'; import { useDataVisualizerKibana } from '../../../kibana_context'; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx index 7e1ea426f0637b..6b4a401b106295 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx @@ -265,10 +265,13 @@ export const DataVisualizerStateContextProvider: FC = ({ getAdditionalLinks, isServerless = false }) => { +export const IndexDataVisualizer: FC = ({ + getAdditionalLinks, + showFrozenDataTierChoice = true, +}) => { const coreStart = getCoreStart(); const { data, @@ -302,7 +305,7 @@ export const IndexDataVisualizer: FC = ({ getAdditionalLinks, isServerles const datePickerDeps: DatePickerDependencies = { ...pick(services, ['data', 'http', 'notifications', 'theme', 'uiSettings', 'i18n']), uiSettingsKeys: UI_SETTINGS, - isServerless, + showFrozenDataTierChoice, }; return ( diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/locator/locator.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/locator/locator.ts index 6d2fffd09ac3b9..ecba601a40a07d 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/locator/locator.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/locator/locator.ts @@ -6,8 +6,8 @@ */ import { encode } from '@kbn/rison'; import { stringify } from 'query-string'; -import { SerializableRecord } from '@kbn/utility-types'; -import { Filter, TimeRange } from '@kbn/es-query'; +import type { SerializableRecord } from '@kbn/utility-types'; +import type { Filter, TimeRange } from '@kbn/es-query'; import type { RefreshInterval } from '@kbn/data-plugin/common'; import { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/common'; import { GlobalQueryStateFromUrl } from '@kbn/data-plugin/public'; diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/utils/saved_search_utils.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/utils/saved_search_utils.ts index 6961c5d822a675..04bc52bf080573 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/utils/saved_search_utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/utils/saved_search_utils.ts @@ -100,6 +100,7 @@ export function createMergedEsQuery( uiSettings ? getEsQueryConfig(uiSettings) : undefined ); } + return combinedQuery; } diff --git a/x-pack/plugins/data_visualizer/public/index.ts b/x-pack/plugins/data_visualizer/public/index.ts index 1312419797bb1b..b17e0a4347418a 100644 --- a/x-pack/plugins/data_visualizer/public/index.ts +++ b/x-pack/plugins/data_visualizer/public/index.ts @@ -17,7 +17,7 @@ export type { FileDataVisualizerSpec, IndexDataVisualizerSpec, IndexDataVisualizerViewProps, - DataComparisonSpec, + DataDriftSpec, } from './application'; export type { GetAdditionalLinksParams, diff --git a/x-pack/plugins/data_visualizer/public/lazy_load_bundle/component_wrapper.tsx b/x-pack/plugins/data_visualizer/public/lazy_load_bundle/component_wrapper.tsx index cbd897ac208113..6902ef121b9b6b 100644 --- a/x-pack/plugins/data_visualizer/public/lazy_load_bundle/component_wrapper.tsx +++ b/x-pack/plugins/data_visualizer/public/lazy_load_bundle/component_wrapper.tsx @@ -7,7 +7,7 @@ import React, { FC, Suspense } from 'react'; import { EuiErrorBoundary, EuiSkeletonText } from '@elastic/eui'; -import type { DataComparisonDetectionAppStateProps } from '../application/data_comparison/data_comparison_app_state'; +import type { DataDriftDetectionAppStateProps } from '../application/data_drift/data_drift_app_state'; const LazyWrapper: FC = ({ children }) => ( @@ -27,14 +27,14 @@ export const FileDataVisualizerWrapper: FC = () => { ); }; -const DataComparisonLazy = React.lazy(() => import('../application/data_comparison')); +const DataDriftLazy = React.lazy(() => import('../application/data_drift')); /** * Lazy-wrapped ExplainLogRateSpikesAppState React component - * @param {ExplainLogRateSpikesAppStateProps} props - properties specifying the data on which to run the analysis. + * @param {DataDriftDetectionAppStateProps} props - properties specifying the data on which to run the analysis. */ -export const DataComparison: FC = (props) => ( +export const DataDrift: FC = (props) => ( - + ); diff --git a/x-pack/plugins/data_visualizer/public/lazy_load_bundle/index.ts b/x-pack/plugins/data_visualizer/public/lazy_load_bundle/index.ts index ba7cb83f784038..4d0cee4447c134 100644 --- a/x-pack/plugins/data_visualizer/public/lazy_load_bundle/index.ts +++ b/x-pack/plugins/data_visualizer/public/lazy_load_bundle/index.ts @@ -7,7 +7,7 @@ import { HttpSetup } from '@kbn/core/public'; import type { - DataComparisonSpec, + DataDriftSpec, FileDataVisualizerSpec, IndexDataVisualizerSpec, } from '../application'; @@ -18,7 +18,7 @@ let loadModulesPromise: Promise; interface LazyLoadedModules { FileDataVisualizer: FileDataVisualizerSpec; IndexDataVisualizer: IndexDataVisualizerSpec; - DataComparison: DataComparisonSpec; + DataDrift: DataDriftSpec; getHttp: () => HttpSetup; } diff --git a/x-pack/plugins/data_visualizer/public/lazy_load_bundle/lazy/index.tsx b/x-pack/plugins/data_visualizer/public/lazy_load_bundle/lazy/index.tsx index 181e15edc5fd30..efb9b7ba1bae11 100644 --- a/x-pack/plugins/data_visualizer/public/lazy_load_bundle/lazy/index.tsx +++ b/x-pack/plugins/data_visualizer/public/lazy_load_bundle/lazy/index.tsx @@ -7,4 +7,4 @@ export type { FileDataVisualizerSpec, IndexDataVisualizerSpec } from '../../application'; export { FileDataVisualizer, IndexDataVisualizer } from '../../application'; -export { DataComparison } from '../component_wrapper'; +export { DataDrift } from '../component_wrapper'; diff --git a/x-pack/plugins/data_visualizer/public/plugin.ts b/x-pack/plugins/data_visualizer/public/plugin.ts index 05b06c484322a4..e2c259726ea4da 100644 --- a/x-pack/plugins/data_visualizer/public/plugin.ts +++ b/x-pack/plugins/data_visualizer/public/plugin.ts @@ -25,7 +25,7 @@ import type { IndexPatternFieldEditorStart } from '@kbn/data-view-field-editor-p import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { - getDataComparisonComponent, + getDataDriftComponent, getFileDataVisualizerComponent, getIndexDataVisualizerComponent, } from './api'; @@ -90,7 +90,7 @@ export class DataVisualizerPlugin return { getFileDataVisualizerComponent, getIndexDataVisualizerComponent, - getDataComparisonComponent, + getDataDriftComponent, getMaxBytesFormatted, }; } diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/hoc/with_lens_data.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/hoc/with_lens_data.tsx index 64df74a011c885..010ef0e7f496c0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/hoc/with_lens_data.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/hoc/with_lens_data.tsx @@ -96,9 +96,9 @@ export const withLensData = ( attributes={attributes} searchSessionId={props?.searchSessionId} onBrushEnd={handleBrushEnd} - onLoad={(...args) => { + onLoad={(isLoading, adapters) => { if (dataLoadTransform) { - setData(dataLoadTransform(...args)); + setData(dataLoadTransform(isLoading, adapters)); } }} /> diff --git a/x-pack/plugins/enterprise_search/server/plugin.ts b/x-pack/plugins/enterprise_search/server/plugin.ts index 5dd5e56b2c3a1f..02444bd6efa727 100644 --- a/x-pack/plugins/enterprise_search/server/plugin.ts +++ b/x-pack/plugins/enterprise_search/server/plugin.ts @@ -94,7 +94,7 @@ interface PluginsSetup { usageCollection?: UsageCollectionSetup; } -interface PluginsStart { +export interface PluginsStart { data: DataPluginStart; security: SecurityPluginStart; spaces?: SpacesPluginStart; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx index 9360a5c35bcd5a..58cff89ac8c8f9 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/output_form_kafka_topics.tsx @@ -18,9 +18,11 @@ import { EuiFormErrorText, EuiFormRow, EuiIcon, + EuiLink, EuiPanel, EuiSelect, EuiSpacer, + EuiText, EuiTitle, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -32,6 +34,8 @@ import styled, { useTheme } from 'styled-components'; import type { EuiTheme } from '@kbn/kibana-react-plugin/common'; +import { useStartServices } from '../../../../../../hooks'; + import type { KafkaTopicWhenType, ValueOf } from '../../../../../../../common/types'; import { kafkaTopicWhenType } from '../../../../../../../common/constants'; @@ -49,6 +53,7 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm } = inputs.kafkaTopicsInput; const theme = useTheme() as EuiTheme; const [autoFocus, setAutoFocus] = useState(false); + const { docLinks } = useStartServices(); const indexedErrors = useMemo(() => { if (!errors) { @@ -214,10 +219,27 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm + <> + + + + + documentation + + ), + }} + /> + + + } > {topics.length > 1 ? ( @@ -232,7 +254,6 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm spacing="m" index={index} draggableId={`${id}${index}Draggable`} - // isDragDisabled={disabled} customDragHandle={true} style={{ paddingLeft: 0, @@ -348,7 +369,7 @@ export const OutputFormKafkaTopics: React.FunctionComponent<{ inputs: OutputForm const topicConditionErrors = indexedConditionErrors[index]; return ( <> - + 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 046ac5dfe9fadc..b841c641c3af4f 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 @@ -20,7 +20,8 @@ import { waitForFleetSetup } from './helpers'; const logFilePath = path.join(__dirname, 'logs.log'); -describe('fleet usage telemetry', () => { +// Failing: See https://github.com/elastic/kibana/issues/156245 +describe.skip('fleet usage telemetry', () => { let core: any; let esServer: TestElasticsearchUtils; let kbnServer: TestKibanaUtils; diff --git a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts index 9107a334dad838..2cdd04483e108e 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts @@ -363,7 +363,7 @@ export function transformOutputToFullPolicyOutput( topic: topicName, when: { [rest.when.type as string]: { - [keyName.replace(/\s/g, '')]: value.replace(/\s/g, ''), + [keyName.replace(/\s/g, '')]: value, }, }, }; diff --git a/x-pack/plugins/lens/public/app_plugin/mounter.tsx b/x-pack/plugins/lens/public/app_plugin/mounter.tsx index 7531dbc35c0f1c..77c0685e2858c6 100644 --- a/x-pack/plugins/lens/public/app_plugin/mounter.tsx +++ b/x-pack/plugins/lens/public/app_plugin/mounter.tsx @@ -102,6 +102,7 @@ export async function getLensServices( share, unifiedSearch, serverless, + contentManagement, } = startDependencies; const storage = new Storage(localStorage); @@ -114,6 +115,7 @@ export async function getLensServices( storage, inspector: getLensInspectorService(inspector), navigation, + contentManagement, fieldFormats, stateTransfer, usageCollection, 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 18213c0bec4c07..fc6511b66ec156 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 @@ -5,7 +5,7 @@ * 2.0. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { EuiFlyout, EuiLoadingSpinner, EuiOverlayMask } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { Provider } from 'react-redux'; @@ -29,12 +29,13 @@ import { LensEditConfigurationFlyout, type EditConfigPanelProps, } from './lens_configuration_flyout'; +import { SavedObjectIndexStore, type Document } from '../../../persistence'; +import { DOC_TYPE } from '../../../../common/constants'; export type EditLensConfigurationProps = Omit< EditConfigPanelProps, - 'startDependencies' | 'coreStart' | 'visualizationMap' | 'datasourceMap' + 'startDependencies' | 'coreStart' | 'visualizationMap' | 'datasourceMap' | 'saveByRef' >; - function LoadingSpinnerWithOverlay() { return ( @@ -86,17 +87,36 @@ export async function getEditLensConfiguration( return ({ attributes, - dataView, - updateAll, + updatePanelState, closeFlyout, wrapInFlyout, datasourceId, - adaptersTables, panelId, + savedObjectId, + output$, + lensAdapters, + updateByRefInput, + navigateToLensEditor, + displayFlyoutHeader, }: EditLensConfigurationProps) => { - if (!lensServices || !datasourceMap || !visualizationMap || !dataView.id) { + if (!lensServices || !datasourceMap || !visualizationMap) { return ; } + /** + * During inline editing of a by reference panel, the panel is converted to a by value one. + * When the user applies the changes we save them to the Lens SO + */ + const saveByRef = useCallback( + async (attrs: Document) => { + const savedObjectStore = new SavedObjectIndexStore(lensServices.contentManagement); + await savedObjectStore.save({ + ...attrs, + savedObjectId, + type: DOC_TYPE, + }); + }, + [savedObjectId] + ); const datasourceState = attributes.state.datasourceStates[datasourceId]; const storeDeps = { lensServices, @@ -110,7 +130,7 @@ export async function getEditLensConfiguration( const lensStore: LensRootStore = makeConfigureStore( storeDeps, undefined, - updatingMiddleware(updateAll) + updatingMiddleware(updatePanelState) ); lensStore.dispatch( loadInitial({ @@ -118,6 +138,7 @@ export async function getEditLensConfiguration( attributes, id: panelId ?? generateId(), }, + inlineEditing: true, }) ); @@ -136,7 +157,6 @@ export async function getEditLensConfiguration( size="s" hideCloseButton css={css` - background: none; clip-path: polygon(-100% 0, 100% 0, 100% 100%, -100% 100%); `} > @@ -150,15 +170,20 @@ export async function getEditLensConfiguration( const configPanelProps = { attributes, - dataView, - updateAll, + updatePanelState, closeFlyout, datasourceId, - adaptersTables, coreStart, startDependencies, visualizationMap, + output$, + lensAdapters, datasourceMap, + saveByRef, + savedObjectId, + updateByRefInput, + navigateToLensEditor, + displayFlyoutHeader, }; return getWrapper( diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx index 24c8ced2a7e5f6..a2173491a1d28e 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.test.tsx @@ -8,7 +8,6 @@ import React from 'react'; import { EuiFlyoutBody } from '@elastic/eui'; import { mountWithProvider } from '../../../mocks'; import type { Query, AggregateQuery } from '@kbn/es-query'; -import type { DataView } from '@kbn/data-views-plugin/public'; import { coreMock } from '@kbn/core/public/mocks'; import { mockVisualizationMap, @@ -111,11 +110,9 @@ describe('LensEditConfigurationFlyout', () => { references: [], } as unknown as TypedLensByValueInput['attributes']; - const dataView = { id: 'index1', isPersisted: () => true } as unknown as DataView; return { attributes: lensAttributes, - dataView, - updateAll: jest.fn(), + updatePanelState: jest.fn(), coreStart: coreMock.createStart(), startDependencies, visualizationMap, @@ -125,7 +122,21 @@ describe('LensEditConfigurationFlyout', () => { } as unknown as EditConfigPanelProps; } - it('should call the closeFlyout callback if collapse button is clicked', async () => { + it('should display the header and the link to editor if necessary props are given', async () => { + const navigateToLensEditorSpy = jest.fn(); + const props = getDefaultProps(); + const newProps = { + ...props, + displayFlyoutHeader: true, + navigateToLensEditor: navigateToLensEditorSpy, + }; + const { instance } = await prepareAndMountComponent(newProps); + expect(instance.find('[data-test-subj="editFlyoutHeader"]').exists()).toBe(true); + instance.find('[data-test-subj="navigateToLensEditorLink"]').at(1).simulate('click'); + expect(navigateToLensEditorSpy).toHaveBeenCalled(); + }); + + it('should call the closeFlyout callback if cancel button is clicked', async () => { const closeFlyoutSpy = jest.fn(); const props = getDefaultProps(); const newProps = { @@ -134,10 +145,41 @@ describe('LensEditConfigurationFlyout', () => { }; const { instance } = await prepareAndMountComponent(newProps); expect(instance.find(EuiFlyoutBody).exists()).toBe(true); - instance.find('[data-test-subj="collapseFlyoutButton"]').at(1).simulate('click'); + instance.find('[data-test-subj="cancelFlyoutButton"]').at(1).simulate('click'); expect(closeFlyoutSpy).toHaveBeenCalled(); }); + it('should call the updateByRefInput callback if cancel button is clicked and savedObjectId exists', async () => { + const updateByRefInputSpy = jest.fn(); + const props = getDefaultProps(); + const newProps = { + ...props, + closeFlyout: jest.fn(), + updateByRefInput: updateByRefInputSpy, + savedObjectId: 'id', + }; + const { instance } = await prepareAndMountComponent(newProps); + instance.find('[data-test-subj="cancelFlyoutButton"]').at(1).simulate('click'); + expect(updateByRefInputSpy).toHaveBeenCalled(); + }); + + it('should call the saveByRef callback if apply button is clicked and savedObjectId exists', async () => { + const updateByRefInputSpy = jest.fn(); + const saveByRefSpy = jest.fn(); + const props = getDefaultProps(); + const newProps = { + ...props, + closeFlyout: jest.fn(), + updateByRefInput: updateByRefInputSpy, + savedObjectId: 'id', + saveByRef: saveByRefSpy, + }; + const { instance } = await prepareAndMountComponent(newProps); + instance.find('[data-test-subj="applyFlyoutButton"]').at(2).simulate('click'); + expect(updateByRefInputSpy).toHaveBeenCalled(); + expect(saveByRefSpy).toHaveBeenCalled(); + }); + it('should compute the frame public api correctly', async () => { const props = getDefaultProps(); const { instance } = await prepareAndMountComponent(props); diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx index c1c34ad868c9dd..a60e3df063aaab 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx @@ -5,73 +5,234 @@ * 2.0. */ -import React, { useMemo } from 'react'; +import React, { useMemo, useCallback, useRef, useEffect, useState } from 'react'; import { EuiButtonEmpty, + EuiButton, EuiFlyoutBody, EuiFlyoutFooter, + EuiTitle, + EuiLink, + EuiIcon, + EuiToolTip, EuiSpacer, EuiFlexGroup, EuiFlexItem, useEuiTheme, EuiCallOut, } from '@elastic/eui'; +import { isEqual } from 'lodash'; +import type { Observable } from 'rxjs'; import { euiThemeVars } from '@kbn/ui-theme'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { css } from '@emotion/react'; import type { CoreStart } from '@kbn/core/public'; import type { Datatable } from '@kbn/expressions-plugin/public'; -import type { DataView } from '@kbn/data-views-plugin/public'; import type { LensPluginStartDependencies } from '../../../plugin'; -import { useLensSelector, selectFramePublicAPI } from '../../../state_management'; +import { + useLensSelector, + selectFramePublicAPI, + useLensDispatch, + updateIndexPatterns, +} from '../../../state_management'; +import { replaceIndexpattern } from '../../../state_management/lens_slice'; import { VisualizationToolbar } from '../../../editor_frame_service/editor_frame/workspace_panel'; import type { DatasourceMap, VisualizationMap } from '../../../types'; import type { TypedLensByValueInput } from '../../../embeddable/embeddable_component'; +import type { LensEmbeddableOutput } from '../../../embeddable'; +import type { LensInspector } from '../../../lens_inspector_service'; import { ConfigPanelWrapper } from '../../../editor_frame_service/editor_frame/config_panel/config_panel'; +import { extractReferencesFromState } from '../../../utils'; +import type { Document } from '../../../persistence'; +import { createIndexPatternService } from '../../../data_views_service/service'; export interface EditConfigPanelProps { - attributes: TypedLensByValueInput['attributes']; - dataView: DataView; - updateAll: (datasourceState: unknown, visualizationState: unknown) => void; coreStart: CoreStart; startDependencies: LensPluginStartDependencies; visualizationMap: VisualizationMap; datasourceMap: DatasourceMap; + /** The attributes of the Lens embeddable */ + attributes: TypedLensByValueInput['attributes']; + /** Callback for updating the visualization and datasources state */ + updatePanelState: (datasourceState: unknown, visualizationState: unknown) => void; + /** Lens visualizations can be either created from ESQL (textBased) or from dataviews (formBased) */ + datasourceId: 'formBased' | 'textBased'; + /** Embeddable output observable, useful for dashboard flyout */ + output$?: Observable; + /** Contains the active data, necessary for some panel configuration such as coloring */ + lensAdapters?: LensInspector['adapters']; + /** Optional callback called when updating the by reference embeddable */ + updateByRefInput?: (soId: string) => void; + /** Callback for closing the edit flyout */ closeFlyout?: () => void; + /** Boolean used for adding a flyout wrapper */ wrapInFlyout?: boolean; + /** Optional parameter for panel identification + * If not given, Lens generates a new one + */ panelId?: string; - datasourceId: 'formBased' | 'textBased'; - adaptersTables?: Record; + /** Optional parameter for saved object id + * Should be given if the lens embeddable is a by reference one + * (saved in the library) + */ + savedObjectId?: string; + /** Callback for saving the embeddable as a SO */ + saveByRef?: (attrs: Document) => void; + /** Optional callback for navigation from the header of the flyout */ + navigateToLensEditor?: () => void; + /** If set to true it displays a header on the flyout */ + displayFlyoutHeader?: boolean; } export function LensEditConfigurationFlyout({ attributes, - dataView, coreStart, startDependencies, visualizationMap, datasourceMap, datasourceId, - updateAll, + updatePanelState, closeFlyout, - adaptersTables, + saveByRef, + savedObjectId, + updateByRefInput, + output$, + lensAdapters, + navigateToLensEditor, + displayFlyoutHeader, }: EditConfigPanelProps) { + const previousAttributes = useRef(attributes); const datasourceState = attributes.state.datasourceStates[datasourceId]; const activeVisualization = visualizationMap[attributes.visualizationType]; const activeDatasource = datasourceMap[datasourceId]; + const [isInlineFooterVisible, setIsInlineFlyoutFooterVisible] = useState(true); const { euiTheme } = useEuiTheme(); - + const { datasourceStates, visualization, isLoading } = useLensSelector((state) => state.lens); + const dispatch = useLensDispatch(); const activeData: Record = useMemo(() => { return {}; }, []); - const layers = activeDatasource.getLayers(datasourceState); - layers.forEach((layer) => { - if (adaptersTables) { - activeData[layer] = Object.values(adaptersTables)[0]; + useEffect(() => { + const s = output$?.subscribe(() => { + const layers = activeDatasource.getLayers(datasourceState); + const adaptersTables = lensAdapters?.tables?.tables as Record; + const [table] = Object.values(adaptersTables || {}); + layers.forEach((layer) => { + if (table) { + activeData[layer] = table; + } + }); + }); + return () => s?.unsubscribe(); + }, [activeDatasource, lensAdapters, datasourceState, output$, activeData]); + + const attributesChanged: boolean = useMemo(() => { + const previousAttrs = previousAttributes.current; + + const datasourceStatesAreSame = + datasourceStates[datasourceId].state && previousAttrs.state.datasourceStates[datasourceId] + ? datasourceMap[datasourceId].isEqual( + previousAttrs.state.datasourceStates[datasourceId], + previousAttrs.references, + datasourceStates[datasourceId].state, + attributes.references + ) + : false; + + const visualizationState = visualization.state; + return ( + !isEqual(visualizationState, previousAttrs.state.visualization) || !datasourceStatesAreSame + ); + }, [attributes.references, datasourceId, datasourceMap, datasourceStates, visualization.state]); + + const onCancel = useCallback(() => { + const previousAttrs = previousAttributes.current; + + if (attributesChanged) { + const currentDatasourceState = datasourceMap[datasourceId].injectReferencesToLayers + ? datasourceMap[datasourceId]?.injectReferencesToLayers?.( + previousAttrs.state.datasourceStates[datasourceId], + previousAttrs.references + ) + : previousAttrs.state.datasourceStates[datasourceId]; + updatePanelState?.(currentDatasourceState, previousAttrs.state.visualization); + if (savedObjectId) { + updateByRefInput?.(savedObjectId); + } } - }); + closeFlyout?.(); + }, [ + attributesChanged, + savedObjectId, + closeFlyout, + datasourceMap, + datasourceId, + updatePanelState, + updateByRefInput, + ]); + + const onApply = useCallback(() => { + if (savedObjectId) { + const dsStates = Object.fromEntries( + Object.entries(datasourceStates).map(([id, ds]) => { + const dsState = ds.state; + return [id, dsState]; + }) + ); + const references = extractReferencesFromState({ + activeDatasources: Object.keys(datasourceStates).reduce( + (acc, id) => ({ + ...acc, + [id]: datasourceMap[id], + }), + {} + ), + datasourceStates, + visualizationState: visualization.state, + activeVisualization, + }); + const attrs = { + ...attributes, + state: { + ...attributes.state, + visualization: visualization.state, + datasourceStates: dsStates, + }, + references, + }; + saveByRef?.(attrs); + updateByRefInput?.(savedObjectId); + } + closeFlyout?.(); + }, [ + savedObjectId, + closeFlyout, + datasourceStates, + visualization.state, + activeVisualization, + attributes, + saveByRef, + updateByRefInput, + datasourceMap, + ]); + + const indexPatternService = useMemo( + () => + createIndexPatternService({ + dataViews: startDependencies.dataViews, + uiActions: startDependencies.uiActions, + core: coreStart, + updateIndexPatterns: (newIndexPatternsState, options) => { + dispatch(updateIndexPatterns(newIndexPatternsState)); + }, + replaceIndexPattern: (newIndexPattern, oldId, options) => { + dispatch(replaceIndexpattern({ newIndexPattern, oldId })); + }, + }), + [coreStart, dispatch, startDependencies.dataViews, startDependencies.uiActions] + ); const framePublicAPI = useLensSelector((state) => { const newState = { @@ -83,7 +244,6 @@ export function LensEditConfigurationFlyout({ }; return selectFramePublicAPI(newState, datasourceMap); }); - const { isLoading } = useLensSelector((state) => state.lens); if (isLoading) return null; const layerPanelsProps = { @@ -94,6 +254,8 @@ export function LensEditConfigurationFlyout({ dataViews: startDependencies.dataViews, uiActions: startDependencies.uiActions, hideLayerHeader: datasourceId === 'textBased', + indexPatternService, + setIsInlineFlyoutFooterVisible, }; return ( <> @@ -104,7 +266,7 @@ export function LensEditConfigurationFlyout({ overflow-y: auto; padding-left: ${euiThemeVars.euiFormMaxWidth}; margin-left: -${euiThemeVars.euiFormMaxWidth}; - pointer-events: none !important; + pointer-events: none; .euiFlyoutBody__overflow { padding-left: inherit; margin-left: inherit; @@ -113,12 +275,62 @@ export function LensEditConfigurationFlyout({ } } .euiFlyoutBody__overflowContent { - padding: ${euiTheme.size.s}; + padding: 0; } `} > - - + + {displayFlyoutHeader && ( + + + + + + +

+ {i18n.translate('xpack.lens.config.editVisualizationLabel', { + defaultMessage: 'Edit visualization', + })} +

+
+
+ + + + + +
+
+ {navigateToLensEditor && ( + + + {i18n.translate('xpack.lens.config.editLinkLabel', { + defaultMessage: 'Edit in Lens', + })} + + + )} +
+
+ )} + {datasourceId === 'textBased' && ( - +
- - - - - + {isInlineFooterVisible && ( + + + + + + + + + + + + + + + )} ); } diff --git a/x-pack/plugins/lens/public/app_plugin/types.ts b/x-pack/plugins/lens/public/app_plugin/types.ts index 263794db96c878..4e53b66a3244f5 100644 --- a/x-pack/plugins/lens/public/app_plugin/types.ts +++ b/x-pack/plugins/lens/public/app_plugin/types.ts @@ -32,6 +32,7 @@ import type { DashboardFeatureFlagConfig } from '@kbn/dashboard-plugin/public'; import type { SavedObjectTaggingPluginStart } from '@kbn/saved-objects-tagging-plugin/public'; import type { IndexPatternFieldEditorStart } from '@kbn/data-view-field-editor-plugin/public'; import type { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; +import { ContentManagementPublicStart } from '@kbn/content-management-plugin/public'; import { VisualizeFieldContext, ACTION_VISUALIZE_LENS_FIELD, @@ -161,6 +162,7 @@ export interface LensAppServices { stateTransfer: EmbeddableStateTransfer; navigation: NavigationPublicPluginStart; attributeService: LensAttributeService; + contentManagement: ContentManagementPublicStart; savedObjectsTagging?: SavedObjectTaggingPluginStart; getOriginatingAppName: () => string | undefined; presentationUtil: PresentationUtilPluginStart; diff --git a/x-pack/plugins/lens/public/datasources/form_based/form_based.tsx b/x-pack/plugins/lens/public/datasources/form_based/form_based.tsx index 88f6c67113bce4..eee18d41b49a70 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/form_based.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/form_based.tsx @@ -858,6 +858,14 @@ export function getFormBasedDatasource({ getUsedDataViews: (state) => { return Object.values(state.layers).map(({ indexPatternId }) => indexPatternId); }, + injectReferencesToLayers: (state, references) => { + const layers = + references && state ? injectReferences(state, references).layers : state?.layers; + return { + ...state, + layers, + }; + }, getDatasourceInfo: async (state, references, dataViewsService) => { const layers = references ? injectReferences(state, references).layers : state.layers; diff --git a/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx b/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx index a76e2edd623b07..43d971caf24a95 100644 --- a/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx +++ b/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx @@ -604,7 +604,12 @@ export function getTextBasedDatasource({ getDatasourceSuggestionsForVisualizeField: getSuggestionsForVisualizeField, getDatasourceSuggestionsFromCurrentState: getSuggestionsForState, getDatasourceSuggestionsForVisualizeCharts: getSuggestionsForState, - isEqual: () => true, + isEqual: ( + persistableState1: TextBasedPersistedState, + references1: SavedObjectReference[], + persistableState2: TextBasedPersistedState, + references2: SavedObjectReference[] + ) => isEqual(persistableState1, persistableState2), getDatasourceInfo: async (state, references, dataViewsService) => { const indexPatterns: DataView[] = []; for (const { index } of Object.values(state.layers)) { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx index 5627916036bf3e..41184d2212c458 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/config_panel.tsx @@ -370,6 +370,7 @@ export function LayerPanels( } }, registerLibraryAnnotationGroup: registerLibraryAnnotationGroupFunction, + isInlineEditing: Boolean(props?.setIsInlineFlyoutFooterVisible), })} ); diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/dimension_container.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/dimension_container.tsx index 5a109a6ad36a91..6afc4069ec7ee9 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/dimension_container.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/dimension_container.tsx @@ -20,6 +20,7 @@ export function DimensionContainer({ groupLabel: string; isFullscreen: boolean; panelRef: (el: HTMLDivElement) => void; + isInlineEditing?: boolean; }) { return {panel}; } diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx index 6472c41a79e025..bd5cf0b78b20f5 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx @@ -95,6 +95,7 @@ export function LayerPanel( indexPatternService?: IndexPatternServiceAPI; getUserMessages?: UserMessagesGetter; displayLayerSettings: boolean; + setIsInlineFlyoutFooterVisible?: (status: boolean) => void; } ) { const [activeDimension, setActiveDimension] = useState( @@ -135,6 +136,12 @@ export function LayerPanel( setActiveDimension(initialActiveDimensionState); }, [activeVisualization.id]); + useEffect(() => { + // is undefined when the dimension panel is closed + const activeDimensionId = activeDimension.activeId; + props?.setIsInlineFlyoutFooterVisible?.(!Boolean(activeDimensionId)); + }, [activeDimension.activeId, activeVisualization.id, props]); + const panelRef = useRef(null); const settingsPanelRef = useRef(null); @@ -668,6 +675,7 @@ export function LayerPanel( setPanelSettingsOpen(false); return true; }} + isInlineEditing={Boolean(props?.setIsInlineFlyoutFooterVisible)} >
@@ -736,6 +744,7 @@ export function LayerPanel( isOpen={isDimensionPanelOpen} isFullscreen={isFullscreen} groupLabel={activeGroup?.dimensionEditorGroupLabel ?? (activeGroup?.groupLabel || '')} + isInlineEditing={Boolean(props?.setIsInlineFlyoutFooterVisible)} handleClose={() => { if (layerDatasource) { if (layerDatasource.updateStateOnCloseDimension) { diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/types.ts b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/types.ts index 9b1ed7fde93825..6d06dfb7e6aace 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/types.ts +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/types.ts @@ -29,6 +29,7 @@ export interface ConfigPanelWrapperProps { uiActions: UiActionsStart; getUserMessages?: UserMessagesGetter; hideLayerHeader?: boolean; + setIsInlineFlyoutFooterVisible?: (status: boolean) => void; } export interface LayerPanelProps { diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.test.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.test.tsx index 67d7c86e309218..50ddd1f6cffa17 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.test.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.test.tsx @@ -679,7 +679,7 @@ describe('embeddable', () => { // loading should become false expect(onLoad).toHaveBeenCalledTimes(2); - expect(onLoad).toHaveBeenNthCalledWith(2, false, adapters); + expect(onLoad).toHaveBeenNthCalledWith(2, false, adapters, embeddable.getOutput$()); expect(expressionRenderer).toHaveBeenCalledTimes(1); @@ -698,7 +698,7 @@ describe('embeddable', () => { // loading should again become false expect(onLoad).toHaveBeenCalledTimes(4); - expect(onLoad).toHaveBeenNthCalledWith(4, false, adapters); + expect(onLoad).toHaveBeenNthCalledWith(4, false, adapters, embeddable.getOutput$()); }); it('should call onFilter event on filter call ', async () => { diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index b4bdb5783591bd..0150d922c481fb 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -7,6 +7,7 @@ import { partition, uniqBy } from 'lodash'; import React from 'react'; +import type { Observable } from 'rxjs'; import { css } from '@emotion/react'; import { i18n } from '@kbn/i18n'; import { render, unmountComponentAtNode } from 'react-dom'; @@ -45,6 +46,7 @@ import { import { VIS_EVENT_TO_TRIGGER } from '@kbn/visualizations-plugin/public'; import { + EmbeddableStateTransfer, Embeddable as AbstractEmbeddable, EmbeddableInput, EmbeddableOutput, @@ -109,7 +111,7 @@ import type { AllowedGaugeOverrides, AllowedXYOverrides, } from '../../common/types'; -import { getEditPath, DOC_TYPE } from '../../common/constants'; +import { getEditPath, DOC_TYPE, APP_ID } from '../../common/constants'; import { LensAttributeService } from '../lens_attribute_service'; import type { TableInspectorAdapter } from '../editor_frame_service/types'; import { getLensInspectorService, LensInspector } from '../lens_inspector_service'; @@ -163,7 +165,11 @@ interface LensBaseEmbeddableInput extends EmbeddableInput { className?: string; noPadding?: boolean; onBrushEnd?: (data: Simplify) => void; - onLoad?: (isLoading: boolean, adapters?: Partial) => void; + onLoad?: ( + isLoading: boolean, + adapters?: Partial, + output$?: Observable + ) => void; onFilter?: ( data: Simplify<(ClickTriggerEvent['data'] | MultiClickTriggerEvent['data']) & PreventableEvent> ) => void; @@ -595,7 +601,6 @@ export class Embeddable public getUserMessages: UserMessagesGetter = (locationId, filters) => { const userMessages: UserMessage[] = []; - userMessages.push( ...getApplicationUserMessages({ visualizationType: this.savedVis?.visualizationType, @@ -732,6 +737,10 @@ export class Embeddable return String(language).toUpperCase(); } + /** + * Gets the Lens embeddable's datasource and visualization states + * updates the embeddable input + */ async updateVisualization(datasourceState: unknown, visualizationState: unknown) { const viz = this.savedVis; const activeDatasourceId = (this.activeDatasourceId ?? @@ -766,10 +775,58 @@ export class Embeddable }, references, }; - this.updateInput({ attributes: attrs }); + + /** + * SavedObjectId is undefined for by value panels and defined for the by reference ones. + * Here we are converting the by reference panels to by value when user is inline editing + */ + this.updateInput({ attributes: attrs, savedObjectId: undefined }); + /** + * Should load again the user messages, + * otherwise the embeddable state is stuck in an error state + */ + this.renderUserMessages(); + } + } + + /** + * Callback which allows the navigation to the editor. + * Used for the Edit in Lens link inside the inline editing flyout. + */ + private async navigateToLensEditor() { + const executionContext = this.getExecutionContext(); + /** + * The origininating app variable is very important for the Save and Return button + * of the editor to work properly. + * The best way to get it dynamically is from the execution context but for the dashboard + * it needs to be pluralized + */ + const transferState = { + originatingApp: + executionContext?.type === 'dashboard' + ? 'dashboards' + : executionContext?.type ?? 'dashboards', + valueInput: this.getExplicitInput(), + embeddableId: this.id, + searchSessionId: this.getInput().searchSessionId, + }; + const transfer = new EmbeddableStateTransfer( + this.deps.coreStart.application.navigateToApp, + this.deps.coreStart.application.currentAppId$ + ); + if (transfer) { + await transfer.navigateToEditor(APP_ID, { + path: this.output.editPath, + state: transferState, + }); } } + public updateByRefInput(savedObjectId: string) { + const attrs = this.savedVis; + this.updateInput({ attributes: attrs, savedObjectId }); + } + async openConfingPanel(startDependencies: LensPluginStartDependencies) { const { getEditLensConfiguration } = await import('../async_services'); const Component = await getEditLensConfiguration( @@ -783,16 +840,21 @@ export class Embeddable 'formBased') as EditLensConfigurationProps['datasourceId']; const attributes = this.savedVis as TypedLensByValueInput['attributes']; - const dataView = this.dataViews[0]; if (attributes) { return ( ); } @@ -881,7 +943,7 @@ export class Embeddable private updateActiveData: ExpressionWrapperProps['onData$'] = (data, adapters) => { if (this.input.onLoad) { // once onData$ is get's called from expression renderer, loading becomes false - this.input.onLoad(false, adapters); + this.input.onLoad(false, adapters, this.getOutput$()); } const { type, error } = data as { type: string; error: ErrorLike }; @@ -1404,7 +1466,11 @@ export class Embeddable this.updateOutput({ defaultTitle: this.savedVis.title, defaultDescription: this.savedVis.description, - editable: this.getIsEditable() && !this.isTextBasedLanguage(), + /** lens visualizations allow inline editing action + * navigation to the editor is allowed through the flyout + */ + editable: this.getIsEditable(), + inlineEditable: true, title, description, editPath: getEditPath(savedObjectId), @@ -1413,7 +1479,7 @@ export class Embeddable }); } - private getIsEditable() { + public getIsEditable() { return ( this.deps.capabilities.canSaveVisualizations || (!this.inputIsRefType(this.getInput()) && diff --git a/x-pack/plugins/lens/public/index.ts b/x-pack/plugins/lens/public/index.ts index ebf64a1915a43e..9d2b409a678d38 100644 --- a/x-pack/plugins/lens/public/index.ts +++ b/x-pack/plugins/lens/public/index.ts @@ -105,7 +105,12 @@ export type { ReferenceLineLayerConfig, } from '@kbn/expression-xy-plugin/common'; -export type { LensEmbeddableInput, LensSavedObjectAttributes, Embeddable } from './embeddable'; +export type { + LensEmbeddableInput, + LensSavedObjectAttributes, + Embeddable, + LensEmbeddableOutput, +} from './embeddable'; export type { ChartInfo } from './chart_info_api'; diff --git a/x-pack/plugins/lens/public/mocks/services_mock.tsx b/x-pack/plugins/lens/public/mocks/services_mock.tsx index 8b3cd2e618a688..2f91d6b24c7020 100644 --- a/x-pack/plugins/lens/public/mocks/services_mock.tsx +++ b/x-pack/plugins/lens/public/mocks/services_mock.tsx @@ -16,6 +16,7 @@ import { inspectorPluginMock } from '@kbn/inspector-plugin/public/mocks'; import { spacesPluginMock } from '@kbn/spaces-plugin/public/mocks'; import { dashboardPluginMock } from '@kbn/dashboard-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; +import { contentManagementMock } from '@kbn/content-management-plugin/public/mocks'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; @@ -185,6 +186,7 @@ export function makeDefaultServices( dataViewEditor: indexPatternEditorPluginMock.createStartContract(), unifiedSearch: unifiedSearchPluginMock.createStartContract(), docLinks: startMock.docLinks, + contentManagement: contentManagementMock.createStartContract(), eventAnnotationService: {} as EventAnnotationServiceType, }; } diff --git a/x-pack/plugins/lens/public/shared_components/flyout_container.tsx b/x-pack/plugins/lens/public/shared_components/flyout_container.tsx index 46a5c5ca397063..d06c9babed5c5f 100644 --- a/x-pack/plugins/lens/public/shared_components/flyout_container.tsx +++ b/x-pack/plugins/lens/public/shared_components/flyout_container.tsx @@ -8,6 +8,7 @@ import './flyout_container.scss'; import React, { useState, useEffect, useCallback } from 'react'; +import { css } from '@emotion/react'; import { EuiFlyoutHeader, EuiFlyoutFooter, @@ -47,6 +48,7 @@ export function FlyoutContainer({ panelContainerRef, children, customFooter, + isInlineEditing, }: { isOpen: boolean; handleClose: () => boolean; @@ -56,6 +58,7 @@ export function FlyoutContainer({ panelRef?: (el: HTMLDivElement) => void; panelContainerRef?: (el: HTMLDivElement) => void; customFooter?: React.ReactElement; + isInlineEditing?: boolean; }) { const [focusTrapIsEnabled, setFocusTrapIsEnabled] = useState(false); @@ -68,14 +71,16 @@ export function FlyoutContainer({ }, [handleClose]); useEffect(() => { - document.body.classList.toggle('lnsBody--overflowHidden', isOpen); - return () => { - if (isOpen) { - setFocusTrapIsEnabled(false); - } - document.body.classList.remove('lnsBody--overflowHidden'); - }; - }, [isOpen]); + if (!isInlineEditing) { + document.body.classList.toggle('lnsBody--overflowHidden', isOpen); + return () => { + if (isOpen) { + setFocusTrapIsEnabled(false); + } + document.body.classList.remove('lnsBody--overflowHidden'); + }; + } + }, [isInlineEditing, isOpen]); if (!isOpen) { return null; @@ -99,16 +104,34 @@ export function FlyoutContainer({ role="dialog" aria-labelledby="lnsDimensionContainerTitle" className="lnsDimensionContainer" + css={css` + box-shadow: ${isInlineEditing ? 'none !important' : 'inherit'}; + `} onAnimationEnd={() => { if (isOpen) { // EuiFocusTrap interferes with animating elements with absolute position: - // running this onAnimationEnd, otherwise the flyout pushes content when animating - setFocusTrapIsEnabled(true); + // running this onAnimationEnd, otherwise the flyout pushes content when animating. + // The EuiFocusTrap is disabled when inline editing as it causes bugs with comboboxes + setFocusTrapIsEnabled(!Boolean(isInlineEditing)); } }} > + {isInlineEditing && ( + + + + )}

- - - + {!isInlineEditing && ( + + + + )} @@ -147,13 +172,17 @@ export function FlyoutContainer({ - {i18n.translate('xpack.lens.dimensionContainer.close', { - defaultMessage: 'Close', - })} + {isInlineEditing + ? i18n.translate('xpack.lens.dimensionContainer.back', { + defaultMessage: 'Back', + }) + : i18n.translate('xpack.lens.dimensionContainer.close', { + defaultMessage: 'Close', + })} )} diff --git a/x-pack/plugins/lens/public/state_management/init_middleware/load_initial.ts b/x-pack/plugins/lens/public/state_management/init_middleware/load_initial.ts index c33ed7dd07ba2e..418fcc2308e7ef 100644 --- a/x-pack/plugins/lens/public/state_management/init_middleware/load_initial.ts +++ b/x-pack/plugins/lens/public/state_management/init_middleware/load_initial.ts @@ -91,10 +91,12 @@ export function loadInitial( redirectCallback, initialInput, history, + inlineEditing, }: { redirectCallback?: (savedObjectId?: string) => void; initialInput?: LensEmbeddableInput; history?: History; + inlineEditing?: boolean; }, autoApplyDisabled: boolean ) { @@ -291,9 +293,13 @@ export function loadInitial( {} ); - const filters = data.query.filterManager.inject(doc.state.filters, doc.references); - // Don't overwrite any pinned filters - data.query.filterManager.setAppFilters(filters); + // when the embeddable is initialized from the dashboard we don't want to inject the filters + // as this will replace the parent application filters (such as a dashboard) + if (!Boolean(inlineEditing)) { + const filters = data.query.filterManager.inject(doc.state.filters, doc.references); + // Don't overwrite any pinned filters + data.query.filterManager.setAppFilters(filters); + } const docVisualizationState = { activeId: doc.visualizationType, diff --git a/x-pack/plugins/lens/public/state_management/lens_slice.ts b/x-pack/plugins/lens/public/state_management/lens_slice.ts index 8d24cf00d1d705..df3564958111bd 100644 --- a/x-pack/plugins/lens/public/state_management/lens_slice.ts +++ b/x-pack/plugins/lens/public/state_management/lens_slice.ts @@ -203,6 +203,7 @@ export const loadInitial = createAction<{ initialInput?: LensEmbeddableInput; redirectCallback?: (savedObjectId?: string) => void; history?: History; + inlineEditing?: boolean; }>('lens/loadInitial'); export const initEmpty = createAction( 'initEmpty', @@ -846,6 +847,7 @@ export const makeLensReducer = (storeDeps: LensStoreDeps) => { initialInput?: LensEmbeddableInput; redirectCallback?: (savedObjectId?: string) => void; history?: History; + inlineEditing?: boolean; }> ) => state, [initEmpty.type]: ( diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.test.tsx b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.test.tsx index 6c3d98fb3637dc..d8dbc219c6c173 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.test.tsx +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/action.test.tsx @@ -24,6 +24,11 @@ describe('open config panel action', () => { const embeddable = { type: 'NOT_LENS', isTextBasedLanguage: () => true, + getInput: () => { + return { + viewMode: 'edit', + }; + }, } as unknown as IEmbeddable; const configurablePanelAction = new ConfigureInLensPanelAction( mockStartDependencies, @@ -38,10 +43,14 @@ describe('open config panel action', () => { expect(isCompatible).toBeFalsy(); }); - it('is incompatible with non text based language embeddable', async () => { + it('is incompatible with input view mode', async () => { const embeddable = { - type: DOC_TYPE, - isTextBasedLanguage: () => false, + type: 'NOT_LENS', + getInput: () => { + return { + viewMode: 'view', + }; + }, } as unknown as IEmbeddable; const configurablePanelAction = new ConfigureInLensPanelAction( mockStartDependencies, @@ -60,6 +69,12 @@ describe('open config panel action', () => { const embeddable = { type: DOC_TYPE, isTextBasedLanguage: () => true, + getInput: () => { + return { + viewMode: 'edit', + }; + }, + getIsEditable: () => true, } as unknown as IEmbeddable; const configurablePanelAction = new ConfigureInLensPanelAction( mockStartDependencies, @@ -79,6 +94,12 @@ describe('open config panel action', () => { const embeddable = { type: DOC_TYPE, isTextBasedLanguage: () => true, + getInput: () => { + return { + viewMode: 'edit', + }; + }, + getIsEditable: () => true, openConfingPanel: jest.fn().mockResolvedValue(Lens Config Panel Component), getRoot: () => { return { diff --git a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts index 80156ae1442aab..b1647876581fd5 100644 --- a/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts +++ b/x-pack/plugins/lens/public/trigger_actions/open_lens_config/helpers.ts @@ -21,7 +21,9 @@ interface Context { } export async function isActionCompatible(embeddable: IEmbeddable) { - return Boolean(isLensEmbeddable(embeddable) && embeddable.isTextBasedLanguage()); + // display the action only if dashboard is on editable mode + const inDashboardEditMode = embeddable.getInput().viewMode === 'edit'; + return Boolean(isLensEmbeddable(embeddable) && embeddable.getIsEditable() && inDashboardEditMode); } export async function executeAction({ embeddable, startDependencies, overlays, theme }: Context) { diff --git a/x-pack/plugins/lens/public/types.ts b/x-pack/plugins/lens/public/types.ts index 13651c3bc5e69f..d549fbb71bdcfd 100644 --- a/x-pack/plugins/lens/public/types.ts +++ b/x-pack/plugins/lens/public/types.ts @@ -507,6 +507,8 @@ export interface Datasource { references?: SavedObjectReference[], dataViewsService?: DataViewsPublicPluginStart ) => Promise; + + injectReferencesToLayers?: (state: T, references?: SavedObjectReference[]) => T; } export interface DatasourceFixAction { @@ -1009,6 +1011,7 @@ interface AddLayerButtonProps { addLayer: AddLayerFunction; ensureIndexPattern: (specOrId: DataViewSpec | string) => Promise; registerLibraryAnnotationGroup: RegisterLibraryAnnotationGroupFunction; + isInlineEditing?: boolean; } export interface Visualization { diff --git a/x-pack/plugins/lens/public/visualizations/xy/add_layer.tsx b/x-pack/plugins/lens/public/visualizations/xy/add_layer.tsx index c522badb5b96d9..3e4ecfd0d5bfed 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/add_layer.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/add_layer.tsx @@ -26,12 +26,14 @@ interface AddLayerButtonProps { supportedLayers: VisualizationLayerDescription[]; addLayer: AddLayerFunction; eventAnnotationService: EventAnnotationServiceType; + isInlineEditing?: boolean; } export function AddLayerButton({ supportedLayers, addLayer, eventAnnotationService, + isInlineEditing, }: AddLayerButtonProps) { const [showLayersChoice, toggleLayersChoice] = useState(false); @@ -162,6 +164,7 @@ export function AddLayerButton({ isLoadLibraryVisible={isLoadLibraryVisible} setLoadLibraryFlyoutVisible={setLoadLibraryFlyoutVisible} eventAnnotationService={eventAnnotationService} + isInlineEditing={isInlineEditing} addLayer={(extraArg) => { addLayer(LayerTypes.ANNOTATIONS, extraArg); }} diff --git a/x-pack/plugins/lens/public/visualizations/xy/load_annotation_library_flyout.tsx b/x-pack/plugins/lens/public/visualizations/xy/load_annotation_library_flyout.tsx index cb9521b42e0a64..098d76e7f9ad49 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/load_annotation_library_flyout.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/load_annotation_library_flyout.tsx @@ -19,11 +19,13 @@ export function LoadAnnotationLibraryFlyout({ isLoadLibraryVisible, setLoadLibraryFlyoutVisible, addLayer, + isInlineEditing, }: { isLoadLibraryVisible: boolean; setLoadLibraryFlyoutVisible: (visible: boolean) => void; eventAnnotationService: EventAnnotationServiceType; addLayer: (argument?: ExtraAppendLayerArg) => void; + isInlineEditing?: boolean; }) { const { renderEventAnnotationGroupSavedObjectFinder: EventAnnotationGroupSavedObjectFinder, @@ -66,6 +68,7 @@ export function LoadAnnotationLibraryFlyout({ setLoadLibraryFlyoutVisible(false); return true; }} + isInlineEditing={isInlineEditing} >
; + +export interface ConfigSchema { + ad?: { enabled: boolean }; + dfa?: { enabled: boolean }; + nlp?: { enabled: boolean }; +} + +export function initEnabledFeatures(enabledFeatures: MlFeatures, config: ConfigSchema) { + if (config.ad?.enabled !== undefined) { + enabledFeatures.ad = config.ad.enabled; + } + if (config.dfa?.enabled !== undefined) { + enabledFeatures.dfa = config.dfa.enabled; + } + if (config.nlp?.enabled !== undefined) { + enabledFeatures.nlp = config.nlp.enabled; + } +} diff --git a/x-pack/plugins/ml/common/constants/locator.ts b/x-pack/plugins/ml/common/constants/locator.ts index 8f3b0ac23ee29c..92c89c5aedf94a 100644 --- a/x-pack/plugins/ml/common/constants/locator.ts +++ b/x-pack/plugins/ml/common/constants/locator.ts @@ -15,8 +15,9 @@ export const ML_PAGES = { DATA_FRAME_ANALYTICS_SOURCE_SELECTION: 'data_frame_analytics/source_selection', DATA_FRAME_ANALYTICS_CREATE_JOB: 'data_frame_analytics/new_job', TRAINED_MODELS_MANAGE: 'trained_models', - DATA_COMPARISON_INDEX_SELECT: 'data_comparison_index_select', - DATA_COMPARISON: 'data_comparison', + DATA_DRIFT_INDEX_SELECT: 'data_drift_index_select', + DATA_DRIFT_CUSTOM: 'data_drift_custom', + DATA_DRIFT: 'data_drift', NODES: 'nodes', MEMORY_USAGE: 'memory_usage', DATA_FRAME_ANALYTICS_EXPLORATION: 'data_frame_analytics/exploration', diff --git a/x-pack/plugins/ml/common/types/locator.ts b/x-pack/plugins/ml/common/types/locator.ts index 31de127c560443..329ba59ba90733 100644 --- a/x-pack/plugins/ml/common/types/locator.ts +++ b/x-pack/plugins/ml/common/types/locator.ts @@ -58,8 +58,9 @@ export type MlGenericUrlState = MLPageState< | typeof ML_PAGES.FILTER_LISTS_MANAGE | typeof ML_PAGES.FILTER_LISTS_NEW | typeof ML_PAGES.SETTINGS - | typeof ML_PAGES.DATA_COMPARISON - | typeof ML_PAGES.DATA_COMPARISON_INDEX_SELECT + | typeof ML_PAGES.DATA_DRIFT_CUSTOM + | typeof ML_PAGES.DATA_DRIFT_INDEX_SELECT + | typeof ML_PAGES.DATA_DRIFT | typeof ML_PAGES.DATA_VISUALIZER | typeof ML_PAGES.DATA_VISUALIZER_FILE | typeof ML_PAGES.DATA_VISUALIZER_INDEX_SELECT diff --git a/x-pack/plugins/ml/common/types/trained_models.ts b/x-pack/plugins/ml/common/types/trained_models.ts index 0b636b70071dc0..70f588712c3518 100644 --- a/x-pack/plugins/ml/common/types/trained_models.ts +++ b/x-pack/plugins/ml/common/types/trained_models.ts @@ -11,6 +11,7 @@ import type { FeatureImportanceBaseline, TotalFeatureImportance, } from '@kbn/ml-data-frame-analytics-utils'; +import { IndexName, IndicesIndexState } from '@elastic/elasticsearch/lib/api/types'; import type { XOR } from './common'; import type { MlSavedObjectType } from './saved_objects'; @@ -110,6 +111,7 @@ export type TrainedModelConfigResponse = estypes.MlTrainedModelConfig & { tags: string[]; version: string; inference_config?: Record; + indices?: Array>; }; export interface PipelineDefinition { diff --git a/x-pack/plugins/ml/kibana.jsonc b/x-pack/plugins/ml/kibana.jsonc index e2b327009f66a0..e3afdf35d0c4fc 100644 --- a/x-pack/plugins/ml/kibana.jsonc +++ b/x-pack/plugins/ml/kibana.jsonc @@ -13,6 +13,7 @@ "charts", "cloud", "data", + "dataViewEditor", "dataViews", "dataVisualizer", "discover", diff --git a/x-pack/plugins/ml/public/application/aiops/change_point_detection.tsx b/x-pack/plugins/ml/public/application/aiops/change_point_detection.tsx index e0c1728d893a50..774c3ac6f9d2d6 100644 --- a/x-pack/plugins/ml/public/application/aiops/change_point_detection.tsx +++ b/x-pack/plugins/ml/public/application/aiops/change_point_detection.tsx @@ -15,15 +15,16 @@ import { ChangePointDetection } from '@kbn/aiops-plugin/public'; import { useDataSource } from '../contexts/ml/data_source_context'; import { useFieldStatsTrigger, FieldStatsFlyoutProvider } from '../components/field_stats_flyout'; -import { useMlKibana, useIsServerless } from '../contexts/kibana'; +import { useMlKibana } from '../contexts/kibana'; import { HelpMenu } from '../components/help_menu'; import { TechnicalPreviewBadge } from '../components/technical_preview_badge'; import { MlPageHeader } from '../components/page_header'; +import { useEnabledFeatures } from '../contexts/ml/serverless_context'; export const ChangePointDetectionPage: FC = () => { const { services } = useMlKibana(); - const isServerless = useIsServerless(); + const { showNodeInfo } = useEnabledFeatures(); const { selectedDataView: dataView, selectedSavedSearch: savedSearch } = useDataSource(); @@ -46,7 +47,7 @@ export const ChangePointDetectionPage: FC = () => { { const { services } = useMlKibana(); - const isServerless = useIsServerless(); + const { showNodeInfo } = useEnabledFeatures(); const { selectedDataView: dataView, selectedSavedSearch: savedSearch } = useDataSource(); @@ -41,7 +42,7 @@ export const LogCategorizationPage: FC = () => { { const { services } = useMlKibana(); - const isServerless = useIsServerless(); + const { showNodeInfo } = useEnabledFeatures(); const { selectedDataView: dataView, selectedSavedSearch: savedSearch } = useDataSource(); @@ -44,7 +45,7 @@ export const LogRateAnalysisPage: FC = () => { stickyHistogram={false} dataView={dataView} savedSearch={savedSearch} - isServerless={isServerless} + showFrozenDataTierChoice={showNodeInfo} appDependencies={pick(services, [ 'application', 'data', diff --git a/x-pack/plugins/ml/public/application/app.tsx b/x-pack/plugins/ml/public/application/app.tsx index a5993f99e4a9cb..e403222815b9a2 100644 --- a/x-pack/plugins/ml/public/application/app.tsx +++ b/x-pack/plugins/ml/public/application/app.tsx @@ -19,6 +19,7 @@ import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-pl import { StorageContextProvider } from '@kbn/ml-local-storage'; import useLifecycles from 'react-use/lib/useLifecycles'; import useObservable from 'react-use/lib/useObservable'; +import type { MlFeatures } from '../../common/constants/app'; import { MlLicense } from '../../common/license'; import { MlCapabilitiesService } from './capabilities/check_capabilities'; import { ML_STORAGE_KEYS } from '../../common/types/storage'; @@ -30,6 +31,7 @@ import { MlRouter } from './routing'; import { mlApiServicesProvider } from './services/ml_api_service'; import { HttpService } from './services/http_service'; import type { PageDependencies } from './routing/router'; +import { EnabledFeaturesContextProvider } from './contexts/ml'; export type MlDependencies = Omit< MlSetupDependencies, @@ -42,6 +44,7 @@ interface AppProps { deps: MlDependencies; appMountParams: AppMountParameters; isServerless: boolean; + mlFeatures: MlFeatures; } const localStorage = new Storage(window.localStorage); @@ -49,11 +52,7 @@ const localStorage = new Storage(window.localStorage); /** * Provides global services available across the entire ML app. */ -export function getMlGlobalServices( - httpStart: HttpStart, - isServerless: boolean, - usageCollection?: UsageCollectionSetup -) { +export function getMlGlobalServices(httpStart: HttpStart, usageCollection?: UsageCollectionSetup) { const httpService = new HttpService(httpStart); const mlApiServices = mlApiServicesProvider(httpService); @@ -63,7 +62,6 @@ export function getMlGlobalServices( mlUsageCollection: mlUsageCollectionProvider(usageCollection), mlCapabilities: new MlCapabilitiesService(mlApiServices), mlLicense: new MlLicense(), - isServerless, }; } @@ -73,7 +71,7 @@ export interface MlServicesContext { export type MlGlobalServices = ReturnType; -const App: FC = ({ coreStart, deps, appMountParams, isServerless }) => { +const App: FC = ({ coreStart, deps, appMountParams, isServerless, mlFeatures }) => { const pageDeps: PageDependencies = { history: appMountParams.history, setHeaderActionMenu: appMountParams.setHeaderActionMenu, @@ -91,6 +89,7 @@ const App: FC = ({ coreStart, deps, appMountParams, isServerless }) => embeddable: deps.embeddable, maps: deps.maps, triggersActionsUi: deps.triggersActionsUi, + dataViewEditor: deps.dataViewEditor, dataVisualizer: deps.dataVisualizer, usageCollection: deps.usageCollection, fieldFormats: deps.fieldFormats, @@ -105,9 +104,9 @@ const App: FC = ({ coreStart, deps, appMountParams, isServerless }) => contentManagement: deps.contentManagement, presentationUtil: deps.presentationUtil, ...coreStart, - mlServices: getMlGlobalServices(coreStart.http, isServerless, deps.usageCollection), + mlServices: getMlGlobalServices(coreStart.http, deps.usageCollection), }; - }, [deps, coreStart, isServerless]); + }, [deps, coreStart]); useLifecycles( function setupLicenseOnMount() { @@ -131,7 +130,7 @@ const App: FC = ({ coreStart, deps, appMountParams, isServerless }) => const datePickerDeps: DatePickerDependencies = { ...pick(services, ['data', 'http', 'notifications', 'theme', 'uiSettings', 'i18n']), uiSettingsKeys: UI_SETTINGS, - isServerless, + showFrozenDataTierChoice: !isServerless, }; const I18nContext = coreStart.i18n.Context; @@ -145,7 +144,9 @@ const App: FC = ({ coreStart, deps, appMountParams, isServerless }) => - + + + @@ -159,7 +160,8 @@ export const renderApp = ( coreStart: CoreStart, deps: MlDependencies, appMountParams: AppMountParameters, - isServerless: boolean + isServerless: boolean, + mlFeatures: MlFeatures ) => { setDependencyCache({ timefilter: deps.data.query.timefilter, @@ -193,6 +195,7 @@ export const renderApp = ( deps={deps} appMountParams={appMountParams} isServerless={isServerless} + mlFeatures={mlFeatures} />, appMountParams.element ); diff --git a/x-pack/plugins/ml/public/application/components/import_export_jobs/export_jobs_flyout/export_jobs_flyout.tsx b/x-pack/plugins/ml/public/application/components/import_export_jobs/export_jobs_flyout/export_jobs_flyout.tsx index 5bf0e73b2cee10..396f2d000290c8 100644 --- a/x-pack/plugins/ml/public/application/components/import_export_jobs/export_jobs_flyout/export_jobs_flyout.tsx +++ b/x-pack/plugins/ml/public/application/components/import_export_jobs/export_jobs_flyout/export_jobs_flyout.tsx @@ -32,7 +32,7 @@ import { JobsExportService } from './jobs_export_service'; import type { JobDependencies } from './jobs_export_service'; import { toastNotificationServiceProvider } from '../../../services/toast_notification_service'; import type { JobType } from '../../../../../common/types/saved_objects'; -import { usePermissionCheck } from '../../../capabilities/check_capabilities'; +import { useEnabledFeatures } from '../../../contexts/ml'; interface Props { isDisabled: boolean; @@ -68,7 +68,7 @@ export const ExportJobsFlyout: FC = ({ isDisabled, currentTab }) => { () => toastNotificationServiceProvider(toasts), [toasts] ); - const [isADEnabled, isDFAEnabled] = usePermissionCheck(['isADEnabled', 'isDFAEnabled']); + const { isADEnabled, isDFAEnabled } = useEnabledFeatures(); const [jobDependencies, setJobDependencies] = useState([]); const [selectedJobDependencies, setSelectedJobDependencies] = useState([]); diff --git a/x-pack/plugins/ml/public/application/components/import_export_jobs/import_jobs_flyout/import_jobs_flyout.tsx b/x-pack/plugins/ml/public/application/components/import_export_jobs/import_jobs_flyout/import_jobs_flyout.tsx index 61e6df17676cb0..d6f616bed93ef6 100644 --- a/x-pack/plugins/ml/public/application/components/import_export_jobs/import_jobs_flyout/import_jobs_flyout.tsx +++ b/x-pack/plugins/ml/public/application/components/import_export_jobs/import_jobs_flyout/import_jobs_flyout.tsx @@ -40,7 +40,7 @@ import { toastNotificationServiceProvider } from '../../../services/toast_notifi import { JobImportService } from './jobs_import_service'; import { useValidateIds } from './validate'; import type { ImportedAdJob, JobIdObject, SkippedJobs } from './jobs_import_service'; -import { usePermissionCheck } from '../../../capabilities/check_capabilities'; +import { useEnabledFeatures } from '../../../contexts/ml'; interface Props { isDisabled: boolean; @@ -82,7 +82,7 @@ export const ImportJobsFlyout: FC = ({ isDisabled }) => { () => toastNotificationServiceProvider(toasts), [toasts] ); - const [isADEnabled, isDFAEnabled] = usePermissionCheck(['isADEnabled', 'isDFAEnabled']); + const { isADEnabled, isDFAEnabled } = useEnabledFeatures(); const [validateIds] = useValidateIds( jobType, diff --git a/x-pack/plugins/ml/public/application/components/job_messages/job_messages.tsx b/x-pack/plugins/ml/public/application/components/job_messages/job_messages.tsx index 20faeaf0bdfd27..c5a7826ac0ee98 100644 --- a/x-pack/plugins/ml/public/application/components/job_messages/job_messages.tsx +++ b/x-pack/plugins/ml/public/application/components/job_messages/job_messages.tsx @@ -25,7 +25,7 @@ import { JobMessage } from '../../../../common/types/audit_message'; import { blurButtonOnClick } from '../../util/component_utils'; import { JobIcon } from '../job_message_icon'; -import { useIsServerless } from '../../contexts/kibana'; +import { useEnabledFeatures } from '../../contexts/ml'; interface JobMessagesProps { messages: JobMessage[]; @@ -46,7 +46,7 @@ export const JobMessages: FC = ({ refreshMessage, actionHandler, }) => { - const isServerless = useIsServerless(); + const { showNodeInfo } = useEnabledFeatures(); const columns: Array> = useMemo(() => { const cols = [ { @@ -90,7 +90,7 @@ export const JobMessages: FC = ({ }, ]; - if (isServerless === false) { + if (showNodeInfo) { cols.splice(2, 0, { field: 'node_name', name: i18n.translate('xpack.ml.jobMessages.nodeLabel', { @@ -101,7 +101,7 @@ export const JobMessages: FC = ({ } return cols; - }, [isServerless, refreshMessage]); + }, [showNodeInfo, refreshMessage]); if (typeof actionHandler === 'function') { columns.push({ diff --git a/x-pack/plugins/ml/public/application/components/job_spaces_sync/sync_list.tsx b/x-pack/plugins/ml/public/application/components/job_spaces_sync/sync_list.tsx index 211dc1aa8c57b5..550b93deb5e5ec 100644 --- a/x-pack/plugins/ml/public/application/components/job_spaces_sync/sync_list.tsx +++ b/x-pack/plugins/ml/public/application/components/job_spaces_sync/sync_list.tsx @@ -18,10 +18,10 @@ import { } from '@elastic/eui'; import type { SyncSavedObjectResponse, SyncResult } from '../../../../common/types/saved_objects'; -import { usePermissionCheck } from '../../capabilities/check_capabilities'; +import { useEnabledFeatures } from '../../contexts/ml'; export const SyncList: FC<{ syncItems: SyncSavedObjectResponse | null }> = ({ syncItems }) => { - const [isADEnabled] = usePermissionCheck(['isADEnabled']); + const { isADEnabled } = useEnabledFeatures(); if (syncItems === null) { return null; diff --git a/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/jobs_awaiting_node_warning.tsx b/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/jobs_awaiting_node_warning.tsx index a85776aeacc82d..336e707c32499b 100644 --- a/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/jobs_awaiting_node_warning.tsx +++ b/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/jobs_awaiting_node_warning.tsx @@ -10,15 +10,15 @@ import React, { FC } from 'react'; import { EuiCallOut, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { lazyMlNodesAvailable } from '../../ml_nodes_check'; -import { useIsServerless } from '../../contexts/kibana'; +import { useEnabledFeatures } from '../../contexts/ml'; interface Props { jobCount: number; } export const JobsAwaitingNodeWarning: FC = ({ jobCount }) => { - const isServerless = useIsServerless(); - if (isServerless || lazyMlNodesAvailable() === false || jobCount === 0) { + const { showNodeInfo } = useEnabledFeatures(); + if (showNodeInfo === false || lazyMlNodesAvailable() === false || jobCount === 0) { return null; } diff --git a/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/new_job_awaiting_node.tsx b/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/new_job_awaiting_node.tsx index 5055efad210f09..e120a068d0dddd 100644 --- a/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/new_job_awaiting_node.tsx +++ b/x-pack/plugins/ml/public/application/components/jobs_awaiting_node_warning/new_job_awaiting_node.tsx @@ -11,30 +11,37 @@ import { EuiCallOut, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { JobType } from '../../../../common/types/saved_objects'; import { lazyMlNodesAvailable } from '../../ml_nodes_check'; -import { useIsServerless } from '../../contexts/kibana'; +import { useEnabledFeatures } from '../../contexts/ml'; interface Props { jobType: JobType; } export const NewJobAwaitingNodeWarning: FC = () => { - const isServerless = useIsServerless(); + const { showNodeInfo } = useEnabledFeatures(); if (lazyMlNodesAvailable() === false) { return null; } - return isServerless ? ( + return showNodeInfo ? ( <> } color="primary" iconType="iInCircle" - /> + > +
+ +
+
) : ( @@ -42,20 +49,13 @@ export const NewJobAwaitingNodeWarning: FC = () => { } color="primary" iconType="iInCircle" - > -
- -
-
+ /> ); diff --git a/x-pack/plugins/ml/public/application/components/ml_entity_selector/ml_entity_selector.tsx b/x-pack/plugins/ml/public/application/components/ml_entity_selector/ml_entity_selector.tsx index 22c14ff7d72a98..a23daa689e447b 100644 --- a/x-pack/plugins/ml/public/application/components/ml_entity_selector/ml_entity_selector.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_entity_selector/ml_entity_selector.tsx @@ -17,7 +17,7 @@ import { countBy } from 'lodash'; import useMount from 'react-use/lib/useMount'; import { useMlApiContext } from '../../contexts/kibana'; import { useToastNotificationService } from '../../services/toast_notification_service'; -import { usePermissionCheck } from '../../capabilities/check_capabilities'; +import { useEnabledFeatures } from '../../contexts/ml'; type EntityType = 'anomaly_detector' | 'data_frame_analytics' | 'trained_models'; @@ -61,11 +61,7 @@ export const MlEntitySelector: FC = ({ onSelectionChange, handleDuplicates = false, }) => { - const [isADEnabled, isDFAEnabled, isNLPEnabled] = usePermissionCheck([ - 'isADEnabled', - 'isDFAEnabled', - 'isNLPEnabled', - ]); + const { isADEnabled, isDFAEnabled, isNLPEnabled } = useEnabledFeatures(); const { jobs: jobsApi, trainedModels, dataFrameAnalytics } = useMlApiContext(); const { displayErrorToast } = useToastNotificationService(); const visColorsBehindText = euiPaletteColorBlindBehindText(); diff --git a/x-pack/plugins/ml/public/application/components/ml_page/ml_page.tsx b/x-pack/plugins/ml/public/application/components/ml_page/ml_page.tsx index 3eb1deb83e7ae6..982ee749cc834d 100644 --- a/x-pack/plugins/ml/public/application/components/ml_page/ml_page.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_page/ml_page.tsx @@ -20,7 +20,7 @@ import { DatePickerWrapper } from '@kbn/ml-date-picker'; import * as routes from '../../routing/routes'; import { MlPageWrapper } from '../../routing/ml_page_wrapper'; -import { useMlKibana, useNavigateToPath, useIsServerless } from '../../contexts/kibana'; +import { useMlKibana, useNavigateToPath } from '../../contexts/kibana'; import type { MlRoute, PageDependencies } from '../../routing/router'; import { useActiveRoute } from '../../routing/use_active_route'; import { useDocTitle } from '../../routing/use_doc_title'; @@ -28,6 +28,7 @@ import { useDocTitle } from '../../routing/use_doc_title'; import { MlPageHeaderRenderer } from '../page_header/page_header'; import { useSideNavItems } from './side_nav'; +import { useEnabledFeatures } from '../../contexts/ml'; const ML_APP_SELECTOR = '[data-test-subj="mlApp"]'; @@ -55,7 +56,7 @@ export const MlPage: FC<{ pageDeps: PageDependencies }> = React.memo(({ pageDeps mlServices: { httpService }, }, } = useMlKibana(); - const isServerless = useIsServerless(); + const { showMLNavMenu } = useEnabledFeatures(); const headerPortalNode = useMemo(() => createHtmlPortalNode(), []); const [isHeaderMounted, setIsHeaderMounted] = useState(false); @@ -127,7 +128,7 @@ export const MlPage: FC<{ pageDeps: PageDependencies }> = React.memo(({ pageDeps data-test-subj={'mlApp'} restrictWidth={false} solutionNav={ - isServerless === false + showMLNavMenu ? { name: i18n.translate('xpack.ml.plugin.title', { defaultMessage: 'Machine Learning', diff --git a/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx b/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx index 94b58758135c6b..dda32fbaf8af76 100644 --- a/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx @@ -235,13 +235,13 @@ export function useSideNavItems(activeRoute: MlRoute | undefined) { testSubj: 'mlMainTab indexDataVisualizer', }, { - id: 'data_comparison', - pathId: ML_PAGES.DATA_COMPARISON_INDEX_SELECT, + id: 'data_drift', + pathId: ML_PAGES.DATA_DRIFT_INDEX_SELECT, name: i18n.translate('xpack.ml.navMenu.dataComparisonText', { - defaultMessage: 'Data Comparison', + defaultMessage: 'Data Drift', }), disabled: disableLinks, - testSubj: 'mlMainTab dataComparison', + testSubj: 'mlMainTab dataDrift', }, ], }, diff --git a/x-pack/plugins/ml/public/application/contexts/kibana/index.ts b/x-pack/plugins/ml/public/application/contexts/kibana/index.ts index afedbdef15b6c1..e8696e9b49068a 100644 --- a/x-pack/plugins/ml/public/application/contexts/kibana/index.ts +++ b/x-pack/plugins/ml/public/application/contexts/kibana/index.ts @@ -16,4 +16,3 @@ export { useMlApiContext } from './use_ml_api_context'; export { useFieldFormatter } from './use_field_formatter'; export { useCurrentThemeVars } from './use_current_theme'; export { useMlLicenseInfo } from './use_ml_license'; -export { useIsServerless } from './use_is_serverless'; diff --git a/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts b/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts index 852a8b86995128..f9bd1fe2315b33 100644 --- a/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts +++ b/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts @@ -29,11 +29,13 @@ import type { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-manag import type { ContentManagementPublicStart } from '@kbn/content-management-plugin/public'; import type { SavedSearchPublicPluginStart } from '@kbn/saved-search-plugin/public'; import type { PresentationUtilPluginStart } from '@kbn/presentation-util-plugin/public'; +import { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; import type { MlServicesContext } from '../../app'; interface StartPlugins { data: DataPublicPluginStart; dataViews: DataViewsPublicPluginStart; + dataViewEditor: DataViewEditorStart; security?: SecurityPluginSetup; licenseManagement?: LicenseManagementUIPluginSetup; share: SharePluginStart; diff --git a/x-pack/plugins/ml/public/application/contexts/ml/index.ts b/x-pack/plugins/ml/public/application/contexts/ml/index.ts index eb51ff6186fe69..d5935bdc2ad97d 100644 --- a/x-pack/plugins/ml/public/application/contexts/ml/index.ts +++ b/x-pack/plugins/ml/public/application/contexts/ml/index.ts @@ -6,3 +6,4 @@ */ export { DataSourceContextProvider, useDataSource } from './data_source_context'; +export { EnabledFeaturesContextProvider, useEnabledFeatures } from './serverless_context'; diff --git a/x-pack/plugins/ml/public/application/contexts/ml/serverless_context.tsx b/x-pack/plugins/ml/public/application/contexts/ml/serverless_context.tsx new file mode 100644 index 00000000000000..3662a817a03da0 --- /dev/null +++ b/x-pack/plugins/ml/public/application/contexts/ml/serverless_context.tsx @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { createContext, FC, useContext, useMemo } from 'react'; +import type { MlFeatures } from '../../../../common/constants/app'; + +export interface EnabledFeatures { + showNodeInfo: boolean; + showMLNavMenu: boolean; + showLicenseInfo: boolean; + isADEnabled: boolean; + isDFAEnabled: boolean; + isNLPEnabled: boolean; +} +export const EnabledFeaturesContext = createContext({ + showNodeInfo: true, + showMLNavMenu: true, + showLicenseInfo: true, + isADEnabled: true, + isDFAEnabled: true, + isNLPEnabled: true, +}); + +interface Props { + isServerless: boolean; + mlFeatures: MlFeatures; +} + +export const EnabledFeaturesContextProvider: FC = ({ + children, + isServerless, + mlFeatures, +}) => { + const features: EnabledFeatures = { + showNodeInfo: !isServerless, + showMLNavMenu: !isServerless, + showLicenseInfo: !isServerless, + isADEnabled: mlFeatures.ad, + isDFAEnabled: mlFeatures.dfa, + isNLPEnabled: mlFeatures.nlp, + }; + + return ( + {children} + ); +}; + +export function useEnabledFeatures() { + const context = useContext(EnabledFeaturesContext); + return useMemo(() => { + return context; + }, [context]); +} diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/job_map/components/controls.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/job_map/components/controls.tsx index 74356242ae8aa3..82695b39e00665 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/job_map/components/controls.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/job_map/components/controls.tsx @@ -37,8 +37,8 @@ import { useNotifications, useNavigateToPath, useMlKibana, - useIsServerless, } from '../../../../contexts/kibana'; +import { useEnabledFeatures } from '../../../../contexts/ml'; import { getDataViewIdFromName } from '../../../../util/index_utils'; import { useNavigateToWizardWithClonedJob } from '../../analytics_management/components/action_clone/clone_action_name'; import { @@ -55,9 +55,9 @@ interface Props { refreshJobsCallback: () => void; } -function getListItemsFactory(isServerless: boolean) { +function getListItemsFactory(showLicenseInfo: boolean) { return (details: Record): EuiDescriptionListProps['listItems'] => { - if (isServerless) { + if (showLicenseInfo === false) { delete details.license_level; } @@ -94,8 +94,8 @@ export const Controls: FC = React.memo( const canCreateDataFrameAnalytics: boolean = usePermissionCheck('canCreateDataFrameAnalytics'); const canDeleteDataFrameAnalytics: boolean = usePermissionCheck('canDeleteDataFrameAnalytics'); const deleteAction = useDeleteAction(canDeleteDataFrameAnalytics); - const isServerless = useIsServerless(); - const getListItems = useMemo(() => getListItemsFactory(isServerless), [isServerless]); + const { showLicenseInfo } = useEnabledFeatures(); + const getListItems = useMemo(() => getListItemsFactory(showLicenseInfo), [showLicenseInfo]); const { closeDeleteJobCheckModal, @@ -171,6 +171,15 @@ export const Controls: FC = React.memo( // eslint-disable-next-line react-hooks/exhaustive-deps }, [share.url.locators, nodeLabel]); + const onAnalyzeDataDrift = useCallback(async () => { + closePopover(); + const path = await mlLocator.getUrl({ + page: ML_PAGES.DATA_DRIFT_CUSTOM, + pageState: { comparison: nodeLabel }, + }); + await navigateToPath(path); + }, [nodeLabel, navigateToPath, mlLocator]); + const onCloneJobClick = useCallback(async () => { navigateToWizardWithClonedJob({ config: details[nodeId], stats: details[nodeId]?.stats }); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -263,6 +272,21 @@ export const Controls: FC = React.memo( , ] : []), + ...(nodeType === JOB_MAP_NODE_TYPES.INDEX + ? [ + + + , + ] + : []), ...(nodeType === JOB_MAP_NODE_TYPES.INDEX ? [ { + // If it's not a letter, number or is something longer, reject it + if (!keyPressed || !/[a-z0-9]/i.test(keyPressed) || keyPressed.length !== 1) { + return false; + } + return true; +}; + +type DataViewEditorServiceSpec = DataViewEditorService; +const getDefaultIndexPattern = (referenceIndexPattern: string, comparisonIndexPattern: string) => + referenceIndexPattern === comparisonIndexPattern + ? referenceIndexPattern + : `${referenceIndexPattern},${comparisonIndexPattern}`; + +export function DataDriftIndexPatternsEditor({ + referenceDataViewEditorService, + comparisonDataViewEditorService, + initialReferenceIndexPattern, + initialComparisonIndexPattern, +}: { + referenceDataViewEditorService: DataViewEditorServiceSpec; + comparisonDataViewEditorService: DataViewEditorServiceSpec; + initialReferenceIndexPattern?: string; + initialComparisonIndexPattern?: string; +}) { + const { + services: { + dataViewEditor, + data: { dataViews }, + }, + } = useMlKibana(); + const locator = useMlLocator()!; + const canEditDataView = dataViewEditor?.userPermissions.editDataView(); + const [timeField, setTimeField] = useState>>([]); + const [dataViewName, setDataViewName] = useState(''); + const [dataViewMsg, setDataViewMsg] = useState(); + const [foundDataViewId, setFoundDataViewId] = useState(); + const [refError, setRefError] = useState(); + const [comparisonError, setComparisonError] = useState(); + const toastNotificationService = useToastNotificationService(); + + // For the purpose of data drift, the two datasets need to have the same common timestamp field if they exist + // In data view management, creating a data view provides union of all the timestamp fields + // Here, we need the intersection of two sets instead + const combinedTimeFieldOptions$: Observable>> = + useMemo(() => { + return combineLatest([ + referenceDataViewEditorService?.timestampFieldOptions$, + comparisonDataViewEditorService?.timestampFieldOptions$, + ]).pipe( + map(([referenceTimeFieldOptions, productionTimeFieldOptions]) => { + const intersectedTimeFields = intersectionBy( + referenceTimeFieldOptions, + productionTimeFieldOptions, + (d) => d.fieldName + ).map(({ display, fieldName }) => ({ + label: display, + value: fieldName, + })); + + return intersectedTimeFields; + }) + ); + }, [comparisonDataViewEditorService, referenceDataViewEditorService]); + + const combinedTimeFieldOptions = useObservable(combinedTimeFieldOptions$, []); + + const [referenceIndexPattern, setReferenceIndexPattern] = useState( + initialReferenceIndexPattern ?? '' + ); + const [comparisonIndexPattern, setComparisonIndexPattern] = useState( + initialComparisonIndexPattern ?? '' + ); + + const navigateToPath = useNavigateToPath(); + const abortCtrl = useRef(new AbortController()); + + useEffect(() => { + let unmounted = false; + + if ( + !unmounted && + Array.isArray(combinedTimeFieldOptions) && + combinedTimeFieldOptions.length > 0 && + timeField.length === 0 + ) { + setTimeField([combinedTimeFieldOptions[0]]); + } + + return () => { + unmounted = true; + }; + }, [combinedTimeFieldOptions, timeField]); + + useEffect( + function validateMatchingDataViews() { + let unmounted = false; + const getMatchingDataView = async () => { + abortCtrl.current.abort(); + abortCtrl.current = new AbortController(); + + setDataViewMsg(undefined); + setFoundDataViewId(undefined); + if (!unmounted && referenceIndexPattern && comparisonIndexPattern) { + const indicesName = getDefaultIndexPattern(referenceIndexPattern, comparisonIndexPattern); + + const matchingDataViews = await dataViews.find(indicesName); + + const timeFieldName = + Array.isArray(timeField) && timeField.length > 0 && timeField[0].value !== '' + ? timeField[0].value + : undefined; + + if (Array.isArray(matchingDataViews) && matchingDataViews.length > 0) { + const foundDataView = matchingDataViews.find((d) => { + return d.timeFieldName === timeFieldName; + }); + + if (foundDataView) { + setFoundDataViewId(foundDataView.id); + } else { + setDataViewMsg( + i18n.translate( + 'xpack.ml.dataDrift.indexPatternsEditor.hasDataViewWithDifferentTimeField', + { + defaultMessage: `Found a data view matching pattern '{indexPattern}' but with a different time field. Creating a new data view to analyze data drift.`, + values: { indexPattern: indicesName }, + } + ) + ); + } + } + } + }; + + getMatchingDataView(); + + return () => { + abortCtrl.current?.abort(); + unmounted = true; + }; + }, + [referenceIndexPattern, comparisonIndexPattern, timeField, dataViews] + ); + const createDataViewAndRedirectToDataDriftPage = debounce(async (createAdHocDV = false) => { + // Create adhoc data view + const indicesName = getDefaultIndexPattern(referenceIndexPattern, comparisonIndexPattern); + + const timeFieldName = + Array.isArray(timeField) && timeField.length > 0 ? timeField[0].value : undefined; + + let dataView; + + try { + if (!foundDataViewId) { + const defaultDataViewName = + dataViewMsg === undefined + ? indicesName + : `${indicesName}${timeFieldName ? '-' + timeFieldName : ''}`; + + const modifiedDataViewName = dataViewName === '' ? defaultDataViewName : dataViewName; + if (canEditDataView && createAdHocDV === false) { + dataView = await dataViews.createAndSave({ + title: indicesName, + name: modifiedDataViewName, + timeFieldName, + }); + } else { + dataView = await dataViews.create({ + title: indicesName, + name: modifiedDataViewName, + timeFieldName, + }); + } + } + const dataViewId = foundDataViewId ?? dataView?.id; + const url = await locator.getUrl({ + page: ML_PAGES.DATA_DRIFT, + pageState: { + index: dataViewId, + reference: encodeURIComponent(referenceIndexPattern), + comparison: encodeURIComponent(comparisonIndexPattern), + timeFieldName, + }, + }); + + await navigateToPath(url); + } catch (e) { + toastNotificationService.displayErrorToast(e); + } + }, 400); + + const hasError = + refError !== undefined || + comparisonError !== undefined || + !comparisonIndexPattern || + !referenceIndexPattern; + + const firstSetOfSteps = [ + { + title: i18n.translate('xpack.ml.dataDrift.indexPatternsEditor.enterReferenceDataTitle', { + defaultMessage: 'Enter index pattern for reference data', + }), + children: ( + + + } + helpText={ + + } + dataViewEditorService={referenceDataViewEditorService} + indexPattern={referenceIndexPattern} + setIndexPattern={setReferenceIndexPattern} + onError={setRefError} + /> + + ), + }, + { + title: i18n.translate('xpack.ml.dataDrift.indexPatternsEditor.enterComparisonDataTitle', { + defaultMessage: 'Enter index pattern for comparison data', + }), + children: ( + + + } + helpText={ + + } + dataViewEditorService={comparisonDataViewEditorService} + indexPattern={comparisonIndexPattern} + setIndexPattern={setComparisonIndexPattern} + onError={setComparisonError} + /> + + ), + }, + { + title: i18n.translate('xpack.ml.dataDrift.indexPatternsEditor.additionalSettingsTitle', { + defaultMessage: 'Additional settings', + }), + children: ( + + {combinedTimeFieldOptions.length > 0 ? ( + + <> + + placeholder={i18n.translate( + 'xpack.ml.dataDrift.indexPatternsEditor.timestampFieldOptions', + { + defaultMessage: 'Select an optional timestamp field', + } + )} + singleSelection={{ asPlainText: true }} + options={combinedTimeFieldOptions} + selectedOptions={timeField} + onChange={(newValue) => { + if (newValue.length === 0) { + // Don't allow clearing the type. One must always be selected + return; + } + setTimeField(newValue); + }} + isClearable={false} + isDisabled={comparisonIndexPattern === '' && referenceIndexPattern === ''} + data-test-subj="timestampField" + aria-label={i18n.translate( + 'xpack.ml.dataDrift.indexPatternsEditor.timestampSelectAriaLabel', + { + defaultMessage: 'Timestamp field', + } + )} + fullWidth + /> + + + ) : null} + {!foundDataViewId ? ( + + ) => { + setDataViewName(e.target.value); + }} + fullWidth + data-test-subj="dataDriftDataViewNameInput" + /> + + ) : null} + + {dataViewMsg ? {dataViewMsg} : null} + + + + {canEditDataView && foundDataViewId === undefined ? ( + + + + + + ) : null} + + + + + + + + + + ), + }, + ]; + + return ; +} diff --git a/x-pack/plugins/ml/public/application/datavisualizer/data_comparison/data_comparison_page.tsx b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_drift_page.tsx similarity index 69% rename from x-pack/plugins/ml/public/application/datavisualizer/data_comparison/data_comparison_page.tsx rename to x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_drift_page.tsx index 8b016d17cc938f..94aa60cb8147a2 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/data_comparison/data_comparison_page.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_drift_page.tsx @@ -8,23 +8,23 @@ import React, { FC, useEffect, useState } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { DataComparisonSpec } from '@kbn/data-visualizer-plugin/public'; +import type { DataDriftSpec } from '@kbn/data-visualizer-plugin/public'; import { useMlKibana } from '../../contexts/kibana'; import { useDataSource } from '../../contexts/ml'; import { MlPageHeader } from '../../components/page_header'; import { TechnicalPreviewBadge } from '../../components/technical_preview_badge'; -export const DataComparisonPage: FC = () => { +export const DataDriftPage: FC = () => { const { services: { dataVisualizer }, } = useMlKibana(); - const [DataComparisonView, setDataComparisonView] = useState(null); + const [DataDriftView, setDataDriftView] = useState(null); useEffect(() => { if (dataVisualizer !== undefined) { - const { getDataComparisonComponent } = dataVisualizer; - getDataComparisonComponent().then(setDataComparisonView); + const { getDataDriftComponent } = dataVisualizer; + getDataDriftComponent().then(setDataDriftView); } }, [dataVisualizer]); @@ -36,8 +36,8 @@ export const DataComparisonPage: FC = () => { @@ -45,8 +45,8 @@ export const DataComparisonPage: FC = () => { - {dataView && DataComparisonView ? ( - + {dataView && DataDriftView ? ( + ) : null} ); diff --git a/x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_view_editor.tsx b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_view_editor.tsx new file mode 100644 index 00000000000000..05a1aaa4ad8515 --- /dev/null +++ b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/data_view_editor.tsx @@ -0,0 +1,190 @@ +/* + * 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 useDebounce from 'react-use/lib/useDebounce'; +import useObservable from 'react-use/lib/useObservable'; +import React, { ChangeEvent, ReactNode, useMemo, useState, useEffect } from 'react'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +import { + EuiBasicTable, + EuiCallOut, + EuiFieldText, + EuiFlexItem, + EuiFormRow, + EuiFlexGrid, + useEuiTheme, +} from '@elastic/eui'; +import type { DataViewEditorService } from '@kbn/data-view-editor-plugin/public'; +import type { MatchedItem } from '@kbn/data-views-plugin/public'; +import { useTableSettings } from '../../data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings'; +import { canAppendWildcard, matchedIndicesDefault } from './data_drift_index_patterns_editor'; + +interface DataViewEditorProps { + label: ReactNode; + dataViewEditorService: DataViewEditorService; + indexPattern: string; + setIndexPattern: (ip: string) => void; + onError: (errorMsg?: string) => void; + helpText?: ReactNode; +} + +const mustMatchError = i18n.translate( + 'xpack.ml.dataDrift.indexPatternsEditor.createIndex.noMatch', + { + defaultMessage: 'Name must match one or more data streams, indices, or index aliases.', + } +); + +export function DataViewEditor({ + label, + dataViewEditorService, + indexPattern, + setIndexPattern, + onError, + helpText, +}: DataViewEditorProps) { + useDebounce( + () => { + dataViewEditorService.setIndexPattern(indexPattern); + }, + 250, + [indexPattern] + ); + const matchedIndices = useObservable( + dataViewEditorService.matchedIndices$, + matchedIndicesDefault + ); + + const matchedReferenceIndices = + indexPattern === '' || (indexPattern !== '' && matchedIndices.exactMatchedIndices.length === 0) + ? matchedIndices.allIndices + : matchedIndices.exactMatchedIndices; + const [appendedWildcard, setAppendedWildcard] = useState(false); + + const [pageState, updatePageState] = useState({ + pageIndex: 0, + pageSize: 10, + sortField: 'name', + sortDirection: 'asc', + }); + + const { onTableChange, pagination } = useTableSettings( + matchedReferenceIndices.length, + pageState, + // @ts-expect-error callback will have all the 4 necessary params + updatePageState + ); + + const pageOfItems = useMemo(() => { + return matchedReferenceIndices.slice( + pagination.pageIndex * pagination.pageSize, + (pagination.pageIndex + 1) * pagination.pageSize + ); + }, [pagination.pageSize, pagination.pageIndex, matchedReferenceIndices]); + + const columns = [ + { + field: 'name', + name: i18n.translate('xpack.ml.dataDrift.indexPatternsEditor.tableColShard', { + defaultMessage: 'Matched indices', + }), + sortable: false, + truncateText: false, + }, + ]; + const errorMessage = useMemo(() => { + if (indexPattern === '') + return i18n.translate('xpack.ml.dataDrift.indexPatternsEditor.error.noEmptyIndexPattern', { + defaultMessage: 'Index pattern must not be empty.', + }); + if (indexPattern !== '' && matchedIndices.exactMatchedIndices.length === 0) { + return mustMatchError; + } + return undefined; + }, [indexPattern, matchedIndices.exactMatchedIndices.length]); + + useEffect(() => { + if (onError) { + onError(errorMessage); + } + }, [onError, errorMessage]); + const { euiTheme } = useEuiTheme(); + + return ( + + + + ) => { + let query = e.target.value; + if (query.length === 1 && !appendedWildcard && canAppendWildcard(query)) { + query += '*'; + setAppendedWildcard(true); + setTimeout(() => e.target.setSelectionRange(1, 1)); + } else { + if (['', '*'].includes(query) && appendedWildcard) { + query = ''; + setAppendedWildcard(false); + } + } + setIndexPattern(query); + }} + fullWidth + data-test-subj="createIndexPatternTitleInput" + placeholder="example-pattern*" + /> + + + + {errorMessage === mustMatchError ? ( + + + +
+ ), + }} + /> + + ) : null} + + items={pageOfItems} + columns={columns} + pagination={pagination} + onChange={onTableChange} + /> + + + ); +} diff --git a/x-pack/plugins/ml/public/application/datavisualizer/data_drift/index_patterns_picker.tsx b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/index_patterns_picker.tsx new file mode 100644 index 00000000000000..1f414d82245784 --- /dev/null +++ b/x-pack/plugins/ml/public/application/datavisualizer/data_drift/index_patterns_picker.tsx @@ -0,0 +1,205 @@ +/* + * 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, { FC, useEffect, useState, useMemo } from 'react'; +import { EuiPageBody, EuiPageSection, EuiButton, EuiPanel } from '@elastic/eui'; +import { parse } from 'query-string'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { SavedObjectFinder } from '@kbn/saved-objects-finder-plugin/public'; +import { type DataViewEditorService as DataViewEditorServiceSpec } from '@kbn/data-view-editor-plugin/public'; +import { INDEX_PATTERN_TYPE } from '@kbn/data-views-plugin/public'; +import { createPath } from '../../routing/router'; +import { ML_PAGES } from '../../../../common/constants/locator'; +import { DataDriftIndexPatternsEditor } from './data_drift_index_patterns_editor'; + +import { MlPageHeader } from '../../components/page_header'; +import { useMlKibana, useNavigateToPath } from '../../contexts/kibana'; +export const DataDriftIndexOrSearchRedirect: FC = () => { + const navigateToPath = useNavigateToPath(); + const { contentManagement, uiSettings } = useMlKibana().services; + const { + services: { dataViewEditor }, + } = useMlKibana(); + + const nextStepPath = '/data_drift'; + const onObjectSelection = (id: string, type: string) => { + navigateToPath( + `${nextStepPath}?${type === 'index-pattern' ? 'index' : 'savedSearchId'}=${encodeURIComponent( + id + )}` + ); + }; + + const canEditDataView = dataViewEditor?.userPermissions.editDataView(); + + return ( +
+ + + + + + 'search', + name: i18n.translate( + 'xpack.ml.newJob.wizard.searchSelection.savedObjectType.search', + { + defaultMessage: 'Saved search', + } + ), + }, + { + type: 'index-pattern', + getIconForSavedObject: () => 'indexPatternApp', + name: i18n.translate( + 'xpack.ml.newJob.wizard.searchSelection.savedObjectType.dataView', + { + defaultMessage: 'Data view', + } + ), + }, + ]} + fixedPageSize={20} + services={{ + contentClient: contentManagement.client, + uiSettings, + }} + > + navigateToPath(createPath(ML_PAGES.DATA_DRIFT_CUSTOM))} + disabled={!canEditDataView} + > + + + + + +
+ ); +}; + +export const DataDriftIndexPatternsPicker: FC = () => { + const { reference, comparison } = parse(location.search, { + sort: false, + }) as { reference: string; comparison: string }; + + const [dataViewEditorServices, setDataViewEditorServices] = useState< + | { + referenceDataViewEditorService: DataViewEditorServiceSpec; + comparisonDataViewEditorService: DataViewEditorServiceSpec; + } + | undefined + >(); + + const { + services: { + dataViewEditor, + http, + data: { dataViews }, + }, + } = useMlKibana(); + const { dataViewEditorServiceFactory } = dataViewEditor; + + const initialComparisonIndexPattern = useMemo( + () => (comparison ? comparison.replaceAll(`'`, '') : ''), + [comparison] + ); + const initialReferenceIndexPattern = useMemo( + () => (reference ? reference.replaceAll(`'`, '') : ''), + [reference] + ); + + useEffect(() => { + let unmounted = false; + const getDataViewEditorService = async () => { + if (http && dataViews && dataViewEditorServiceFactory) { + const { DataViewEditorService } = await dataViewEditorServiceFactory(); + const referenceDataViewEditorService = new DataViewEditorService({ + // @ts-expect-error Mismatch in DataViewsServicePublic import, but should be same + services: { http, dataViews }, + initialValues: { + name: '', + type: INDEX_PATTERN_TYPE.DEFAULT, + indexPattern: initialReferenceIndexPattern, + }, + requireTimestampField: false, + }); + const comparisonDataViewEditorService = new DataViewEditorService({ + // @ts-expect-error Mismatch in DataViewsServicePublic import, but should be same + services: { http, dataViews }, + initialValues: { + name: '', + type: INDEX_PATTERN_TYPE.DEFAULT, + indexPattern: initialComparisonIndexPattern, + }, + requireTimestampField: false, + }); + if (!unmounted) { + setDataViewEditorServices({ + referenceDataViewEditorService, + comparisonDataViewEditorService, + }); + } + } + }; + getDataViewEditorService(); + + return () => { + unmounted = true; + }; + }, [ + dataViewEditorServiceFactory, + http, + dataViews, + initialReferenceIndexPattern, + initialComparisonIndexPattern, + ]); + + return ( +
+ + + + + + {dataViewEditorServices ? ( + + ) : null} + + +
+ ); +}; diff --git a/x-pack/plugins/ml/public/application/datavisualizer/index_based/index_data_visualizer.tsx b/x-pack/plugins/ml/public/application/datavisualizer/index_based/index_data_visualizer.tsx index 3debbda8021c33..69c034738cf5f2 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/index_based/index_data_visualizer.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/index_based/index_data_visualizer.tsx @@ -15,13 +15,14 @@ import type { GetAdditionalLinksParams, } from '@kbn/data-visualizer-plugin/public'; import { useTimefilter } from '@kbn/ml-date-picker'; -import { useMlKibana, useMlLocator, useIsServerless } from '../../contexts/kibana'; +import { useMlKibana, useMlLocator } from '../../contexts/kibana'; import { HelpMenu } from '../../components/help_menu'; import { ML_PAGES } from '../../../../common/constants/locator'; import { isFullLicense } from '../../license'; import { mlNodesAvailable, getMlNodeCount } from '../../ml_nodes_check/check_ml_nodes'; import { checkPermission } from '../../capabilities/check_capabilities'; import { MlPageHeader } from '../../components/page_header'; +import { useEnabledFeatures } from '../../contexts/ml'; export const IndexDataVisualizerPage: FC = () => { useTimefilter({ timeRangeSelector: false, autoRefreshSelector: false }); @@ -37,7 +38,7 @@ export const IndexDataVisualizerPage: FC = () => { }, }, } = useMlKibana(); - const isServerless = useIsServerless(); + const { showNodeInfo } = useEnabledFeatures(); const mlLocator = useMlLocator()!; const mlFeaturesDisabled = !isFullLicense(); getMlNodeCount(); @@ -191,7 +192,7 @@ export const IndexDataVisualizerPage: FC = () => { ) : null} diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js index dcecda5575d878..23d20bf6aa5294 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js @@ -137,7 +137,7 @@ export class JobsListView extends Component { loadFullJob(jobId) .then((job) => { const fullJobsList = { ...this.state.fullJobsList }; - if (this.props.isServerless) { + if (this.props.showNodeInfo === false) { job = removeNodeInfo(job); } fullJobsList[jobId] = job; @@ -318,7 +318,7 @@ export class JobsListView extends Component { const fullJobsList = {}; const jobsSummaryList = jobs.map((job) => { if (job.fullJob !== undefined) { - if (this.props.isServerless) { + if (this.props.showNodeInfo === false) { job.fullJob = removeNodeInfo(job.fullJob); } fullJobsList[job.id] = job.fullJob; @@ -417,7 +417,7 @@ export class JobsListView extends Component { diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_stats_bar/jobs_stats_bar.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_stats_bar/jobs_stats_bar.js index c8b2868267d800..bebb342b2939b6 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_stats_bar/jobs_stats_bar.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_stats_bar/jobs_stats_bar.js @@ -12,11 +12,9 @@ import PropTypes from 'prop-types'; import React from 'react'; import { i18n } from '@kbn/i18n'; -function createJobStats(jobsSummaryList, isServerless) { - const displayNodeInfo = isServerless === false; - +function createJobStats(jobsSummaryList, showNodeInfo) { const jobStats = { - ...(displayNodeInfo + ...(showNodeInfo ? { activeNodes: { label: i18n.translate('xpack.ml.jobsList.statsBar.activeMLNodesLabel', { @@ -100,20 +98,20 @@ function createJobStats(jobsSummaryList, isServerless) { jobStats.failed.show = false; } - if (displayNodeInfo) { + if (showNodeInfo) { jobStats.activeNodes.value = Object.keys(mlNodes).length; } return jobStats; } -export const JobStatsBar = ({ jobsSummaryList, isServerless }) => { - const jobStats = createJobStats(jobsSummaryList, isServerless); +export const JobStatsBar = ({ jobsSummaryList, showNodeInfo }) => { + const jobStats = createJobStats(jobsSummaryList, showNodeInfo); return ; }; JobStatsBar.propTypes = { jobsSummaryList: PropTypes.array.isRequired, - isServerless: PropTypes.bool.isRequired, + showNodeInfo: PropTypes.bool.isRequired, }; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx index f413b97cb36021..a34ed51eab0add 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx @@ -12,10 +12,11 @@ import { JobsListView } from './components/jobs_list_view'; import { ML_PAGES } from '../../../../common/constants/locator'; import { ListingPageUrlState } from '../../../../common/types/common'; import { HelpMenu } from '../../components/help_menu'; -import { useIsServerless, useMlKibana } from '../../contexts/kibana'; +import { useMlKibana } from '../../contexts/kibana'; import { MlPageHeader } from '../../components/page_header'; import { HeaderMenuPortal } from '../../components/header_menu_portal'; import { JobsActionMenu } from '../components/jobs_action_menu'; +import { useEnabledFeatures } from '../../contexts/ml'; interface PageUrlState { pageKey: typeof ML_PAGES.ANOMALY_DETECTION_JOBS_MANAGE; @@ -42,7 +43,8 @@ export const JobsPage: FC = ({ isMlEnabledInSpace, lastRefresh }) const { services: { docLinks }, } = useMlKibana(); - const isServerless = useIsServerless(); + + const { showNodeInfo } = useEnabledFeatures(); const helpLink = docLinks.links.ml.anomalyDetection; return ( <> @@ -57,7 +59,7 @@ export const JobsPage: FC = ({ isMlEnabledInSpace, lastRefresh }) lastRefresh={lastRefresh} jobsViewState={pageState} onJobsViewStateUpdate={setPageState} - isServerless={isServerless} + showNodeInfo={showNodeInfo} /> diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/time_range_step/time_range.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/time_range_step/time_range.tsx index d9fa9e542c0c5e..d93eb690c31d9a 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/time_range_step/time_range.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/time_range_step/time_range.tsx @@ -22,7 +22,7 @@ import { EventRateChart } from '../charts/event_rate_chart'; import { LineChartPoint } from '../../../common/chart_loader'; import { JOB_TYPE } from '../../../../../../../common/constants/new_job'; import { TimeRangePicker, TimeRange } from '../../../common/components'; -import { useMlKibana, useIsServerless } from '../../../../../contexts/kibana'; +import { useMlKibana } from '../../../../../contexts/kibana'; import { ML_FROZEN_TIER_PREFERENCE, type MlStorageKey, @@ -33,7 +33,6 @@ export const TimeRangeStep: FC = ({ setCurrentStep, isCurrentStep }) const timefilter = useTimefilter(); const { services } = useMlKibana(); const dataSourceContext = useDataSource(); - const isServerless = useIsServerless(); const { jobCreator, jobCreatorUpdate, jobCreatorUpdated, chartLoader, chartInterval } = useContext(JobCreatorContext); @@ -138,7 +137,6 @@ export const TimeRangeStep: FC = ({ setCurrentStep, isCurrentStep }) callback={fullTimeRangeCallback} timefilter={timefilter} apiPath={`${ML_INTERNAL_BASE_PATH}/fields_service/time_field_range`} - hideFrozenDataTierChoice={isServerless} /> diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx index d9c0200961caa0..c4b81907e52b99 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx @@ -17,8 +17,9 @@ export interface PageProps { nextStepPath: string; } +const RESULTS_PER_PAGE = 20; + export const Page: FC = ({ nextStepPath }) => { - const RESULTS_PER_PAGE = 20; const { contentManagement, uiSettings } = useMlKibana().services; const navigateToPath = useNavigateToPath(); diff --git a/x-pack/plugins/ml/public/application/management/index.ts b/x-pack/plugins/ml/public/application/management/index.ts index dea3ba6cd8afa8..7f8030f4e7ddb6 100644 --- a/x-pack/plugins/ml/public/application/management/index.ts +++ b/x-pack/plugins/ml/public/application/management/index.ts @@ -11,13 +11,15 @@ import type { CoreSetup } from '@kbn/core/public'; import type { ManagementSetup } from '@kbn/management-plugin/public'; import type { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import type { ManagementAppMountParams } from '@kbn/management-plugin/public'; +import type { MlFeatures } from '../../../common/constants/app'; import type { MlStartDependencies } from '../../plugin'; export function registerManagementSection( management: ManagementSetup, core: CoreSetup, deps: { usageCollection?: UsageCollectionSetup }, - isServerless: boolean + isServerless: boolean, + mlFeatures: MlFeatures ) { return management.sections.section.insightsAndAlerting.registerApp({ id: 'jobsListLink', @@ -27,7 +29,7 @@ export function registerManagementSection( order: 4, async mount(params: ManagementAppMountParams) { const { mountApp } = await import('./jobs_list'); - return mountApp(core, params, deps, isServerless); + return mountApp(core, params, deps, isServerless, mlFeatures); }, }); } diff --git a/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx b/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx index 2cf92278cfa630..1627fbc13e497d 100644 --- a/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx +++ b/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx @@ -30,7 +30,8 @@ import { import type { SharePluginStart } from '@kbn/share-plugin/public'; import type { SpacesContextProps, SpacesPluginStart } from '@kbn/spaces-plugin/public'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; -import { PLUGIN_ID } from '../../../../../../common/constants/app'; +import { EnabledFeaturesContextProvider } from '../../../../contexts/ml'; +import { type MlFeatures, PLUGIN_ID } from '../../../../../../common/constants/app'; import { checkGetManagementMlJobsResolver } from '../../../../capabilities/check_capabilities'; @@ -46,7 +47,7 @@ import { DocsLink } from './docs_link'; const getEmptyFunctionComponent: React.FC = ({ children }) => <>{children}; -export const JobsListPage: FC<{ +interface Props { coreStart: CoreStart; share: SharePluginStart; history: ManagementAppMountParams['history']; @@ -55,7 +56,10 @@ export const JobsListPage: FC<{ usageCollection?: UsageCollectionSetup; fieldFormats: FieldFormatsStart; isServerless: boolean; -}> = ({ + mlFeatures: MlFeatures; +} + +export const JobsListPage: FC = ({ coreStart, share, history, @@ -64,6 +68,7 @@ export const JobsListPage: FC<{ usageCollection, fieldFormats, isServerless, + mlFeatures, }) => { const [initialized, setInitialized] = useState(false); const [accessDenied, setAccessDenied] = useState(false); @@ -74,8 +79,8 @@ export const JobsListPage: FC<{ const theme$ = coreStart.theme.theme$; const mlServices = useMemo( - () => getMlGlobalServices(coreStart.http, isServerless, usageCollection), - [coreStart.http, isServerless, usageCollection] + () => getMlGlobalServices(coreStart.http, usageCollection), + [coreStart.http, usageCollection] ); const check = async () => { @@ -134,62 +139,64 @@ export const JobsListPage: FC<{ }} > - - - } - description={ - - } - rightSideItems={[]} - bottomBorder - paddingSize={'none'} - /> - - - - - - - <> - setShowSyncFlyout(true)} - data-test-subj="mlStackMgmtSyncButton" - > - {i18n.translate('xpack.ml.management.jobsList.syncFlyoutButton', { - defaultMessage: 'Synchronize saved objects', - })} - - {showSyncFlyout && } - - - - - + + + } + description={ + - - - - - - - - + } + rightSideItems={[]} + bottomBorder + paddingSize={'none'} + /> + + + + + + + <> + setShowSyncFlyout(true)} + data-test-subj="mlStackMgmtSyncButton" + > + {i18n.translate('xpack.ml.management.jobsList.syncFlyoutButton', { + defaultMessage: 'Synchronize saved objects', + })} + + {showSyncFlyout && } + + + + + + + + + + + + + + diff --git a/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/space_management/space_management.tsx b/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/space_management/space_management.tsx index bb21b971a8c126..afd59431e37341 100644 --- a/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/space_management/space_management.tsx +++ b/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/space_management/space_management.tsx @@ -21,7 +21,7 @@ import { import type { SpacesPluginStart } from '@kbn/spaces-plugin/public'; import { useTableState } from '@kbn/ml-in-memory-table'; -import { usePermissionCheck } from '../../../../../capabilities/check_capabilities'; +import { useEnabledFeatures } from '../../../../../contexts/ml'; import type { JobType, MlSavedObjectType } from '../../../../../../../common/types/saved_objects'; import type { ManagementListResponse, @@ -46,11 +46,7 @@ export const SpaceManagement: FC = ({ spacesApi, setCurrentTab }) => { const [filters, setFilters] = useState(); const [isLoading, setIsLoading] = useState(false); - const [isADEnabled, isDFAEnabled, isNLPEnabled] = usePermissionCheck([ - 'isADEnabled', - 'isDFAEnabled', - 'isNLPEnabled', - ]); + const { isADEnabled, isDFAEnabled, isNLPEnabled } = useEnabledFeatures(); const { onTableChange, pagination, sorting, setPageIndex } = useTableState( items ?? [], diff --git a/x-pack/plugins/ml/public/application/management/jobs_list/index.ts b/x-pack/plugins/ml/public/application/management/jobs_list/index.ts index 2e512e2d708bf1..2c4c3bef4e1c52 100644 --- a/x-pack/plugins/ml/public/application/management/jobs_list/index.ts +++ b/x-pack/plugins/ml/public/application/management/jobs_list/index.ts @@ -14,6 +14,7 @@ import type { ManagementAppMountParams } from '@kbn/management-plugin/public'; import type { SharePluginStart } from '@kbn/share-plugin/public'; import type { SpacesPluginStart } from '@kbn/spaces-plugin/public'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; +import type { MlFeatures } from '../../../../common/constants/app'; import type { MlStartDependencies } from '../../../plugin'; import { JobsListPage } from './components'; import { getJobsListBreadcrumbs } from '../breadcrumbs'; @@ -26,6 +27,7 @@ const renderApp = ( data: DataPublicPluginStart, fieldFormats: FieldFormatsStart, isServerless: boolean, + mlFeatures: MlFeatures, spacesApi?: SpacesPluginStart, usageCollection?: UsageCollectionSetup ) => { @@ -39,6 +41,7 @@ const renderApp = ( usageCollection, fieldFormats, isServerless, + mlFeatures, }), element ); @@ -51,7 +54,8 @@ export async function mountApp( core: CoreSetup, params: ManagementAppMountParams, deps: { usageCollection?: UsageCollectionSetup }, - isServerless: boolean + isServerless: boolean, + mlFeatures: MlFeatures ) { const [coreStart, pluginsStart] = await core.getStartServices(); @@ -64,6 +68,7 @@ export async function mountApp( pluginsStart.data, pluginsStart.fieldFormats, isServerless, + mlFeatures, pluginsStart.spaces, deps.usageCollection ); diff --git a/x-pack/plugins/ml/public/application/memory_usage/memory_tree_map/tree_map.tsx b/x-pack/plugins/ml/public/application/memory_usage/memory_tree_map/tree_map.tsx index f134b2e5fbb837..b236e2cb33a836 100644 --- a/x-pack/plugins/ml/public/application/memory_usage/memory_tree_map/tree_map.tsx +++ b/x-pack/plugins/ml/public/application/memory_usage/memory_tree_map/tree_map.tsx @@ -29,7 +29,7 @@ import { useFieldFormatter, useMlKibana } from '../../contexts/kibana'; import { useRefresh } from '../../routing/use_refresh'; import { getMemoryItemColor } from '../memory_item_colors'; import { useToastNotificationService } from '../../services/toast_notification_service'; -import { usePermissionCheck } from '../../capabilities/check_capabilities'; +import { useEnabledFeatures } from '../../contexts/ml'; interface Props { node?: string; @@ -73,11 +73,7 @@ export const JobMemoryTreeMap: FC = ({ node, type, height }) => { [isDarkTheme] ); - const [isADEnabled, isDFAEnabled, isNLPEnabled] = usePermissionCheck([ - 'isADEnabled', - 'isDFAEnabled', - 'isNLPEnabled', - ]); + const { isADEnabled, isDFAEnabled, isNLPEnabled } = useEnabledFeatures(); const bytesFormatter = useFieldFormatter(FIELD_FORMAT_IDS.BYTES); const { displayErrorToast } = useToastNotificationService(); diff --git a/x-pack/plugins/ml/public/application/memory_usage/memory_usage_page.tsx b/x-pack/plugins/ml/public/application/memory_usage/memory_usage_page.tsx index 249d9c959809d2..5d03fb8315c533 100644 --- a/x-pack/plugins/ml/public/application/memory_usage/memory_usage_page.tsx +++ b/x-pack/plugins/ml/public/application/memory_usage/memory_usage_page.tsx @@ -13,7 +13,7 @@ import { NodesList } from './nodes_overview'; import { MlPageHeader } from '../components/page_header'; import { MemoryPage, JobMemoryTreeMap } from './memory_tree_map'; import { SavedObjectsWarning } from '../components/saved_objects_warning'; -import { useIsServerless } from '../contexts/kibana'; +import { useEnabledFeatures } from '../contexts/ml'; enum TAB { NODES, @@ -24,7 +24,7 @@ export const MemoryUsagePage: FC = () => { const [selectedTab, setSelectedTab] = useState(TAB.NODES); useTimefilter({ timeRangeSelector: false, autoRefreshSelector: true }); - const isServerless = useIsServerless(); + const { showNodeInfo } = useEnabledFeatures(); const refresh = useCallback(() => { mlTimefilterRefresh$.next({ @@ -47,7 +47,7 @@ export const MemoryUsagePage: FC = () => { - {isServerless === false ? ( + {showNodeInfo ? ( <> = ({ item }) => { const formatToListItems = useListItemsFormatter(); - const isServerless = useIsServerless(); + const { showLicenseInfo, showNodeInfo } = useEnabledFeatures(); const { inference_config: inferenceConfig, @@ -151,17 +151,17 @@ export const ExpandedRow: FC = ({ item }) => { estimated_operations, estimated_heap_memory_usage_bytes, default_field_map, - ...(isServerless ? {} : { license_level }), + ...(showLicenseInfo ? { license_level } : {}), }; }, [ - default_field_map, description, - estimated_heap_memory_usage_bytes, - estimated_operations, - license_level, tags, version, - isServerless, + estimated_operations, + estimated_heap_memory_usage_bytes, + default_field_map, + showLicenseInfo, + license_level, ]); const deploymentStatItems: AllocatedModel[] = useMemo(() => { @@ -200,8 +200,8 @@ export const ExpandedRow: FC = ({ item }) => { }, [stats]); const hideColumns = useMemo(() => { - return isServerless ? ['model_id', 'node_name'] : ['model_id']; - }, [isServerless]); + return showNodeInfo ? ['model_id'] : ['model_id', 'node_name']; + }, [showNodeInfo]); const tabs = useMemo(() => { return [ diff --git a/x-pack/plugins/ml/public/application/model_management/model_actions.tsx b/x-pack/plugins/ml/public/application/model_management/model_actions.tsx index c276dbc8ea9216..f10ba782ee9da7 100644 --- a/x-pack/plugins/ml/public/application/model_management/model_actions.tsx +++ b/x-pack/plugins/ml/public/application/model_management/model_actions.tsx @@ -540,6 +540,40 @@ export function useModelActions({ return canTestTrainedModels && isTestable(item, true) && !isLoading; }, }, + { + name: i18n.translate('xpack.ml.inference.modelsList.analyzeDataDriftLabel', { + defaultMessage: 'Analyze data drift', + }), + description: i18n.translate('xpack.ml.inference.modelsList.analyzeDataDriftLabel', { + defaultMessage: 'Analyze data drift', + }), + 'data-test-subj': 'mlModelsAnalyzeDataDriftAction', + icon: 'visTagCloud', + type: 'icon', + isPrimary: true, + available: (item) => { + return ( + item?.metadata?.analytics_config !== undefined || + (Array.isArray(item.indices) && item.indices.length > 0) + ); + }, + onClick: async (item) => { + let indexPatterns: string[] | undefined = item?.indices + ?.map((o) => Object.keys(o)) + .flat(); + + if (item?.metadata?.analytics_config?.dest?.index !== undefined) { + const destIndex = item.metadata.analytics_config.dest?.index; + indexPatterns = [destIndex]; + } + const path = await urlLocator.getUrl({ + page: ML_PAGES.DATA_DRIFT_CUSTOM, + pageState: indexPatterns ? { comparison: indexPatterns.join(',') } : {}, + }); + + await navigateToPath(path, false); + }, + }, ], [ urlLocator, diff --git a/x-pack/plugins/ml/public/application/model_management/models_list.tsx b/x-pack/plugins/ml/public/application/model_management/models_list.tsx index 5ddcc2096b914c..b959c1e2340647 100644 --- a/x-pack/plugins/ml/public/application/model_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/model_management/models_list.tsx @@ -63,7 +63,7 @@ import { useRefresh } from '../routing/use_refresh'; import { SavedObjectsWarning } from '../components/saved_objects_warning'; import { TestTrainedModelFlyout } from './test_models'; import { AddInferencePipelineFlyout } from '../components/ml_inference'; -import { usePermissionCheck } from '../capabilities/check_capabilities'; +import { useEnabledFeatures } from '../contexts/ml'; type Stats = Omit; @@ -105,7 +105,7 @@ export const ModelsList: FC = ({ }, } = useMlKibana(); - const [isNLPEnabled] = usePermissionCheck(['isNLPEnabled']); + const { isNLPEnabled } = useEnabledFeatures(); useTimefilter({ timeRangeSelector: false, autoRefreshSelector: true }); @@ -187,6 +187,7 @@ export const ModelsList: FC = ({ try { const response = await trainedModelsApiService.getTrainedModels(undefined, { with_pipelines: true, + with_indices: true, }); const newItems: ModelItem[] = []; diff --git a/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx b/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx index 5edd19f4d8119a..850ce45fde123d 100644 --- a/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx +++ b/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx @@ -40,7 +40,7 @@ import type { NotificationItem, } from '../../../../common/types/notifications'; import { useMlKibana } from '../../contexts/kibana'; -import { usePermissionCheck } from '../../capabilities/check_capabilities'; +import { useEnabledFeatures } from '../../contexts/ml'; const levelBadgeMap: Record = { [ML_NOTIFICATIONS_MESSAGE_LEVEL.ERROR]: 'danger', @@ -67,11 +67,7 @@ export const NotificationsList: FC = () => { }, } = useMlKibana(); - const [isADEnabled, isDFAEnabled, isNLPEnabled] = usePermissionCheck([ - 'isADEnabled', - 'isDFAEnabled', - 'isNLPEnabled', - ]); + const { isADEnabled, isDFAEnabled, isNLPEnabled } = useEnabledFeatures(); const { displayErrorToast } = useToastNotificationService(); diff --git a/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/anomaly_detection_panel.tsx b/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/anomaly_detection_panel.tsx index 9707515deb8000..8cb97d75c9c3ae 100644 --- a/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/anomaly_detection_panel.tsx +++ b/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/anomaly_detection_panel.tsx @@ -19,7 +19,7 @@ import { import { ML_PAGES } from '../../../../../common/constants/locator'; import { OverviewStatsBar } from '../../../components/collapsible_panel/collapsible_panel'; import { CollapsiblePanel } from '../../../components/collapsible_panel'; -import { useMlKibana, useMlLink, useIsServerless } from '../../../contexts/kibana'; +import { useMlKibana, useMlLink } from '../../../contexts/kibana'; import { AnomalyDetectionTable } from './table'; import { ml } from '../../../services/ml_api_service'; import { getGroupsFromJobs, getStatsBarData } from './utils'; @@ -31,6 +31,7 @@ import { AnomalyTimelineService } from '../../../services/anomaly_timeline_servi import type { OverallSwimlaneData } from '../../../explorer/explorer_utils'; import { AnomalyDetectionEmptyState } from '../../../jobs/jobs_list/components/anomaly_detection_empty_state'; import { overviewPanelDefaultState } from '../../overview_page'; +import { useEnabledFeatures } from '../../../contexts/ml'; export type GroupsDictionary = Dictionary; @@ -57,7 +58,7 @@ export const AnomalyDetectionPanel: FC = ({ anomalyTimelineService, setLa } = useMlKibana(); const { displayErrorToast } = useToastNotificationService(); - const isServerless = useIsServerless(); + const { showNodeInfo } = useEnabledFeatures(); const refresh = useRefresh(); @@ -92,7 +93,7 @@ export const AnomalyDetectionPanel: FC = ({ anomalyTimelineService, setLa return job; }); const { groups: jobsGroups, count } = getGroupsFromJobs(jobsSummaryList); - const stats = getStatsBarData(jobsSummaryList, isServerless); + const stats = getStatsBarData(jobsSummaryList, showNodeInfo); const statGroups = groupBy( Object.entries(stats) diff --git a/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/utils.ts b/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/utils.ts index 3e46b258c3a058..edc993f324bab3 100644 --- a/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/utils.ts +++ b/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/utils.ts @@ -74,7 +74,7 @@ export function getGroupsFromJobs(jobs: MlSummaryJobs): { return { groups, count }; } -export function getStatsBarData(jobsList: MlSummaryJob[] | undefined, isServerless: boolean) { +export function getStatsBarData(jobsList: MlSummaryJob[] | undefined, showNodeInfo: boolean) { const jobStats = { total: { label: i18n.translate('xpack.ml.overviewJobsList.statsBar.totalJobsLabel', { @@ -108,9 +108,8 @@ export function getStatsBarData(jobsList: MlSummaryJob[] | undefined, isServerle show: false, group: 0, }, - ...(isServerless - ? {} - : { + ...(showNodeInfo + ? { activeNodes: { label: i18n.translate('xpack.ml.overviewJobsList.statsBar.activeMLNodesLabel', { defaultMessage: 'Active ML nodes', @@ -119,7 +118,8 @@ export function getStatsBarData(jobsList: MlSummaryJob[] | undefined, isServerle show: true, group: 1, }, - }), + } + : {}), activeDatafeeds: { label: i18n.translate('xpack.ml.jobsList.statsBar.activeDatafeedsLabel', { defaultMessage: 'Active datafeeds', @@ -166,7 +166,7 @@ export function getStatsBarData(jobsList: MlSummaryJob[] | undefined, isServerle jobStats.failed.show = false; } - if (isServerless === false) { + if (showNodeInfo) { jobStats.activeNodes!.value = Object.keys(mlNodes).length; } diff --git a/x-pack/plugins/ml/public/application/overview/components/content.tsx b/x-pack/plugins/ml/public/application/overview/components/content.tsx index 15998b9f58b935..1d0db5c6b96326 100644 --- a/x-pack/plugins/ml/public/application/overview/components/content.tsx +++ b/x-pack/plugins/ml/public/application/overview/components/content.tsx @@ -13,7 +13,7 @@ import { AnalyticsPanel } from './analytics_panel'; import { AnomalyTimelineService } from '../../services/anomaly_timeline_service'; import { mlResultsServiceProvider } from '../../services/results_service'; import { useMlKibana } from '../../contexts/kibana'; -import { usePermissionCheck } from '../../capabilities/check_capabilities'; +import { useEnabledFeatures } from '../../contexts/ml'; interface Props { createAnomalyDetectionJobDisabled: boolean; @@ -33,7 +33,7 @@ export const OverviewContent: FC = ({ }, } = useMlKibana(); - const [isADEnabled, isDFAEnabled] = usePermissionCheck(['isADEnabled', 'isDFAEnabled']); + const { isADEnabled, isDFAEnabled } = useEnabledFeatures(); const timefilter = useTimefilter(); diff --git a/x-pack/plugins/ml/public/application/routing/breadcrumbs.ts b/x-pack/plugins/ml/public/application/routing/breadcrumbs.ts index 2824b835f914a7..bbb80e11fbe84d 100644 --- a/x-pack/plugins/ml/public/application/routing/breadcrumbs.ts +++ b/x-pack/plugins/ml/public/application/routing/breadcrumbs.ts @@ -120,11 +120,11 @@ export const FILTER_LISTS_BREADCRUMB: ChromeBreadcrumb = Object.freeze({ href: '/settings/filter_lists', }); -export const DATA_COMPARISON_BREADCRUMB: ChromeBreadcrumb = Object.freeze({ +export const DATA_DRIFT_BREADCRUMB: ChromeBreadcrumb = Object.freeze({ text: i18n.translate('xpack.ml.settings.breadcrumbs.dataComparisonLabel', { - defaultMessage: 'Data comparison', + defaultMessage: 'Data drift', }), - href: '/data_comparison_index_select', + href: '/data_drift_index_select', }); const breadcrumbs = { @@ -133,7 +133,7 @@ const breadcrumbs = { ANOMALY_DETECTION_BREADCRUMB, DATA_FRAME_ANALYTICS_BREADCRUMB, TRAINED_MODELS, - DATA_COMPARISON_BREADCRUMB, + DATA_DRIFT_BREADCRUMB, DATA_VISUALIZER_BREADCRUMB, AIOPS_BREADCRUMB_LOG_RATE_ANALYSIS, AIOPS_BREADCRUMB_LOG_PATTERN_ANALYSIS, diff --git a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/data_comparison.tsx b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/data_comparison.tsx index 46f58318c1b92e..5a79c13fc3921f 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/data_comparison.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/data_comparison.tsx @@ -7,28 +7,28 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; +import { DataDriftPage } from '../../../datavisualizer/data_drift/data_drift_page'; import { DataSourceContextProvider } from '../../../contexts/ml'; -import { DataComparisonPage } from '../../../datavisualizer/data_comparison/data_comparison_page'; import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useRouteResolver } from '../../use_resolver'; import { breadcrumbOnClickFactory, - DATA_COMPARISON_BREADCRUMB, + DATA_DRIFT_BREADCRUMB, DATA_VISUALIZER_BREADCRUMB, getBreadcrumbWithUrlForApp, } from '../../breadcrumbs'; import { basicResolvers } from '../../resolvers'; -export const dataComparisonRouteFactory = ( +export const dataDriftRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - id: 'data_comparison', - path: createPath(ML_PAGES.DATA_COMPARISON), - title: i18n.translate('xpack.ml.dataVisualizer.dataComparison.docTitle', { - defaultMessage: 'Data Comparison', + id: 'data_drift', + path: createPath(ML_PAGES.DATA_DRIFT), + title: i18n.translate('xpack.ml.dataVisualizer.dataDrift.docTitle', { + defaultMessage: 'Data Drift', }), render: (props, deps) => , breadcrumbs: [ @@ -37,18 +37,18 @@ export const dataComparisonRouteFactory = ( text: DATA_VISUALIZER_BREADCRUMB.text, ...(navigateToPath ? { - href: `${basePath}/app/ml${DATA_COMPARISON_BREADCRUMB.href}`, - onClick: breadcrumbOnClickFactory(DATA_COMPARISON_BREADCRUMB.href, navigateToPath), + href: `${basePath}/app/ml${DATA_DRIFT_BREADCRUMB.href}`, + onClick: breadcrumbOnClickFactory(DATA_DRIFT_BREADCRUMB.href, navigateToPath), } : {}), }, { - text: i18n.translate('xpack.ml.trainedModelsBreadcrumbs.dataComparisonLabel', { - defaultMessage: 'Data Comparison', + text: i18n.translate('xpack.ml.trainedModelsBreadcrumbs.dataDriftLabel', { + defaultMessage: 'Data Drift', }), }, ], - 'data-test-subj': 'mlPageDataComparison', + 'data-test-subj': 'mlPageDataDrift', }); const PageWrapper: FC = () => { @@ -57,7 +57,7 @@ const PageWrapper: FC = () => { return ( - + ); diff --git a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/data_drift.tsx b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/data_drift.tsx new file mode 100644 index 00000000000000..df2d9adee8f308 --- /dev/null +++ b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/data_drift.tsx @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import React, { FC } from 'react'; +import { + DataDriftIndexOrSearchRedirect, + DataDriftIndexPatternsPicker, +} from '../../../datavisualizer/data_drift/index_patterns_picker'; +import { NavigateToPath } from '../../../contexts/kibana'; +import { MlRoute } from '../..'; +import { createPath, PageLoader, PageProps } from '../../router'; +import { ML_PAGES } from '../../../../../common/constants/locator'; +import { + breadcrumbOnClickFactory, + DATA_DRIFT_BREADCRUMB, + DATA_VISUALIZER_BREADCRUMB, + getBreadcrumbWithUrlForApp, +} from '../../breadcrumbs'; +import { useRouteResolver } from '../../use_resolver'; +import { basicResolvers } from '../../resolvers'; +import { DataSourceContextProvider } from '../../../contexts/ml'; + +export const dataDriftRouteIndexOrSearchFactory = ( + navigateToPath: NavigateToPath, + basePath: string +): MlRoute => ({ + id: 'data_drift', + path: createPath(ML_PAGES.DATA_DRIFT_INDEX_SELECT), + title: i18n.translate('xpack.ml.dataVisualizer.dataDrift.docTitle', { + defaultMessage: 'Data Drift', + }), + render: (props, deps) => ( + + ), + breadcrumbs: [ + getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), + { + text: DATA_VISUALIZER_BREADCRUMB.text, + ...(navigateToPath + ? { + href: `${basePath}/app/ml${DATA_DRIFT_BREADCRUMB.href}`, + onClick: breadcrumbOnClickFactory(DATA_DRIFT_BREADCRUMB.href, navigateToPath), + } + : {}), + }, + { + text: i18n.translate('xpack.ml.trainedModelsBreadcrumbs.dataDriftLabel', { + defaultMessage: 'Data Drift', + }), + }, + ], + 'data-test-subj': 'mlPageDataDrift', +}); + +export const dataDriftRouteIndexPatternFactory = ( + navigateToPath: NavigateToPath, + basePath: string +): MlRoute => ({ + id: 'data_drift', + path: createPath(ML_PAGES.DATA_DRIFT_CUSTOM), + title: i18n.translate('xpack.ml.dataVisualizer.dataDriftCustomIndexPatterns.docTitle', { + defaultMessage: 'Data Drift Custom Index Patterns', + }), + render: (props, deps) => , + breadcrumbs: [ + getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), + { + text: DATA_VISUALIZER_BREADCRUMB.text, + ...(navigateToPath + ? { + href: `${basePath}/app/ml${DATA_DRIFT_BREADCRUMB.href}`, + onClick: breadcrumbOnClickFactory(DATA_DRIFT_BREADCRUMB.href, navigateToPath), + } + : {}), + }, + { + text: i18n.translate('xpack.ml.trainedModelsBreadcrumbs.dataDriftLabel', { + defaultMessage: 'Data Drift', + }), + }, + ], + 'data-test-subj': 'mlPageDataDriftCustomIndexPatterns', +}); + +interface DataDriftPageProps extends PageProps { + mode: 'data_drift_index_select' | 'data_drift_custom'; +} +const PageWrapper: FC = ({ mode }) => { + const { context } = useRouteResolver('full', [], basicResolvers()); + + return ( + + + {mode === ML_PAGES.DATA_DRIFT_INDEX_SELECT ? ( + + ) : ( + + )} + + + ); +}; diff --git a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index.ts b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index.ts index 560a26007f2036..c469f6412d598b 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index.ts +++ b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index.ts @@ -6,5 +6,6 @@ */ export * from './datavisualizer'; +export * from './data_drift'; export * from './index_based'; export * from './file_based'; diff --git a/x-pack/plugins/ml/public/application/routing/routes/memory_usage.tsx b/x-pack/plugins/ml/public/application/routing/routes/memory_usage.tsx index dce72c080e94f9..c1a309736eecef 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/memory_usage.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/memory_usage.tsx @@ -36,16 +36,7 @@ export const nodesListRouteFactory = ( }); const PageWrapper: FC = () => { - const { context } = useRouteResolver( - 'full', - // only enabled in non-serverless mode - // if a serverless project ever contains all three features - // this check will have to be changed to an - // explicit isServerless check which will probably - // require a change in useRouteResolver - ['isADEnabled', 'isDFAEnabled', 'isNLPEnabled'], - basicResolvers() - ); + const { context } = useRouteResolver('full', [], basicResolvers()); return ( diff --git a/x-pack/plugins/ml/public/application/routing/routes/new_job/index_or_search.tsx b/x-pack/plugins/ml/public/application/routing/routes/new_job/index_or_search.tsx index cb12cd22ab6c20..24976cffc43d9c 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/new_job/index_or_search.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/new_job/index_or_search.tsx @@ -185,26 +185,6 @@ export const changePointDetectionIndexOrSearchRouteFactory = ( breadcrumbs: getChangePointDetectionBreadcrumbs(navigateToPath, basePath), }); -export const dataComparisonIndexOrSearchRouteFactory = ( - navigateToPath: NavigateToPath, - basePath: string -): MlRoute => ({ - id: 'data_view_data_comparison', - path: createPath(ML_PAGES.DATA_COMPARISON_INDEX_SELECT), - title: i18n.translate('xpack.ml.selectDataViewLabel', { - defaultMessage: 'Select Data View', - }), - render: (props, deps) => ( - - ), - breadcrumbs: getDataVisBreadcrumbs(navigateToPath, basePath), -}); - const PageWrapper: FC = ({ nextStepPath, mode }) => { const { services: { diff --git a/x-pack/plugins/ml/public/application/routing/routes/overview.tsx b/x-pack/plugins/ml/public/application/routing/routes/overview.tsx index 33346b0d0fe72a..77242b9155715e 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/overview.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/overview.tsx @@ -11,6 +11,7 @@ import React, { FC, Suspense } from 'react'; import { Redirect } from 'react-router-dom'; import { ML_PAGES } from '../../../locator'; import type { NavigateToPath } from '../../contexts/kibana'; +import { useEnabledFeatures } from '../../contexts/ml/serverless_context'; import { getMlNodeCount } from '../../ml_nodes_check'; import { loadMlServerInfo } from '../../services/ml_server_info'; import { getBreadcrumbWithUrlForApp } from '../breadcrumbs'; @@ -67,5 +68,13 @@ export const appRootRouteFactory = (navigateToPath: NavigateToPath, basePath: st }); const Page: FC = () => { + const { isADEnabled, isDFAEnabled, isNLPEnabled } = useEnabledFeatures(); + if (isADEnabled === false && isDFAEnabled === false && isNLPEnabled === true) { + // if only NLP is enabled, redirect to the trained models page. + // in the search serverless project, the overview page is blank, so we + // need to redirect to the trained models page instead + return ; + } + return ; }; diff --git a/x-pack/plugins/ml/public/application/services/ml_api_service/trained_models.ts b/x-pack/plugins/ml/public/application/services/ml_api_service/trained_models.ts index c10867af0011b6..e723da6c16d459 100644 --- a/x-pack/plugins/ml/public/application/services/ml_api_service/trained_models.ts +++ b/x-pack/plugins/ml/public/application/services/ml_api_service/trained_models.ts @@ -32,6 +32,7 @@ export interface InferenceQueryParams { tags?: string; // Custom kibana endpoint query params with_pipelines?: boolean; + with_indices?: boolean; include?: 'total_feature_importance' | 'feature_importance_baseline' | string; } diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.test.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.test.ts index 4e1771c25d0ef9..dd7408287cbf40 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.test.ts +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.test.ts @@ -27,7 +27,7 @@ describe('AnomalyChartsEmbeddableFactory', () => { const [coreStart, pluginsStart] = await getStartServices(); // act - const factory = new AnomalyChartsEmbeddableFactory(getStartServices, false); + const factory = new AnomalyChartsEmbeddableFactory(getStartServices); await factory.create({ jobIds: ['test-job'], diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.ts index a6056e84a87be5..e502d03bcd964d 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.ts +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.ts @@ -35,8 +35,7 @@ export class AnomalyChartsEmbeddableFactory ]; constructor( - private getStartServices: StartServicesAccessor, - private isServerless: boolean + private getStartServices: StartServicesAccessor ) {} public async isEditable() { @@ -62,7 +61,7 @@ export class AnomalyChartsEmbeddableFactory const { resolveEmbeddableAnomalyChartsUserInput } = await import( './anomaly_charts_setup_flyout' ); - return await resolveEmbeddableAnomalyChartsUserInput(coreStart, this.isServerless); + return await resolveEmbeddableAnomalyChartsUserInput(coreStart); } catch (e) { return Promise.reject(); } diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_setup_flyout.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_setup_flyout.tsx index 13849c8e6064c9..92aea068c5b156 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_setup_flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_setup_flyout.tsx @@ -19,7 +19,6 @@ import { mlApiServicesProvider } from '../../application/services/ml_api_service export async function resolveEmbeddableAnomalyChartsUserInput( coreStart: CoreStart, - isServerless: boolean, input?: AnomalyChartsEmbeddableInput ): Promise> { const { http, overlays, theme, i18n } = coreStart; @@ -28,7 +27,7 @@ export async function resolveEmbeddableAnomalyChartsUserInput( return new Promise(async (resolve, reject) => { try { - const { jobIds } = await resolveJobSelection(coreStart, isServerless, input?.jobIds); + const { jobIds } = await resolveJobSelection(coreStart, input?.jobIds); const title = input?.title ?? getDefaultExplorerChartsPanelTitle(jobIds); const { jobs } = await getJobs({ jobId: jobIds.join(',') }); const influencers = extractInfluencers(jobs); diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx index 2b75202095e3f2..cb759f6783b465 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.test.tsx @@ -27,7 +27,7 @@ describe('AnomalySwimlaneEmbeddableFactory', () => { const [coreStart, pluginsStart] = await getStartServices(); // act - const factory = new AnomalySwimlaneEmbeddableFactory(getStartServices, false); + const factory = new AnomalySwimlaneEmbeddableFactory(getStartServices); await factory.create({ jobIds: ['test-job'], diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts index 421d12193e56f2..3e7f958ea778e0 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts @@ -35,8 +35,7 @@ export class AnomalySwimlaneEmbeddableFactory ]; constructor( - private getStartServices: StartServicesAccessor, - private isServerless: boolean + private getStartServices: StartServicesAccessor ) {} public async isEditable() { @@ -60,7 +59,7 @@ export class AnomalySwimlaneEmbeddableFactory try { const { resolveAnomalySwimlaneUserInput } = await import('./anomaly_swimlane_setup_flyout'); - return await resolveAnomalySwimlaneUserInput(coreStart, this.isServerless); + return await resolveAnomalySwimlaneUserInput(coreStart); } catch (e) { return Promise.reject(); } diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx index 2c0e6c5e2d963e..dc2ca931cc805b 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx @@ -19,7 +19,6 @@ import { mlApiServicesProvider } from '../../application/services/ml_api_service export async function resolveAnomalySwimlaneUserInput( coreStart: CoreStart, - isServerless: boolean, input?: AnomalySwimlaneEmbeddableInput ): Promise> { const { http, overlays, theme, i18n } = coreStart; @@ -28,7 +27,7 @@ export async function resolveAnomalySwimlaneUserInput( return new Promise(async (resolve, reject) => { try { - const { jobIds } = await resolveJobSelection(coreStart, isServerless, input?.jobIds); + const { jobIds } = await resolveJobSelection(coreStart, input?.jobIds); const title = input?.title ?? getDefaultSwimlanePanelTitle(jobIds); const { jobs } = await getJobs({ jobId: jobIds.join(',') }); const influencers = extractInfluencers(jobs); diff --git a/x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx b/x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx index 3cd49afd8c3612..00c4a02d4e929a 100644 --- a/x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx +++ b/x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx @@ -26,7 +26,6 @@ import { JobSelectorFlyout } from './components/job_selector_flyout'; */ export async function resolveJobSelection( coreStart: CoreStart, - isServerless: boolean, selectedJobIds?: JobId[] ): Promise<{ jobIds: string[]; groups: Array<{ groupId: string; jobIds: string[] }> }> { const { @@ -70,9 +69,7 @@ export async function resolveJobSelection( const flyoutSession = coreStart.overlays.openFlyout( toMountPoint( - + { const { @@ -54,7 +53,7 @@ export function createFlyout( data, lens, dashboardService, - mlServices: getMlGlobalServices(http, isServerless), + mlServices: getMlGlobalServices(http), }} > { return createFlyout( LensLayerSelectionFlyout, @@ -30,7 +29,6 @@ export async function showLensVisToADJobFlyout( share, data, dashboardService, - isServerless, lens ); } diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx index da2d8bb2e0d4c1..5380513f1dc97e 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx @@ -19,16 +19,7 @@ export async function showMapVisToADJobFlyout( coreStart: CoreStart, share: SharePluginStart, data: DataPublicPluginStart, - dashboardService: DashboardStart, - isServerless: boolean + dashboardService: DashboardStart ): Promise { - return createFlyout( - GeoJobFlyout, - embeddable, - coreStart, - share, - data, - dashboardService, - isServerless - ); + return createFlyout(GeoJobFlyout, embeddable, coreStart, share, data, dashboardService); } diff --git a/x-pack/plugins/ml/public/locator/ml_locator.ts b/x-pack/plugins/ml/public/locator/ml_locator.ts index 6008741860d6d1..e397778315a6a0 100644 --- a/x-pack/plugins/ml/public/locator/ml_locator.ts +++ b/x-pack/plugins/ml/public/locator/ml_locator.ts @@ -77,8 +77,9 @@ export class MlLocatorDefinition implements LocatorDefinition { case ML_PAGES.MEMORY_USAGE: path = formatMemoryUsageUrl('', params.pageState); break; - case ML_PAGES.DATA_COMPARISON_INDEX_SELECT: - case ML_PAGES.DATA_COMPARISON: + case ML_PAGES.DATA_DRIFT_INDEX_SELECT: + case ML_PAGES.DATA_DRIFT_CUSTOM: + case ML_PAGES.DATA_DRIFT: case ML_PAGES.ANOMALY_DETECTION_CREATE_JOB: case ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_RECOGNIZER: case ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_ADVANCED: diff --git a/x-pack/plugins/ml/public/mocks.ts b/x-pack/plugins/ml/public/mocks.ts index 77cdefdb2f1c91..be18bfb1f49f1b 100644 --- a/x-pack/plugins/ml/public/mocks.ts +++ b/x-pack/plugins/ml/public/mocks.ts @@ -9,30 +9,33 @@ import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; import { type ElasticModels } from './application/services/elastic_models_service'; import type { MlPluginSetup, MlPluginStart } from './plugin'; +const createElasticModelsMock = (): jest.Mocked => { + return { + getELSER: jest.fn().mockResolvedValue({ + version: 2, + default: true, + config: { + input: { + field_names: ['text_field'], + }, + }, + description: 'Elastic Learned Sparse EncodeR v2 (Tech Preview)', + name: '.elser_model_2', + }), + } as unknown as jest.Mocked; +}; + const createSetupContract = (): jest.Mocked => { return { locator: sharePluginMock.createLocator(), + elasticModels: createElasticModelsMock(), }; }; const createStartContract = (): jest.Mocked => { return { locator: sharePluginMock.createLocator(), - elasticModels: { - getELSER: jest.fn(() => - Promise.resolve({ - version: 2, - default: true, - config: { - input: { - field_names: ['text_field'], - }, - }, - description: 'Elastic Learned Sparse EncodeR v2 (Tech Preview)', - name: '.elser_model_2', - }) - ), - } as unknown as jest.Mocked, + elasticModels: createElasticModelsMock(), }; }; diff --git a/x-pack/plugins/ml/public/plugin.ts b/x-pack/plugins/ml/public/plugin.ts index 4eae00a53d401d..fcd1948e575812 100644 --- a/x-pack/plugins/ml/public/plugin.ts +++ b/x-pack/plugins/ml/public/plugin.ts @@ -18,7 +18,7 @@ import { take } from 'rxjs/operators'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { ManagementSetup } from '@kbn/management-plugin/public'; -import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; +import type { LocatorPublic, SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { HomePublicPluginSetup } from '@kbn/home-plugin/public'; import type { EmbeddableSetup, EmbeddableStart } from '@kbn/embeddable-plugin/public'; @@ -48,19 +48,29 @@ import type { ChartsPluginStart } from '@kbn/charts-plugin/public'; import type { CasesUiSetup, CasesUiStart } from '@kbn/cases-plugin/public'; import type { SavedSearchPublicPluginStart } from '@kbn/saved-search-plugin/public'; import type { PresentationUtilPluginStart } from '@kbn/presentation-util-plugin/public'; +import type { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; import { getMlSharedServices, MlSharedServices, } from './application/services/get_shared_ml_services'; import { registerManagementSection } from './application/management'; -import { MlLocatorDefinition, type MlLocator } from './locator'; +import { MlLocatorDefinition, MlLocatorParams, type MlLocator } from './locator'; import { setDependencyCache } from './application/util/dependency_cache'; import { registerHomeFeature } from './register_home_feature'; import { isFullLicense, isMlEnabled } from '../common/license'; -import { ML_APP_ROUTE, PLUGIN_ICON_SOLUTION, PLUGIN_ID } from '../common/constants/app'; +import { + initEnabledFeatures, + type MlFeatures, + ML_APP_ROUTE, + PLUGIN_ICON_SOLUTION, + PLUGIN_ID, + type ConfigSchema, +} from '../common/constants/app'; import type { MlCapabilities } from './shared'; +import { ElasticModels } from './application/services/elastic_models_service'; export interface MlStartDependencies { + dataViewEditor: DataViewEditorStart; data: DataPublicPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; licensing: LicensingPluginStart; @@ -111,12 +121,21 @@ export class MlPlugin implements Plugin { private sharedMlServices: MlSharedServices | undefined; private isServerless: boolean = false; + private enabledFeatures: MlFeatures = { + ad: true, + dfa: true, + nlp: true, + }; - constructor(private initializerContext: PluginInitializerContext) { + constructor(private initializerContext: PluginInitializerContext) { this.isServerless = initializerContext.env.packageInfo.buildFlavor === 'serverless'; + initEnabledFeatures(this.enabledFeatures, initializerContext.config.get()); } - setup(core: MlCoreSetup, pluginsSetup: MlSetupDependencies) { + setup( + core: MlCoreSetup, + pluginsSetup: MlSetupDependencies + ): { locator?: LocatorPublic; elasticModels?: ElasticModels } { this.sharedMlServices = getMlSharedServices(core.http); core.application.register({ @@ -137,6 +156,7 @@ export class MlPlugin implements Plugin { { charts: pluginsStart.charts, data: pluginsStart.data, + dataViewEditor: pluginsStart.dataViewEditor, unifiedSearch: pluginsStart.unifiedSearch, dashboard: pluginsStart.dashboard, share: pluginsStart.share, @@ -161,7 +181,8 @@ export class MlPlugin implements Plugin { presentationUtil: pluginsStart.presentationUtil, }, params, - this.isServerless + this.isServerless, + this.enabledFeatures ); }, }); @@ -177,7 +198,8 @@ export class MlPlugin implements Plugin { { usageCollection: pluginsSetup.usageCollection, }, - this.isServerless + this.isServerless, + this.enabledFeatures ).enable(); } @@ -205,13 +227,13 @@ export class MlPlugin implements Plugin { registerMapExtension, registerCasesAttachments, } = await import('./register_helper'); - registerSearchLinks(this.appUpdater$, fullLicense, mlCapabilities, this.isServerless); + registerSearchLinks(this.appUpdater$, fullLicense, mlCapabilities, !this.isServerless); if (fullLicense) { - registerMlUiActions(pluginsSetup.uiActions, core, this.isServerless); + registerMlUiActions(pluginsSetup.uiActions, core); - if (mlCapabilities.isADEnabled) { - registerEmbeddables(pluginsSetup.embeddable, core, this.isServerless); + if (this.enabledFeatures.ad) { + registerEmbeddables(pluginsSetup.embeddable, core); if (pluginsSetup.cases) { registerCasesAttachments(pluginsSetup.cases, coreStart, pluginStart); @@ -244,10 +266,14 @@ export class MlPlugin implements Plugin { return { locator: this.locator, + elasticModels: this.sharedMlServices.elasticModels, }; } - start(core: CoreStart, deps: MlStartDependencies) { + start( + core: CoreStart, + deps: MlStartDependencies + ): { locator?: LocatorPublic; elasticModels?: ElasticModels } { setDependencyCache({ docLinks: core.docLinks!, basePath: core.http.basePath, diff --git a/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts b/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts index 6b7f10103b440b..7e0a4dd593c64b 100644 --- a/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts +++ b/x-pack/plugins/ml/public/register_helper/register_search_links/register_search_links.ts @@ -16,7 +16,7 @@ export function registerSearchLinks( appUpdater: BehaviorSubject, isFullLicense: boolean, mlCapabilities: MlCapabilities, - isServerless: boolean + showMLNavMenu: boolean ) { appUpdater.next(() => ({ keywords: [ @@ -24,6 +24,6 @@ export function registerSearchLinks( defaultMessage: 'ML', }), ], - deepLinks: getDeepLinks(isFullLicense, mlCapabilities, isServerless), + deepLinks: getDeepLinks(isFullLicense, mlCapabilities, showMLNavMenu), })); } diff --git a/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts b/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts index f9bdd2b50e4a4f..ca48b8a2a4075d 100644 --- a/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts +++ b/x-pack/plugins/ml/public/register_helper/register_search_links/search_deep_links.ts @@ -15,13 +15,13 @@ import type { MlCapabilities } from '../../shared'; function createDeepLinks( mlCapabilities: MlCapabilities, isFullLicense: boolean, - isServerless: boolean + showMLNavMenu: boolean ) { function getNavStatus( visible: boolean, showInServerless: boolean = true ): AppNavLinkStatus | undefined { - if (isServerless) { + if (showMLNavMenu === false) { // in serverless the status needs to be "visible" rather than "default" // for the links to appear in the nav menu. return showInServerless && visible ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden; @@ -145,7 +145,7 @@ function createDeepLinks( defaultMessage: 'Memory Usage', }), path: `/${ML_PAGES.MEMORY_USAGE}`, - navLinkStatus: getNavStatus(isFullLicense, false), + navLinkStatus: getNavStatus(isFullLicense, true), }; }, @@ -265,11 +265,11 @@ function createDeepLinks( getDataComparisonDeepLink: (): AppDeepLink => { return { - id: 'dataComparison', - title: i18n.translate('xpack.ml.deepLink.dataComparison', { - defaultMessage: 'Data Comparison', + id: 'dataDrift', + title: i18n.translate('xpack.ml.deepLink.dataDrift', { + defaultMessage: 'Data Drift', }), - path: `/${ML_PAGES.DATA_COMPARISON_INDEX_SELECT}`, + path: `/${ML_PAGES.DATA_DRIFT_INDEX_SELECT}`, navLinkStatus: getNavStatus(true), }; }, @@ -279,8 +279,8 @@ function createDeepLinks( export function getDeepLinks( isFullLicense: boolean, mlCapabilities: MlCapabilities, - isServerless: boolean + showMLNavMenu: boolean ) { - const links = createDeepLinks(mlCapabilities, isFullLicense, isServerless); + const links = createDeepLinks(mlCapabilities, isFullLicense, showMLNavMenu); return Object.values(links).map((link) => link()); } diff --git a/x-pack/plugins/ml/public/ui_actions/edit_anomaly_charts_panel_action.tsx b/x-pack/plugins/ml/public/ui_actions/edit_anomaly_charts_panel_action.tsx index e4f765f87c598e..d79c8979585543 100644 --- a/x-pack/plugins/ml/public/ui_actions/edit_anomaly_charts_panel_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/edit_anomaly_charts_panel_action.tsx @@ -17,8 +17,7 @@ import { export const EDIT_ANOMALY_CHARTS_PANEL_ACTION = 'editAnomalyChartsPanelAction'; export function createEditAnomalyChartsPanelAction( - getStartServices: MlCoreSetup['getStartServices'], - isServerless: boolean + getStartServices: MlCoreSetup['getStartServices'] ): UiActionsActionDefinition { return { id: 'edit-anomaly-charts', @@ -44,7 +43,6 @@ export function createEditAnomalyChartsPanelAction( const result = await resolveEmbeddableAnomalyChartsUserInput( coreStart, - isServerless, embeddable.getInput() ); embeddable.updateInput(result); diff --git a/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx b/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx index 50708620235983..4352dc2df89bf7 100644 --- a/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx @@ -14,8 +14,7 @@ import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, EditSwimlanePanelContext } from '../e export const EDIT_SWIMLANE_PANEL_ACTION = 'editSwimlanePanelAction'; export function createEditSwimlanePanelAction( - getStartServices: MlCoreSetup['getStartServices'], - isServerless: boolean + getStartServices: MlCoreSetup['getStartServices'] ): UiActionsActionDefinition { return { id: 'edit-anomaly-swimlane', @@ -39,11 +38,7 @@ export function createEditSwimlanePanelAction( '../embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout' ); - const result = await resolveAnomalySwimlaneUserInput( - coreStart, - isServerless, - embeddable.getInput() - ); + const result = await resolveAnomalySwimlaneUserInput(coreStart, embeddable.getInput()); embeddable.updateInput(result); } catch (e) { return Promise.reject(); diff --git a/x-pack/plugins/ml/public/ui_actions/index.ts b/x-pack/plugins/ml/public/ui_actions/index.ts index f08f5bcd886bc9..4067547e089563 100644 --- a/x-pack/plugins/ml/public/ui_actions/index.ts +++ b/x-pack/plugins/ml/public/ui_actions/index.ts @@ -34,24 +34,17 @@ export { SWIM_LANE_SELECTION_TRIGGER }; */ export function registerMlUiActions( uiActions: UiActionsSetup, - core: CoreSetup, - isServerless: boolean + core: CoreSetup ) { // Initialize actions - const editSwimlanePanelAction = createEditSwimlanePanelAction( - core.getStartServices, - isServerless - ); + const editSwimlanePanelAction = createEditSwimlanePanelAction(core.getStartServices); const openInExplorerAction = createOpenInExplorerAction(core.getStartServices); const applyInfluencerFiltersAction = createApplyInfluencerFiltersAction(core.getStartServices); const applyEntityFieldFilterAction = createApplyEntityFieldFiltersAction(core.getStartServices); const applyTimeRangeSelectionAction = createApplyTimeRangeSelectionAction(core.getStartServices); const clearSelectionAction = createClearSelectionAction(core.getStartServices); - const editExplorerPanelAction = createEditAnomalyChartsPanelAction( - core.getStartServices, - isServerless - ); - const visToAdJobAction = createVisToADJobAction(core.getStartServices, isServerless); + const editExplorerPanelAction = createEditAnomalyChartsPanelAction(core.getStartServices); + const visToAdJobAction = createVisToADJobAction(core.getStartServices); // Register actions uiActions.registerAction(editSwimlanePanelAction); diff --git a/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx b/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx index 3e06b6175d61e1..fb0aa38e44d90a 100644 --- a/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx @@ -15,8 +15,7 @@ import { isLensEmbeddable, isMapEmbeddable } from '../application/jobs/new_job/j export const CREATE_LENS_VIS_TO_ML_AD_JOB_ACTION = 'createMLADJobAction'; export function createVisToADJobAction( - getStartServices: MlCoreSetup['getStartServices'], - isServerless: boolean + getStartServices: MlCoreSetup['getStartServices'] ): UiActionsActionDefinition<{ embeddable: Embeddable | MapEmbeddable }> { return { id: 'create-ml-ad-job-action', @@ -40,26 +39,11 @@ export function createVisToADJobAction( if (lens === undefined) { return; } - await showLensVisToADJobFlyout( - embeddable, - coreStart, - share, - data, - lens, - dashboard, - isServerless - ); + await showLensVisToADJobFlyout(embeddable, coreStart, share, data, lens, dashboard); } else if (isMapEmbeddable(embeddable)) { const [{ showMapVisToADJobFlyout }, [coreStart, { share, data, dashboard }]] = await Promise.all([import('../embeddables/job_creation/map'), getStartServices()]); - await showMapVisToADJobFlyout( - embeddable, - coreStart, - share, - data, - dashboard, - isServerless - ); + await showMapVisToADJobFlyout(embeddable, coreStart, share, data, dashboard); } } catch (e) { return Promise.reject(); diff --git a/x-pack/plugins/ml/server/config_schema.ts b/x-pack/plugins/ml/server/config_schema.ts index 16db0505cc4e07..cc00b6a836d54a 100644 --- a/x-pack/plugins/ml/server/config_schema.ts +++ b/x-pack/plugins/ml/server/config_schema.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { schema, type TypeOf } from '@kbn/config-schema'; +import { schema } from '@kbn/config-schema'; const enabledSchema = schema.maybe( schema.object({ @@ -17,5 +17,3 @@ export const configSchema = schema.object({ dfa: enabledSchema, nlp: enabledSchema, }); - -export type ConfigSchema = TypeOf; diff --git a/x-pack/plugins/ml/server/index.ts b/x-pack/plugins/ml/server/index.ts index 53c5b81ec95919..232df4ae7f1dfc 100644 --- a/x-pack/plugins/ml/server/index.ts +++ b/x-pack/plugins/ml/server/index.ts @@ -6,6 +6,8 @@ */ import type { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/server'; +import { type ConfigSchema } from '../common/constants/app'; +import { configSchema } from './config_schema'; import { MlServerPlugin } from './plugin'; export type { MlPluginSetup, MlPluginStart } from './plugin'; export type { @@ -26,10 +28,14 @@ export { InsufficientMLCapabilities, MLPrivilegesUninitialized, } from './shared'; -import { configSchema, type ConfigSchema } from './config_schema'; export const config: PluginConfigDescriptor = { schema: configSchema, + exposeToBrowser: { + ad: true, + dfa: true, + nlp: true, + }, }; export const plugin = (ctx: PluginInitializerContext) => new MlServerPlugin(ctx); diff --git a/x-pack/plugins/ml/server/lib/alerts/register_ml_alerts.ts b/x-pack/plugins/ml/server/lib/alerts/register_ml_alerts.ts index 582676b61928b6..d6f0260778ea28 100644 --- a/x-pack/plugins/ml/server/lib/alerts/register_ml_alerts.ts +++ b/x-pack/plugins/ml/server/lib/alerts/register_ml_alerts.ts @@ -7,11 +7,11 @@ import type { Logger } from '@kbn/core/server'; import type { AlertingPlugin } from '@kbn/alerting-plugin/server'; +import type { MlFeatures } from '../../../common/constants/app'; import { registerAnomalyDetectionAlertType } from './register_anomaly_detection_alert_type'; import type { SharedServices } from '../../shared_services'; import { registerJobsMonitoringRuleType } from './register_jobs_monitoring_rule_type'; import type { MlServicesProviders } from '../../shared_services/shared_services'; -import type { MlFeatures } from '../../types'; export interface RegisterAlertParams { alerting: AlertingPlugin['setup']; diff --git a/x-pack/plugins/ml/server/lib/capabilities/capabilities_switcher.ts b/x-pack/plugins/ml/server/lib/capabilities/capabilities_switcher.ts index dadb15b8a46b8a..ba08ab5066701b 100644 --- a/x-pack/plugins/ml/server/lib/capabilities/capabilities_switcher.ts +++ b/x-pack/plugins/ml/server/lib/capabilities/capabilities_switcher.ts @@ -9,13 +9,13 @@ import { cloneDeep } from 'lodash'; import { firstValueFrom, Observable } from 'rxjs'; import type { CapabilitiesSwitcher, CoreSetup, Logger } from '@kbn/core/server'; import type { ILicense } from '@kbn/licensing-plugin/common/types'; +import type { MlFeatures } from '../../../common/constants/app'; import { isFullLicense, isMinimumLicense, isMlEnabled } from '../../../common/license'; import { type MlCapabilities, basicLicenseMlCapabilities, featureCapabilities, } from '../../../common/types/capabilities'; -import type { MlFeatures } from '../../types'; export const setupCapabilitiesSwitcher = ( coreSetup: CoreSetup, diff --git a/x-pack/plugins/ml/server/lib/register_cases.ts b/x-pack/plugins/ml/server/lib/register_cases.ts index a9644638e11dc7..b8a226afd9bc86 100644 --- a/x-pack/plugins/ml/server/lib/register_cases.ts +++ b/x-pack/plugins/ml/server/lib/register_cases.ts @@ -6,11 +6,11 @@ */ import type { CasesSetup } from '@kbn/cases-plugin/server'; +import type { MlFeatures } from '../../common/constants/app'; import { CASE_ATTACHMENT_TYPE_ID_ANOMALY_EXPLORER_CHARTS, CASE_ATTACHMENT_TYPE_ID_ANOMALY_SWIMLANE, } from '../../common/constants/cases'; -import type { MlFeatures } from '../types'; export function registerCasesPersistableState(cases: CasesSetup, enabledFeatures: MlFeatures) { if (enabledFeatures.ad === true) { diff --git a/x-pack/plugins/ml/server/lib/register_sample_data_set_links.ts b/x-pack/plugins/ml/server/lib/register_sample_data_set_links.ts index b4aa199a55a0a9..8f79966ac64db2 100644 --- a/x-pack/plugins/ml/server/lib/register_sample_data_set_links.ts +++ b/x-pack/plugins/ml/server/lib/register_sample_data_set_links.ts @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import type { HomeServerPluginSetup } from '@kbn/home-plugin/server'; -import type { MlFeatures } from '../types'; +import type { MlFeatures } from '../../common/constants/app'; export function registerSampleDataSetLinks( home: HomeServerPluginSetup, diff --git a/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts b/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts index 4f1796782a6ae7..27e0bd893a53d9 100644 --- a/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts +++ b/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts @@ -18,9 +18,9 @@ import { type AnalyticsMapNodeElement, type MapElements, } from '@kbn/ml-data-frame-analytics-utils'; -import type { TransformGetTransformTransformSummary } from '@elastic/elasticsearch/lib/api/types'; -import { flatten } from 'lodash'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import type { MlFeatures } from '../../../common/constants/app'; +import type { ModelService } from '../model_management/models_provider'; import { modelsProvider } from '../model_management'; import { type ExtendAnalyticsMapArgs, @@ -37,19 +37,20 @@ import { isTransformLinkReturnType, } from './types'; import type { MlClient } from '../../lib/ml_client'; -import type { MlFeatures } from '../../types'; import { DEFAULT_TRAINED_MODELS_PAGE_SIZE } from '../../routes/trained_models'; export class AnalyticsManager { private _trainedModels: estypes.MlTrainedModelConfig[] = []; private _jobs: estypes.MlDataframeAnalyticsSummary[] = []; - private _transforms?: TransformGetTransformTransformSummary[]; + private _modelsProvider: ModelService; constructor( private readonly _mlClient: MlClient, private readonly _client: IScopedClusterClient, private readonly _enabledFeatures: MlFeatures - ) {} + ) { + this._modelsProvider = modelsProvider(this._client); + } private async initData() { const [models, jobs] = await Promise.all([ @@ -64,30 +65,6 @@ export class AnalyticsManager { this._jobs = jobs.data_frame_analytics; } - private async initTransformData() { - if (!this._transforms) { - try { - const body = await this._client.asCurrentUser.transform.getTransform({ - size: 1000, - }); - this._transforms = body.transforms; - return body.transforms; - } catch (e) { - if (e.meta?.statusCode !== 403) { - // eslint-disable-next-line no-console - console.error(e); - } - } - } - } - - private getNodeId( - elementOriginalId: string, - nodeType: typeof JOB_MAP_NODE_TYPES[keyof typeof JOB_MAP_NODE_TYPES] - ): string { - return `${elementOriginalId}-${nodeType}`; - } - private isDuplicateElement(analyticsId: string, elements: MapElements[]): boolean { let isDuplicate = false; elements.forEach((elem) => { @@ -608,8 +585,12 @@ export class AnalyticsManager { } if (modelId && model) { - // First, find information about the trained model - result.elements.push({ + const pipelinesAndIndicesResults = + await this._modelsProvider.getModelsPipelinesAndIndicesMap(modelId, { + withIndices: true, + }); + // Adding information about the trained model + pipelinesAndIndicesResults.elements.push({ data: { id: modelNodeId, label: modelId, @@ -617,182 +598,9 @@ export class AnalyticsManager { isRoot: true, }, }); - result.details[modelNodeId] = model; - - let pipelinesResponse; - let indicesSettings; - try { - // Then, find the pipelines that have the trained model set as index.default_pipelines - pipelinesResponse = await modelsProvider(this._client).getModelsPipelines([modelId]); - } catch (e) { - // Possible that the user doesn't have permissions to view ingest pipelines - // If so, gracefully exit - if (e.meta?.statusCode !== 403) { - // eslint-disable-next-line no-console - console.error(e); - } - - return result; - } - - const pipelines = pipelinesResponse?.get(modelId); - - if (pipelines) { - const pipelineIds = new Set(Object.keys(pipelines)); - for (const pipelineId of pipelineIds) { - const pipelineNodeId = `${pipelineId}-${JOB_MAP_NODE_TYPES.INGEST_PIPELINE}`; - result.details[pipelineNodeId] = pipelines[pipelineId]; + pipelinesAndIndicesResults.details[modelNodeId] = model; - result.elements.push({ - data: { - id: pipelineNodeId, - label: pipelineId, - type: JOB_MAP_NODE_TYPES.INGEST_PIPELINE, - }, - }); - - result.elements.push({ - data: { - id: `${modelNodeId}~${pipelineNodeId}`, - source: modelNodeId, - target: pipelineNodeId, - }, - }); - } - const pipelineIdsToDestinationIndices: Record = {}; - - let indicesPermissions; - try { - indicesSettings = await this._client.asInternalUser.indices.getSettings(); - const hasPrivilegesResponse = await this._client.asCurrentUser.security.hasPrivileges({ - index: [ - { - names: Object.keys(indicesSettings), - privileges: ['read'], - }, - ], - }); - indicesPermissions = hasPrivilegesResponse.index; - } catch (e) { - // Possible that the user doesn't have permissions to view - // If so, gracefully exit - if (e.meta?.statusCode !== 403) { - // eslint-disable-next-line no-console - console.error(e); - } - return result; - } - - for (const [indexName, { settings }] of Object.entries(indicesSettings)) { - if ( - settings?.index?.default_pipeline && - pipelineIds.has(settings.index.default_pipeline) && - indicesPermissions[indexName]?.read === true - ) { - if (Array.isArray(pipelineIdsToDestinationIndices[settings.index.default_pipeline])) { - pipelineIdsToDestinationIndices[settings.index.default_pipeline].push(indexName); - } else { - pipelineIdsToDestinationIndices[settings.index.default_pipeline] = [indexName]; - } - } - } - - for (const [pipelineId, indexIds] of Object.entries(pipelineIdsToDestinationIndices)) { - const pipelineNodeId = this.getNodeId(pipelineId, JOB_MAP_NODE_TYPES.INGEST_PIPELINE); - - for (const destinationIndexId of indexIds) { - const destinationIndexNodeId = this.getNodeId( - destinationIndexId, - JOB_MAP_NODE_TYPES.INDEX - ); - - const destinationIndexDetails = await this.getIndexData(destinationIndexId); - result.details[destinationIndexNodeId] = { - ...destinationIndexDetails, - ml_inference_models: [modelId], - }; - - result.elements.push({ - data: { - id: destinationIndexNodeId, - label: destinationIndexId, - type: JOB_MAP_NODE_TYPES.INDEX, - }, - }); - - result.elements.push({ - data: { - id: `${pipelineNodeId}~${destinationIndexNodeId}`, - source: pipelineNodeId, - target: destinationIndexNodeId, - }, - }); - } - } - - const destinationIndices = flatten(Object.values(pipelineIdsToDestinationIndices)); - - // From these destination indices, see if there's any transforms that have the indexId as the source destination index - if (destinationIndices.length > 0) { - const transforms = await this.initTransformData(); - - if (!transforms) return result; - - for (const destinationIndex of destinationIndices) { - const destinationIndexNodeId = `${destinationIndex}-${JOB_MAP_NODE_TYPES.INDEX}`; - - const foundTransform = transforms?.find((t) => { - const transformSourceIndex = Array.isArray(t.source.index) - ? t.source.index[0] - : t.source.index; - return transformSourceIndex === destinationIndex; - }); - if (foundTransform) { - const transformDestIndex = foundTransform.dest.index; - const transformNodeId = `${foundTransform.id}-${JOB_MAP_NODE_TYPES.TRANSFORM}`; - const transformDestIndexNodeId = `${transformDestIndex}-${JOB_MAP_NODE_TYPES.INDEX}`; - - const destIndex = await this.getIndexData(transformDestIndex); - result.details[transformNodeId] = foundTransform; - result.details[transformDestIndexNodeId] = destIndex; - - result.elements.push( - { - data: { - id: transformNodeId, - label: foundTransform.id, - type: JOB_MAP_NODE_TYPES.TRANSFORM, - }, - }, - { - data: { - id: transformDestIndexNodeId, - label: transformDestIndex, - type: JOB_MAP_NODE_TYPES.INDEX, - }, - } - ); - - result.elements.push( - { - data: { - id: `${destinationIndexNodeId}~${transformNodeId}`, - source: destinationIndexNodeId, - target: transformNodeId, - }, - }, - { - data: { - id: `${transformNodeId}~${transformDestIndexNodeId}`, - source: transformNodeId, - target: transformDestIndexNodeId, - }, - } - ); - } - } - } - } + return pipelinesAndIndicesResults; } } catch (error) { result.error = error.message || 'An error occurred fetching map'; diff --git a/x-pack/plugins/ml/server/models/model_management/memory_usage.ts b/x-pack/plugins/ml/server/models/model_management/memory_usage.ts index cd665c387302f3..6d81062dfd84d3 100644 --- a/x-pack/plugins/ml/server/models/model_management/memory_usage.ts +++ b/x-pack/plugins/ml/server/models/model_management/memory_usage.ts @@ -9,6 +9,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import numeral from '@elastic/numeral'; import { pick } from 'lodash'; import { isDefined } from '@kbn/ml-is-defined'; +import type { MlFeatures } from '../../../common/constants/app'; import type { MemoryUsageInfo, TrainedModelStatsResponse, @@ -22,7 +23,6 @@ import type { NodeDeploymentStatsResponse, NodesOverviewResponse, } from '../../../common/types/trained_models'; -import type { MlFeatures } from '../../types'; // @ts-expect-error numeral missing value const AD_EXTRA_MEMORY = numeral('10MB').value(); diff --git a/x-pack/plugins/ml/server/models/model_management/models_provider.ts b/x-pack/plugins/ml/server/models/model_management/models_provider.ts index f6164ad6e65caf..d05096bef81893 100644 --- a/x-pack/plugins/ml/server/models/model_management/models_provider.ts +++ b/x-pack/plugins/ml/server/models/model_management/models_provider.ts @@ -6,6 +6,10 @@ */ import type { IScopedClusterClient } from '@kbn/core/server'; +import { JOB_MAP_NODE_TYPES, type MapElements } from '@kbn/ml-data-frame-analytics-utils'; +import { flatten } from 'lodash'; +import type { TransformGetTransformTransformSummary } from '@elastic/elasticsearch/lib/api/types'; +import type { IndexName, IndicesIndexState } from '@elastic/elasticsearch/lib/api/types'; import type { IngestPipeline, IngestSimulateDocument, @@ -21,197 +25,472 @@ import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { PipelineDefinition } from '../../../common/types/trained_models'; export type ModelService = ReturnType; +export const modelsProvider = (client: IScopedClusterClient, cloud?: CloudSetup) => + new ModelsProvider(client, cloud); -export function modelsProvider(client: IScopedClusterClient, cloud?: CloudSetup) { - return { - /** - * Retrieves the map of model ids and aliases with associated pipelines. - * @param modelIds - Array of models ids and model aliases. - */ - async getModelsPipelines(modelIds: string[]) { - const modelIdsMap = new Map | null>( - modelIds.map((id: string) => [id, null]) - ); - - try { - const body = await client.asCurrentUser.ingest.getPipeline(); +interface ModelMapResult { + ingestPipelines: Map | null>; + indices: Array>; + /** + * Map elements + */ + elements: MapElements[]; + /** + * Transform, job or index details + */ + details: Record; + /** + * Error + */ + error: null | any; +} - for (const [pipelineName, pipelineDefinition] of Object.entries(body)) { - const { processors } = pipelineDefinition as { processors: Array> }; +export class ModelsProvider { + private _transforms?: TransformGetTransformTransformSummary[]; - for (const processor of processors) { - const id = processor.inference?.model_id; - if (modelIdsMap.has(id)) { - const obj = modelIdsMap.get(id); - if (obj === null) { - modelIdsMap.set(id, { [pipelineName]: pipelineDefinition }); - } else { - obj![pipelineName] = pipelineDefinition; - } - } - } - } - } catch (error) { - if (error.statusCode === 404) { - // ES returns 404 when there are no pipelines - // Instead, we should return the modelIdsMap and a 200 - return modelIdsMap; - } - throw error; - } + constructor(private _client: IScopedClusterClient, private _cloud?: CloudSetup) {} - return modelIdsMap; - }, - - /** - * Deletes associated pipelines of the requested model - * @param modelIds - */ - async deleteModelPipelines(modelIds: string[]) { - const pipelines = await this.getModelsPipelines(modelIds); - const pipelinesIds: string[] = [ - ...new Set([...pipelines.values()].flatMap((v) => Object.keys(v!))), - ]; - await Promise.all( - pipelinesIds.map((id) => client.asCurrentUser.ingest.deletePipeline({ id })) - ); - }, - - /** - * Simulates the effect of the pipeline on given document. - * - */ - async simulatePipeline(docs: IngestSimulateDocument[], pipelineConfig: IngestPipeline) { - const simulateRequest: IngestSimulateRequest = { - docs, - pipeline: pipelineConfig, - }; - let result = {}; + private async initTransformData() { + if (!this._transforms) { try { - result = await client.asCurrentUser.ingest.simulate(simulateRequest); - } catch (error) { - if (error.statusCode === 404) { - // ES returns 404 when there are no pipelines - // Instead, we should return an empty response and a 200 - return result; + const body = await this._client.asCurrentUser.transform.getTransform({ + size: 1000, + }); + this._transforms = body.transforms; + return body.transforms; + } catch (e) { + if (e.meta?.statusCode !== 403) { + // eslint-disable-next-line no-console + console.error(e); } - throw error; } + } + } - return result; - }, - - /** - * Creates the pipeline - * - */ - async createInferencePipeline(pipelineConfig: IngestPipeline, pipelineName: string) { - let result = {}; - - result = await client.asCurrentUser.ingest.putPipeline({ - id: pipelineName, - ...pipelineConfig, + private async getIndexData(index: string): Promise> { + try { + const indexData = await this._client.asInternalUser.indices.get({ + index, }); + return indexData; + } catch (e) { + // Possible that the user doesn't have permissions to view + // If so, gracefully exit + if (e.meta?.statusCode !== 403) { + // eslint-disable-next-line no-console + console.error(e); + } + return { [index]: null }; + } + } + private getNodeId( + elementOriginalId: string, + nodeType: typeof JOB_MAP_NODE_TYPES[keyof typeof JOB_MAP_NODE_TYPES] + ): string { + return `${elementOriginalId}-${nodeType}`; + } - return result; - }, - - /** - * Retrieves existing pipelines. - * - */ - async getPipelines() { - let result = {}; - try { - result = await client.asCurrentUser.ingest.getPipeline(); - } catch (error) { - if (error.statusCode === 404) { - // ES returns 404 when there are no pipelines - // Instead, we should return an empty response and a 200 - return result; - } - throw error; + /** + * Simulates the effect of the pipeline on given document. + * + */ + async simulatePipeline(docs: IngestSimulateDocument[], pipelineConfig: IngestPipeline) { + const simulateRequest: IngestSimulateRequest = { + docs, + pipeline: pipelineConfig, + }; + let result = {}; + try { + result = await this._client.asCurrentUser.ingest.simulate(simulateRequest); + } catch (error) { + if (error.statusCode === 404) { + // ES returns 404 when there are no pipelines + // Instead, we should return an empty response and a 200 + return result; } + throw error; + } - return result; - }, - - /** - * Returns a list of elastic curated models available for download. - */ - async getModelDownloads(): Promise { - // We assume that ML nodes in Cloud are always on linux-x86_64, even if other node types aren't. - const isCloud = !!cloud?.cloudId; - - const nodesInfoResponse = - await client.asInternalUser.transport.request({ - method: 'GET', - path: `/_nodes/ml:true/os`, - }); + return result; + } + + /** + * Creates the pipeline + * + */ + async createInferencePipeline(pipelineConfig: IngestPipeline, pipelineName: string) { + let result = {}; + + result = await this._client.asCurrentUser.ingest.putPipeline({ + id: pipelineName, + ...pipelineConfig, + }); + + return result; + } + + /** + * Retrieves existing pipelines. + * + */ + async getPipelines() { + let result = {}; + try { + result = await this._client.asCurrentUser.ingest.getPipeline(); + } catch (error) { + if (error.statusCode === 404) { + // ES returns 404 when there are no pipelines + // Instead, we should return an empty response and a 200 + return result; + } + throw error; + } + + return result; + } + + /** + * Retrieves the map of model ids and aliases with associated pipelines. + * @param modelIds - Array of models ids and model aliases. + */ + async getModelsPipelines(modelIds: string[]) { + const modelIdsMap = new Map | null>( + modelIds.map((id: string) => [id, null]) + ); - let osName: string | undefined; - let arch: string | undefined; - // Indicates that all ML nodes have the same architecture - let sameArch = true; - for (const node of Object.values(nodesInfoResponse.nodes)) { - if (!osName) { - osName = node.os?.name; + try { + const body = await this._client.asCurrentUser.ingest.getPipeline(); + + for (const [pipelineName, pipelineDefinition] of Object.entries(body)) { + const { processors } = pipelineDefinition as { processors: Array> }; + + for (const processor of processors) { + const id = processor.inference?.model_id; + if (modelIdsMap.has(id)) { + const obj = modelIdsMap.get(id); + if (obj === null) { + modelIdsMap.set(id, { [pipelineName]: pipelineDefinition }); + } else { + obj![pipelineName] = pipelineDefinition; + } + } } - if (!arch) { - arch = node.os?.arch; + } + } catch (error) { + if (error.statusCode === 404) { + // ES returns 404 when there are no pipelines + // Instead, we should return the modelIdsMap and a 200 + return modelIdsMap; + } + throw error; + } + + return modelIdsMap; + } + + /** + * Retrieves the network map and metadata of model ids, pipelines, and indices that are tied to the model ids. + * @param modelIds - Array of models ids and model aliases. + */ + async getModelsPipelinesAndIndicesMap( + modelId: string, + { + withIndices, + }: { + withIndices: boolean; + } + ): Promise { + const result: ModelMapResult = { + ingestPipelines: new Map(), + indices: [], + elements: [], + details: {}, + error: null, + }; + + let pipelinesResponse; + let indicesSettings; + + try { + pipelinesResponse = await this.getModelsPipelines([modelId]); + + // 1. Get list of pipelines that are related to the model + const pipelines = pipelinesResponse?.get(modelId); + const modelNodeId = this.getNodeId(modelId, JOB_MAP_NODE_TYPES.TRAINED_MODEL); + + if (pipelines) { + const pipelineIds = new Set(Object.keys(pipelines)); + result.ingestPipelines = pipelinesResponse; + + for (const pipelineId of pipelineIds) { + const pipelineNodeId = this.getNodeId(pipelineId, JOB_MAP_NODE_TYPES.INGEST_PIPELINE); + result.details[pipelineNodeId] = pipelines[pipelineId]; + + result.elements.push({ + data: { + id: pipelineNodeId, + label: pipelineId, + type: JOB_MAP_NODE_TYPES.INGEST_PIPELINE, + }, + }); + + result.elements.push({ + data: { + id: `${modelNodeId}~${pipelineNodeId}`, + source: modelNodeId, + target: pipelineNodeId, + }, + }); } - if (node.os?.name !== osName || node.os?.arch !== arch) { - sameArch = false; - break; + + if (withIndices === true) { + const pipelineIdsToDestinationIndices: Record = {}; + + let indicesPermissions; + try { + indicesSettings = await this._client.asInternalUser.indices.getSettings(); + const hasPrivilegesResponse = await this._client.asCurrentUser.security.hasPrivileges({ + index: [ + { + names: Object.keys(indicesSettings), + privileges: ['read'], + }, + ], + }); + indicesPermissions = hasPrivilegesResponse.index; + } catch (e) { + // Possible that the user doesn't have permissions to view + // If so, gracefully exit + if (e.meta?.statusCode !== 403) { + // eslint-disable-next-line no-console + console.error(e); + } + return result; + } + + // 2. From list of model pipelines, find all indices that have pipeline set as index.default_pipeline + for (const [indexName, { settings }] of Object.entries(indicesSettings)) { + if ( + settings?.index?.default_pipeline && + pipelineIds.has(settings.index.default_pipeline) && + indicesPermissions[indexName]?.read === true + ) { + if (Array.isArray(pipelineIdsToDestinationIndices[settings.index.default_pipeline])) { + pipelineIdsToDestinationIndices[settings.index.default_pipeline].push(indexName); + } else { + pipelineIdsToDestinationIndices[settings.index.default_pipeline] = [indexName]; + } + } + } + + // 3. Grab index information for all the indices found, and add their info to the map + for (const [pipelineId, indexIds] of Object.entries(pipelineIdsToDestinationIndices)) { + const pipelineNodeId = this.getNodeId(pipelineId, JOB_MAP_NODE_TYPES.INGEST_PIPELINE); + + for (const destinationIndexId of indexIds) { + const destinationIndexNodeId = this.getNodeId( + destinationIndexId, + JOB_MAP_NODE_TYPES.INDEX + ); + + const destinationIndexDetails = await this.getIndexData(destinationIndexId); + + result.indices.push(destinationIndexDetails); + + result.details[destinationIndexNodeId] = { + ...destinationIndexDetails, + ml_inference_models: [modelId], + }; + + result.elements.push({ + data: { + id: destinationIndexNodeId, + label: destinationIndexId, + type: JOB_MAP_NODE_TYPES.INDEX, + }, + }); + + result.elements.push({ + data: { + id: `${pipelineNodeId}~${destinationIndexNodeId}`, + source: pipelineNodeId, + target: destinationIndexNodeId, + }, + }); + } + } + + const destinationIndices = flatten(Object.values(pipelineIdsToDestinationIndices)); + + // 4. From these destination indices, check if there's any transforms that have the indexId as the source destination index + if (destinationIndices.length > 0) { + const transforms = await this.initTransformData(); + + if (!transforms) return result; + + for (const destinationIndex of destinationIndices) { + const destinationIndexNodeId = `${destinationIndex}-${JOB_MAP_NODE_TYPES.INDEX}`; + + const foundTransform = transforms?.find((t) => { + const transformSourceIndex = Array.isArray(t.source.index) + ? t.source.index[0] + : t.source.index; + return transformSourceIndex === destinationIndex; + }); + + // 5. If any of the transforms use these indices as source , find the destination indices to complete the map + if (foundTransform) { + const transformDestIndex = foundTransform.dest.index; + const transformNodeId = `${foundTransform.id}-${JOB_MAP_NODE_TYPES.TRANSFORM}`; + const transformDestIndexNodeId = `${transformDestIndex}-${JOB_MAP_NODE_TYPES.INDEX}`; + + const destIndex = await this.getIndexData(transformDestIndex); + + result.indices.push(destIndex); + + result.details[transformNodeId] = foundTransform; + result.details[transformDestIndexNodeId] = destIndex; + + result.elements.push( + { + data: { + id: transformNodeId, + label: foundTransform.id, + type: JOB_MAP_NODE_TYPES.TRANSFORM, + }, + }, + { + data: { + id: transformDestIndexNodeId, + label: transformDestIndex, + type: JOB_MAP_NODE_TYPES.INDEX, + }, + } + ); + + result.elements.push( + { + data: { + id: `${destinationIndexNodeId}~${transformNodeId}`, + source: destinationIndexNodeId, + target: transformNodeId, + }, + }, + { + data: { + id: `${transformNodeId}~${transformDestIndexNodeId}`, + source: transformNodeId, + target: transformDestIndexNodeId, + }, + } + ); + } + } + } } } + return result; + } catch (error) { + if (error.statusCode === 404) { + // ES returns 404 when there are no pipelines + // Instead, we should return the modelIdsMap and a 200 + return result; + } + throw error; + } + + return result; + } + + /** + * Deletes associated pipelines of the requested model + * @param modelIds + */ + async deleteModelPipelines(modelIds: string[]) { + const pipelines = await this.getModelsPipelines(modelIds); + const pipelinesIds: string[] = [ + ...new Set([...pipelines.values()].flatMap((v) => Object.keys(v!))), + ]; + await Promise.all( + pipelinesIds.map((id) => this._client.asCurrentUser.ingest.deletePipeline({ id })) + ); + } - const result = Object.entries(ELASTIC_MODEL_DEFINITIONS).map(([name, def]) => { - const recommended = - (isCloud && def.os === 'Linux' && def.arch === 'amd64') || - (sameArch && !!def?.os && def?.os === osName && def?.arch === arch); - return { - ...def, - name, - ...(recommended ? { recommended } : {}), - }; + /** + * Returns a list of elastic curated models available for download. + */ + async getModelDownloads(): Promise { + // We assume that ML nodes in Cloud are always on linux-x86_64, even if other node types aren't. + const isCloud = !!this._cloud?.cloudId; + + const nodesInfoResponse = + await this._client.asInternalUser.transport.request({ + method: 'GET', + path: `/_nodes/ml:true/os`, }); - return result; - }, - - /** - * Provides an ELSER model name and configuration for download based on the current cluster architecture. - * The current default version is 2. If running on Cloud it returns the Linux x86_64 optimized version. - * If any of the ML nodes run a different OS rather than Linux, or the CPU architecture isn't x86_64, - * a portable version of the model is returned. - */ - async getELSER(options?: GetElserOptions): Promise | never { - const modelDownloadConfig = await this.getModelDownloads(); - - let requestedModel: ModelDefinitionResponse | undefined; - let recommendedModel: ModelDefinitionResponse | undefined; - let defaultModel: ModelDefinitionResponse | undefined; - - for (const model of modelDownloadConfig) { - if (options?.version === model.version) { + let osName: string | undefined; + let arch: string | undefined; + // Indicates that all ML nodes have the same architecture + let sameArch = true; + for (const node of Object.values(nodesInfoResponse.nodes)) { + if (!osName) { + osName = node.os?.name; + } + if (!arch) { + arch = node.os?.arch; + } + if (node.os?.name !== osName || node.os?.arch !== arch) { + sameArch = false; + break; + } + } + + const result = Object.entries(ELASTIC_MODEL_DEFINITIONS).map(([name, def]) => { + const recommended = + (isCloud && def.os === 'Linux' && def.arch === 'amd64') || + (sameArch && !!def?.os && def?.os === osName && def?.arch === arch); + return { + ...def, + name, + ...(recommended ? { recommended } : {}), + }; + }); + + return result; + } + + /** + * Provides an ELSER model name and configuration for download based on the current cluster architecture. + * The current default version is 2. If running on Cloud it returns the Linux x86_64 optimized version. + * If any of the ML nodes run a different OS rather than Linux, or the CPU architecture isn't x86_64, + * a portable version of the model is returned. + */ + async getELSER(options?: GetElserOptions): Promise | never { + const modelDownloadConfig = await this.getModelDownloads(); + + let requestedModel: ModelDefinitionResponse | undefined; + let recommendedModel: ModelDefinitionResponse | undefined; + let defaultModel: ModelDefinitionResponse | undefined; + + for (const model of modelDownloadConfig) { + if (options?.version === model.version) { + requestedModel = model; + if (model.recommended) { requestedModel = model; - if (model.recommended) { - requestedModel = model; - break; - } - } else if (model.recommended) { - recommendedModel = model; - } else if (model.default) { - defaultModel = model; + break; } + } else if (model.recommended) { + recommendedModel = model; + } else if (model.default) { + defaultModel = model; } + } - if (!requestedModel && !defaultModel && !recommendedModel) { - throw new Error('Requested model not found'); - } + if (!requestedModel && !defaultModel && !recommendedModel) { + throw new Error('Requested model not found'); + } - return requestedModel || recommendedModel || defaultModel!; - }, - }; + return requestedModel || recommendedModel || defaultModel!; + } } diff --git a/x-pack/plugins/ml/server/models/notifications_service/notifications_service_provider.ts b/x-pack/plugins/ml/server/models/notifications_service/notifications_service_provider.ts index 981b7ba6be7e65..95c32d8f1d21f2 100644 --- a/x-pack/plugins/ml/server/models/notifications_service/notifications_service_provider.ts +++ b/x-pack/plugins/ml/server/models/notifications_service/notifications_service_provider.ts @@ -7,6 +7,7 @@ import { IScopedClusterClient } from '@kbn/core/server'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { MlFeatures } from '../../../common/constants/app'; import type { MLSavedObjectService } from '../../saved_objects'; import type { NotificationItem, NotificationSource } from '../../../common/types/notifications'; import { ML_NOTIFICATION_INDEX_PATTERN } from '../../../common/constants/index_patterns'; @@ -19,7 +20,6 @@ import type { NotificationsCountResponse, NotificationsSearchResponse, } from '../../../common/types/notifications'; -import type { MlFeatures } from '../../types'; const MAX_NOTIFICATIONS_SIZE = 10000; diff --git a/x-pack/plugins/ml/server/plugin.ts b/x-pack/plugins/ml/server/plugin.ts index dcd97acabcbd8c..962a9cff24b598 100644 --- a/x-pack/plugins/ml/server/plugin.ts +++ b/x-pack/plugins/ml/server/plugin.ts @@ -25,12 +25,16 @@ import type { SpacesPluginSetup } from '@kbn/spaces-plugin/server'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/server'; import type { HomeServerPluginSetup } from '@kbn/home-plugin/server'; import type { CasesSetup } from '@kbn/cases-plugin/server'; -import type { MlFeatures, PluginsSetup, PluginsStart, RouteInitialization } from './types'; +import type { PluginsSetup, PluginsStart, RouteInitialization } from './types'; import type { MlCapabilities } from '../common/types/capabilities'; -import type { ConfigSchema } from './config_schema'; import { jsonSchemaRoutes } from './routes/json_schema'; import { notificationsRoutes } from './routes/notifications'; -import { PLUGIN_ID } from '../common/constants/app'; +import { + type MlFeatures, + PLUGIN_ID, + type ConfigSchema, + initEnabledFeatures, +} from '../common/constants/app'; import { initMlServerLog } from './lib/log'; import { annotationRoutes } from './routes/annotations'; import { calendars } from './routes/calendars'; @@ -102,7 +106,7 @@ export class MlServerPlugin this.mlLicense = new MlLicense(); this.isMlReady = new Promise((resolve) => (this.setMlReady = resolve)); this.savedObjectsSyncService = new SavedObjectsSyncService(this.log); - this.initEnabledFeatures(ctx.config.get()); + initEnabledFeatures(this.enabledFeatures, ctx.config.get()); } public setup(coreSetup: CoreSetup, plugins: PluginsSetup): MlPluginSetup { @@ -240,11 +244,11 @@ export class MlServerPlugin // Register Trained Model Management routes if (this.enabledFeatures.dfa || this.enabledFeatures.nlp) { - modelManagementRoutes(routeInit); trainedModelsRoutes(routeInit, plugins.cloud); } // Register Miscellaneous routes + modelManagementRoutes(routeInit); dataVisualizerRoutes(routeInit); fieldsService(routeInit); indicesRoutes(routeInit); @@ -332,16 +336,4 @@ export class MlServerPlugin public stop() { this.mlLicense.unsubscribe(); } - - private initEnabledFeatures(config: ConfigSchema) { - if (config.ad?.enabled !== undefined) { - this.enabledFeatures.ad = config.ad.enabled; - } - if (config.dfa?.enabled !== undefined) { - this.enabledFeatures.dfa = config.dfa.enabled; - } - if (config.nlp?.enabled !== undefined) { - this.enabledFeatures.nlp = config.nlp.enabled; - } - } } diff --git a/x-pack/plugins/ml/server/routes/data_frame_analytics.ts b/x-pack/plugins/ml/server/routes/data_frame_analytics.ts index fb5eca48d8fa19..0914500341424b 100644 --- a/x-pack/plugins/ml/server/routes/data_frame_analytics.ts +++ b/x-pack/plugins/ml/server/routes/data_frame_analytics.ts @@ -12,10 +12,10 @@ import { JOB_MAP_NODE_TYPES, type DeleteDataFrameAnalyticsWithIndexStatus, } from '@kbn/ml-data-frame-analytics-utils'; -import { ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; +import { type MlFeatures, ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; import { wrapError } from '../client/error_wrapper'; import { analyticsAuditMessagesProvider } from '../models/data_frame_analytics/analytics_audit_messages'; -import type { MlFeatures, RouteInitialization } from '../types'; +import type { RouteInitialization } from '../types'; import { dataAnalyticsJobConfigSchema, dataAnalyticsJobUpdateSchema, diff --git a/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts b/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts index 1b48a49c8d82f9..260b3bc5881d83 100644 --- a/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts @@ -48,6 +48,7 @@ export const optionalModelIdSchema = schema.object({ export const getInferenceQuerySchema = schema.object({ size: schema.maybe(schema.string()), with_pipelines: schema.maybe(schema.string()), + with_indices: schema.maybe(schema.oneOf([schema.string(), schema.boolean()])), include: schema.maybe(schema.string()), }); diff --git a/x-pack/plugins/ml/server/routes/trained_models.ts b/x-pack/plugins/ml/server/routes/trained_models.ts index 8685652ab3189d..7c9f0c14ec6b42 100644 --- a/x-pack/plugins/ml/server/routes/trained_models.ts +++ b/x-pack/plugins/ml/server/routes/trained_models.ts @@ -8,11 +8,11 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { schema } from '@kbn/config-schema'; import type { ErrorType } from '@kbn/ml-error-utils'; -import type { MlGetTrainedModelsRequest } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { type ElserVersion } from '@kbn/ml-trained-models-utils'; import type { CloudSetup } from '@kbn/cloud-plugin/server'; -import { ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; -import type { MlFeatures, RouteInitialization } from '../types'; +import type { ElserVersion } from '@kbn/ml-trained-models-utils'; +import { isDefined } from '@kbn/ml-is-defined'; +import { type MlFeatures, ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; +import type { RouteInitialization } from '../types'; import { wrapError } from '../client/error_wrapper'; import { deleteTrainedModelQuerySchema, @@ -29,7 +29,10 @@ import { createIngestPipelineSchema, modelDownloadsQuery, } from './schemas/inference_schema'; -import type { TrainedModelConfigResponse } from '../../common/types/trained_models'; +import type { + PipelineDefinition, + TrainedModelConfigResponse, +} from '../../common/types/trained_models'; import { mlLog } from '../lib/log'; import { forceQuerySchema } from './schemas/anomaly_detectors_schema'; import { modelsProvider } from '../models/model_management'; @@ -84,12 +87,20 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, request, response }) => { try { const { modelId } = request.params; - const { with_pipelines: withPipelines, ...query } = request.query; + const { + with_pipelines: withPipelines, + with_indices: withIndicesRaw, + ...getTrainedModelsRequestParams + } = request.query; + + const withIndices = + request.query.with_indices === 'true' || request.query.with_indices === true; + const resp = await mlClient.getTrainedModels({ - ...query, + ...getTrainedModelsRequestParams, ...(modelId ? { model_id: modelId } : {}), size: DEFAULT_TRAINED_MODELS_PAGE_SIZE, - } as MlGetTrainedModelsRequest); + } as estypes.MlGetTrainedModelsRequest); // model_type is missing // @ts-ignore const result = resp.trained_model_configs as TrainedModelConfigResponse[]; @@ -123,20 +134,54 @@ export function trainedModelsRoutes( ...Object.values(modelDeploymentsMap).flat(), ]) ); - - const pipelinesResponse = await modelsProvider(client).getModelsPipelines( - modelIdsAndAliases + const modelsClient = modelsProvider(client); + + const modelsPipelinesAndIndices = await Promise.all( + modelIdsAndAliases.map(async (modelIdOrAlias) => { + return { + modelIdOrAlias, + result: await modelsClient.getModelsPipelinesAndIndicesMap(modelIdOrAlias, { + withIndices, + }), + }; + }) ); + for (const model of result) { - model.pipelines = { - ...(pipelinesResponse.get(model.model_id) ?? {}), - ...(model.metadata?.model_aliases ?? []).reduce((acc, alias) => { - return Object.assign(acc, pipelinesResponse.get(alias) ?? {}); - }, {}), - ...(modelDeploymentsMap[model.model_id] ?? []).reduce((acc, deploymentId) => { - return Object.assign(acc, pipelinesResponse.get(deploymentId) ?? {}); - }, {}), - }; + const modelAliases = model.metadata?.model_aliases ?? []; + const modelMap = modelsPipelinesAndIndices.find( + (d) => d.modelIdOrAlias === model.model_id + )?.result; + + const allRelatedModels = modelsPipelinesAndIndices + .filter( + (m) => + [ + model.model_id, + ...modelAliases, + ...(modelDeploymentsMap[model.model_id] ?? []), + ].findIndex((alias) => alias === m.modelIdOrAlias) > -1 + ) + .map((r) => r?.result) + .filter(isDefined); + const ingestPipelinesFromModelAliases = allRelatedModels + .map((r) => r?.ingestPipelines) + .filter(isDefined) as Array>>; + + model.pipelines = ingestPipelinesFromModelAliases.reduce< + Record + >((allPipelines, modelsToPipelines) => { + for (const [, pipelinesObj] of modelsToPipelines?.entries()) { + Object.entries(pipelinesObj).forEach(([pipelineId, pipelineInfo]) => { + allPipelines[pipelineId] = pipelineInfo; + }); + } + return allPipelines; + }, {}); + + if (modelMap && withIndices) { + model.indices = modelMap.indices; + } } } } catch (e) { diff --git a/x-pack/plugins/ml/server/types.ts b/x-pack/plugins/ml/server/types.ts index 302df71df5f385..17f5c5a60a1a9b 100644 --- a/x-pack/plugins/ml/server/types.ts +++ b/x-pack/plugins/ml/server/types.ts @@ -30,6 +30,7 @@ import type { CasesSetup } from '@kbn/cases-plugin/server'; import type { RouteGuard } from './lib/route_guard'; import type { ResolveMlCapabilities } from '../common/types/capabilities'; import type { MlLicense } from '../common/license'; +import type { MlFeatures } from '../common/constants/app'; export interface LicenseCheckResult { isAvailable: boolean; @@ -82,5 +83,3 @@ export interface RouteInitialization { routeGuard: RouteGuard; getEnabledFeatures: () => MlFeatures; } - -export type MlFeatures = Record<'ad' | 'dfa' | 'nlp', boolean>; diff --git a/x-pack/plugins/ml/tsconfig.json b/x-pack/plugins/ml/tsconfig.json index 2532a6b7824eed..7962e2dd27296c 100644 --- a/x-pack/plugins/ml/tsconfig.json +++ b/x-pack/plugins/ml/tsconfig.json @@ -105,5 +105,6 @@ "@kbn/presentation-util-plugin", "@kbn/react-kibana-mount", "@kbn/core-http-browser", + "@kbn/data-view-editor-plugin", ], } diff --git a/x-pack/plugins/observability/public/application/index.tsx b/x-pack/plugins/observability/public/application/index.tsx index 46dfd7a50d3ec0..2d251ac71660e1 100644 --- a/x-pack/plugins/observability/public/application/index.tsx +++ b/x-pack/plugins/observability/public/application/index.tsx @@ -14,11 +14,8 @@ import { Router, Routes, Route } from '@kbn/shared-ux-router'; import { AppMountParameters, APP_WRAPPER_CLASS, CoreStart } from '@kbn/core/public'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import type { LazyObservabilityPageTemplateProps } from '@kbn/observability-shared-plugin/public'; -import { - KibanaContextProvider, - KibanaThemeProvider, - RedirectAppLinks, -} from '@kbn/kibana-react-plugin/public'; +import { KibanaContextProvider, RedirectAppLinks } from '@kbn/kibana-react-plugin/public'; +import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public'; @@ -90,7 +87,7 @@ export const renderApp = ({ ReactDOM.render( - + { - describe('when the common resources are not installed yet', () => { - it('installs the common resources', async () => { - const mockClusterClient = elasticsearchServiceMock.createElasticsearchClient(); - mockClusterClient.indices.getIndexTemplate.mockResponseOnce({ index_templates: [] }); - const installer = new DefaultResourceInstaller(mockClusterClient, loggerMock.create()); + it('installs the common resources', async () => { + const mockClusterClient = elasticsearchServiceMock.createElasticsearchClient(); + mockClusterClient.indices.getIndexTemplate.mockResponseOnce({ index_templates: [] }); + const installer = new DefaultResourceInstaller(mockClusterClient, loggerMock.create()); - await installer.ensureCommonResourcesInstalled(); + await installer.ensureCommonResourcesInstalled(); - expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenCalledTimes(4); - expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenNthCalledWith( - 1, - expect.objectContaining({ name: SLO_COMPONENT_TEMPLATE_MAPPINGS_NAME }) - ); - expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenNthCalledWith( - 2, - expect.objectContaining({ name: SLO_COMPONENT_TEMPLATE_SETTINGS_NAME }) - ); - expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenNthCalledWith( - 3, - expect.objectContaining({ name: SLO_SUMMARY_COMPONENT_TEMPLATE_MAPPINGS_NAME }) - ); - expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenNthCalledWith( - 4, - expect.objectContaining({ name: SLO_SUMMARY_COMPONENT_TEMPLATE_SETTINGS_NAME }) - ); - expect(mockClusterClient.indices.putIndexTemplate).toHaveBeenCalledTimes(2); - expect(mockClusterClient.indices.putIndexTemplate).toHaveBeenNthCalledWith( - 1, - expect.objectContaining({ name: SLO_INDEX_TEMPLATE_NAME }) - ); - expect(mockClusterClient.indices.putIndexTemplate).toHaveBeenNthCalledWith( - 2, - expect.objectContaining({ name: SLO_SUMMARY_INDEX_TEMPLATE_NAME }) - ); + expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenCalledTimes(4); + expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ name: SLO_COMPONENT_TEMPLATE_MAPPINGS_NAME }) + ); + expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenNthCalledWith( + 2, + expect.objectContaining({ name: SLO_COMPONENT_TEMPLATE_SETTINGS_NAME }) + ); + expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenNthCalledWith( + 3, + expect.objectContaining({ name: SLO_SUMMARY_COMPONENT_TEMPLATE_MAPPINGS_NAME }) + ); + expect(mockClusterClient.cluster.putComponentTemplate).toHaveBeenNthCalledWith( + 4, + expect.objectContaining({ name: SLO_SUMMARY_COMPONENT_TEMPLATE_SETTINGS_NAME }) + ); + expect(mockClusterClient.indices.putIndexTemplate).toHaveBeenCalledTimes(2); + expect(mockClusterClient.indices.putIndexTemplate).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ name: SLO_INDEX_TEMPLATE_NAME }) + ); + expect(mockClusterClient.indices.putIndexTemplate).toHaveBeenNthCalledWith( + 2, + expect.objectContaining({ name: SLO_SUMMARY_INDEX_TEMPLATE_NAME }) + ); - expect(mockClusterClient.ingest.putPipeline).toHaveBeenCalledTimes(2); - expect(mockClusterClient.ingest.putPipeline).toHaveBeenNthCalledWith( - 1, - expect.objectContaining({ id: SLO_INGEST_PIPELINE_NAME }) - ); - expect(mockClusterClient.ingest.putPipeline).toHaveBeenNthCalledWith( - 2, - expect.objectContaining({ id: SLO_SUMMARY_INGEST_PIPELINE_NAME }) - ); - }); - }); - - describe('when the common resources are already installed', () => { - it('skips the installation', async () => { - const mockClusterClient = elasticsearchServiceMock.createElasticsearchClient(); - mockClusterClient.indices.getIndexTemplate.mockResponseOnce({ - index_templates: [ - { - name: SLO_INDEX_TEMPLATE_NAME, - index_template: { - index_patterns: [], - composed_of: [], - _meta: { version: SLO_RESOURCES_VERSION }, - }, - }, - ], - }); - mockClusterClient.indices.getIndexTemplate.mockResponseOnce({ - index_templates: [ - { - name: SLO_SUMMARY_INDEX_TEMPLATE_NAME, - index_template: { - index_patterns: [], - composed_of: [], - _meta: { version: SLO_RESOURCES_VERSION }, - }, - }, - ], - }); - mockClusterClient.ingest.getPipeline.mockResponseOnce({ - // @ts-ignore _meta not typed properly - [SLO_INGEST_PIPELINE_NAME]: { _meta: { version: SLO_RESOURCES_VERSION } }, - }); - mockClusterClient.ingest.getPipeline.mockResponseOnce({ - // @ts-ignore _meta not typed properly - [SLO_SUMMARY_INGEST_PIPELINE_NAME]: { _meta: { version: SLO_RESOURCES_VERSION } }, - }); - const installer = new DefaultResourceInstaller(mockClusterClient, loggerMock.create()); - - await installer.ensureCommonResourcesInstalled(); - - expect(mockClusterClient.cluster.putComponentTemplate).not.toHaveBeenCalled(); - expect(mockClusterClient.indices.putIndexTemplate).not.toHaveBeenCalled(); - expect(mockClusterClient.ingest.putPipeline).not.toHaveBeenCalled(); - }); + expect(mockClusterClient.ingest.putPipeline).toHaveBeenCalledTimes(2); + expect(mockClusterClient.ingest.putPipeline).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ id: SLO_INGEST_PIPELINE_NAME }) + ); + expect(mockClusterClient.ingest.putPipeline).toHaveBeenNthCalledWith( + 2, + expect.objectContaining({ id: SLO_SUMMARY_INGEST_PIPELINE_NAME }) + ); }); }); diff --git a/x-pack/plugins/observability/server/services/slo/resource_installer.ts b/x-pack/plugins/observability/server/services/slo/resource_installer.ts index 742b2a8e7202ea..4fc77ea2399c78 100644 --- a/x-pack/plugins/observability/server/services/slo/resource_installer.ts +++ b/x-pack/plugins/observability/server/services/slo/resource_installer.ts @@ -23,7 +23,6 @@ import { SLO_INDEX_TEMPLATE_PATTERN, SLO_INGEST_PIPELINE_INDEX_NAME_PREFIX, SLO_INGEST_PIPELINE_NAME, - SLO_RESOURCES_VERSION, SLO_SUMMARY_COMPONENT_TEMPLATE_MAPPINGS_NAME, SLO_SUMMARY_COMPONENT_TEMPLATE_SETTINGS_NAME, SLO_SUMMARY_DESTINATION_INDEX_NAME, @@ -46,13 +45,6 @@ export class DefaultResourceInstaller implements ResourceInstaller { constructor(private esClient: ElasticsearchClient, private logger: Logger) {} public async ensureCommonResourcesInstalled(): Promise { - const alreadyInstalled = await this.areResourcesAlreadyInstalled(); - - if (alreadyInstalled) { - this.logger.info('SLO resources already installed - skipping'); - return; - } - try { this.logger.info('Installing SLO shared resources'); await Promise.all([ @@ -105,77 +97,6 @@ export class DefaultResourceInstaller implements ResourceInstaller { } } - private async areResourcesAlreadyInstalled(): Promise { - let indexTemplateExists = false; - try { - const { index_templates: indexTemplates } = await this.execute(() => - this.esClient.indices.getIndexTemplate({ - name: SLO_INDEX_TEMPLATE_NAME, - }) - ); - - const sloIndexTemplate = indexTemplates.find( - (template) => template.name === SLO_INDEX_TEMPLATE_NAME - ); - indexTemplateExists = - !!sloIndexTemplate && - sloIndexTemplate.index_template._meta?.version === SLO_RESOURCES_VERSION; - } catch (err) { - return false; - } - - let summaryIndexTemplateExists = false; - try { - const { index_templates: indexTemplates } = await this.execute(() => - this.esClient.indices.getIndexTemplate({ - name: SLO_SUMMARY_INDEX_TEMPLATE_NAME, - }) - ); - const sloSummaryIndexTemplate = indexTemplates.find( - (template) => template.name === SLO_SUMMARY_INDEX_TEMPLATE_NAME - ); - summaryIndexTemplateExists = - !!sloSummaryIndexTemplate && - sloSummaryIndexTemplate.index_template._meta?.version === SLO_RESOURCES_VERSION; - } catch (err) { - return false; - } - - let ingestPipelineExists = false; - try { - const pipeline = await this.execute(() => - this.esClient.ingest.getPipeline({ id: SLO_INGEST_PIPELINE_NAME }) - ); - - ingestPipelineExists = - // @ts-ignore _meta is not defined on the type - pipeline && pipeline[SLO_INGEST_PIPELINE_NAME]._meta.version === SLO_RESOURCES_VERSION; - } catch (err) { - return false; - } - - let summaryIngestPipelineExists = false; - try { - const pipeline = await this.execute(() => - this.esClient.ingest.getPipeline({ id: SLO_SUMMARY_INGEST_PIPELINE_NAME }) - ); - - summaryIngestPipelineExists = - pipeline && - // @ts-ignore _meta is not defined on the type - pipeline[SLO_SUMMARY_INGEST_PIPELINE_NAME]._meta.version === SLO_RESOURCES_VERSION; - } catch (err) { - return false; - } - - return ( - indexTemplateExists && - summaryIndexTemplateExists && - ingestPipelineExists && - summaryIngestPipelineExists - ); - } - private async createOrUpdateComponentTemplate(template: ClusterPutComponentTemplateRequest) { this.logger.info(`Installing SLO component template [${template.name}]`); return this.execute(() => this.esClient.cluster.putComponentTemplate(template)); diff --git a/x-pack/plugins/observability/tsconfig.json b/x-pack/plugins/observability/tsconfig.json index 53a2fd3815170e..74a54afe8b53bd 100644 --- a/x-pack/plugins/observability/tsconfig.json +++ b/x-pack/plugins/observability/tsconfig.json @@ -86,7 +86,8 @@ "@kbn/osquery-plugin", "@kbn/aiops-plugin", "@kbn/content-management-plugin", - "@kbn/deeplinks-observability" + "@kbn/deeplinks-observability", + "@kbn/react-kibana-context-theme" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/observability_log_explorer/public/components/log_explorer_top_nav_menu.tsx b/x-pack/plugins/observability_log_explorer/public/components/log_explorer_top_nav_menu.tsx index d9456e6ed253bd..219bde55880cfe 100644 --- a/x-pack/plugins/observability_log_explorer/public/components/log_explorer_top_nav_menu.tsx +++ b/x-pack/plugins/observability_log_explorer/public/components/log_explorer_top_nav_menu.tsx @@ -5,10 +5,10 @@ * 2.0. */ -import React, { useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import deepEqual from 'fast-deep-equal'; import useObservable from 'react-use/lib/useObservable'; -import { type BehaviorSubject, distinctUntilChanged } from 'rxjs'; +import { type BehaviorSubject, distinctUntilChanged, filter, take } from 'rxjs'; import { HeaderMenuPortal } from '@kbn/observability-shared-plugin/public'; import { AppMountParameters } from '@kbn/core-application-browser'; import { @@ -111,6 +111,16 @@ const StatefulTopNav = ({ }: LogExplorerTopNavMenuProps) => { const { euiTheme } = useEuiTheme(); + /** + * Since the breadcrumbsAppendExtension might be set only during a plugin start (e.g. search session) + * we retrieve the latest valid extension in order to restore it once we unmount the beta badge. + */ + const [previousAppendExtension$] = useState(() => + services.chrome.getBreadcrumbsAppendExtension$().pipe(filter(Boolean), take(1)) + ); + + const previousAppendExtension = useObservable(previousAppendExtension$); + useEffect(() => { const { chrome, i18n, theme } = services; @@ -137,7 +147,13 @@ const StatefulTopNav = ({ ), }); } - }, [euiTheme, services]); + + return () => { + if (chrome) { + chrome.setBreadcrumbsAppendExtension(previousAppendExtension); + } + }; + }, [euiTheme, services, previousAppendExtension]); return ( diff --git a/x-pack/plugins/observability_log_explorer/public/plugin.ts b/x-pack/plugins/observability_log_explorer/public/plugin.ts index e82d863727a607..0bf10b5fab5b14 100644 --- a/x-pack/plugins/observability_log_explorer/public/plugin.ts +++ b/x-pack/plugins/observability_log_explorer/public/plugin.ts @@ -55,6 +55,7 @@ export class ObservabilityLogExplorerPlugin ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden, searchable: true, + keywords: ['logs', 'log', 'explorer', 'logs explorer'], mount: async (appMountParams) => { const [coreStart, pluginsStart, ownPluginStart] = await core.getStartServices(); diff --git a/x-pack/plugins/observability_log_explorer/server/config.ts b/x-pack/plugins/observability_log_explorer/server/config.ts index 1977c5e625c155..9718345a72a251 100644 --- a/x-pack/plugins/observability_log_explorer/server/config.ts +++ b/x-pack/plugins/observability_log_explorer/server/config.ts @@ -10,6 +10,7 @@ import { PluginConfigDescriptor } from '@kbn/core/server'; import { ObservabilityLogExplorerConfig } from '../common/plugin_config'; export const configSchema = schema.object({ + enabled: schema.boolean({ defaultValue: true }), navigation: schema.object({ showAppLink: offeringBasedSchema({ serverless: schema.boolean({ diff --git a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/install_elastic_agent.tsx b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/install_elastic_agent.tsx index aea68cdd6711c5..922736ea107e57 100644 --- a/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/install_elastic_agent.tsx +++ b/x-pack/plugins/observability_onboarding/public/components/app/custom_logs/install_elastic_agent.tsx @@ -41,6 +41,8 @@ import { BackButton } from './back_button'; import { WindowsInstallStep } from '../../shared/windows_install_step'; import { TroubleshootingLink } from '../../shared/troubleshooting_link'; +const defaultDatasetName = ''; + export function InstallElasticAgent() { const { services: { share }, @@ -63,7 +65,8 @@ export function InstallElasticAgent() { useState('linux-tar'); const enforcedDatasetName = - integration === dataset ? dataset : `${integration}.${dataset}`; + (integration === dataset ? dataset : `${integration}.${dataset}`) ?? + defaultDatasetName; async function onContinue() { await singleDatasetLocator!.navigate({ @@ -109,7 +112,11 @@ export function InstallElasticAgent() { customConfigurations, logFilePaths, } = getState(); - if (!hasAlreadySavedFlow(getState()) && monitoringRole?.hasPrivileges) { + if ( + !hasAlreadySavedFlow(getState()) && + monitoringRole?.hasPrivileges && + datasetName + ) { return callApi('POST /internal/observability_onboarding/logs/flow', { params: { body: { diff --git a/x-pack/plugins/observability_onboarding/public/index.ts b/x-pack/plugins/observability_onboarding/public/index.ts index b83c5b6d5cad0d..9454626e80dc82 100644 --- a/x-pack/plugins/observability_onboarding/public/index.ts +++ b/x-pack/plugins/observability_onboarding/public/index.ts @@ -17,9 +17,6 @@ import { ObservabilityOnboardingPluginStart, } from './plugin'; -export { OBSERVABILITY_ONBOARDING_LOCATOR } from './locators/onboarding_locator/locator_definition'; -export type { ObservabilityOnboardingLocatorParams } from './locators/onboarding_locator/types'; - export interface ConfigSchema { ui: { enabled: boolean; diff --git a/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/get_location.ts b/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/get_location.ts index 93bb3861740cdd..9ebd263847f366 100644 --- a/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/get_location.ts +++ b/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/get_location.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ObservabilityOnboardingLocatorParams } from './types'; +import type { ObservabilityOnboardingLocatorParams } from '@kbn/deeplinks-observability/locators'; import { PLUGIN_ID } from '../../../common'; export function getLocation(params: ObservabilityOnboardingLocatorParams) { diff --git a/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/locator_definition.ts b/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/locator_definition.ts index a4f8965dda5a30..58b506ca4fa04a 100644 --- a/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/locator_definition.ts +++ b/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/locator_definition.ts @@ -11,6 +11,8 @@ import { OBSERVABILITY_ONBOARDING_LOCATOR, } from '@kbn/deeplinks-observability/locators'; +export type { OBSERVABILITY_ONBOARDING_LOCATOR } from '@kbn/deeplinks-observability/locators'; + export class ObservabilityOnboardingLocatorDefinition implements LocatorDefinition { diff --git a/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/types.ts b/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/types.ts index 61f6d923db49dc..5dfe136624d959 100644 --- a/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/types.ts +++ b/x-pack/plugins/observability_onboarding/public/locators/onboarding_locator/types.ts @@ -8,5 +8,6 @@ import type { LocatorPublic } from '@kbn/share-plugin/public'; import type { ObservabilityOnboardingLocatorParams } from '@kbn/deeplinks-observability/locators'; +export type { ObservabilityOnboardingLocatorParams } from '@kbn/deeplinks-observability/locators'; export type ObservabilityOnboardingLocator = LocatorPublic; diff --git a/x-pack/plugins/osquery/cypress/tsconfig.json b/x-pack/plugins/osquery/cypress/tsconfig.json index 11f17f033495bc..cb468e0fb8893c 100644 --- a/x-pack/plugins/osquery/cypress/tsconfig.json +++ b/x-pack/plugins/osquery/cypress/tsconfig.json @@ -19,6 +19,9 @@ "resolveJsonModule": true, }, "kbn_references": [ + { + "path": "../../../test_serverless/tsconfig.json" + }, "@kbn/cypress-config", // cypress projects that are nested inside of other ts project use code // from the parent ts project in ways that can't be automatically deteceted diff --git a/x-pack/plugins/osquery/public/results/results_table.tsx b/x-pack/plugins/osquery/public/results/results_table.tsx index 9f08cab70b0642..c74ca9d607dc1d 100644 --- a/x-pack/plugins/osquery/public/results/results_table.tsx +++ b/x-pack/plugins/osquery/public/results/results_table.tsx @@ -59,6 +59,11 @@ const euiProgressCss = { marginTop: '-2px', }; +const resultsTableContainerCss = { + width: '100%', + maxWidth: '1200px', +}; + export interface ResultsTableComponentProps { actionId: string; selectedAgent?: string; @@ -435,19 +440,21 @@ const ResultsTableComponent: React.FC = ({ ) : ( - +
+ +
)} diff --git a/x-pack/plugins/reporting/server/lib/store/store.ts b/x-pack/plugins/reporting/server/lib/store/store.ts index 1a0dcbf16a8932..d4907d43bc4905 100644 --- a/x-pack/plugins/reporting/server/lib/store/store.ts +++ b/x-pack/plugins/reporting/server/lib/store/store.ts @@ -86,7 +86,6 @@ export class ReportingStore { private readonly indexPrefix: string; // config setting of index prefix in system index name private readonly indexInterval: string; // config setting of index prefix: how often to poll for pending work private client?: ElasticsearchClient; - private ilmPolicyManager?: IlmPolicyManager; config: ReportingCore['config']; constructor(private reportingCore: ReportingCore, private logger: Logger) { @@ -107,7 +106,7 @@ export class ReportingStore { private async getIlmPolicyManager() { const client = await this.getClient(); - return (this.ilmPolicyManager = IlmPolicyManager.create({ client })); + return IlmPolicyManager.create({ client }); } private async createIndex(indexName: string) { diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.tsx index 7b0c35dd45a1fd..e811b33e3b572e 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/cti_details/threat_details_view.tsx @@ -28,11 +28,11 @@ const EnrichmentSectionHeader: React.FC<{ type?: ENRICHMENT_TYPES }> = ({ type } -
+

{type === ENRICHMENT_TYPES.IndicatorMatchRule ? i18n.INDICATOR_ENRICHMENT_TITLE : i18n.INVESTIGATION_ENRICHMENT_TITLE} -

+

diff --git a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/index.ts b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/index.ts index ed2c60ea2e961b..9de05fcd47b8e8 100644 --- a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/index.ts +++ b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/index.ts @@ -5,6 +5,8 @@ * 2.0. */ +// TODO: This import can be removed, once https://github.com/elastic/eui/pull/7221 made its way into Kibana main +import type { DefaultEuiMarkdownProcessingPlugins } from '@elastic/eui/src/components/markdown_editor/plugins/markdown_default_plugins/processing_plugins'; import { getDefaultEuiMarkdownParsingPlugins, getDefaultEuiMarkdownProcessingPlugins, @@ -14,15 +16,11 @@ import * as timelineMarkdownPlugin from './timeline'; import * as osqueryMarkdownPlugin from './osquery'; import * as insightMarkdownPlugin from './insight'; -export const { - uiPlugins: nonStatefulUiPlugins, - parsingPlugins, - processingPlugins, -} = { - uiPlugins: getDefaultEuiMarkdownUiPlugins(), - parsingPlugins: getDefaultEuiMarkdownParsingPlugins(), - processingPlugins: getDefaultEuiMarkdownProcessingPlugins(), -}; +export const nonStatefulUiPlugins = getDefaultEuiMarkdownUiPlugins(); +export const parsingPlugins = getDefaultEuiMarkdownParsingPlugins(); +// TODO: This explicit type can be removed, once https://github.com/elastic/eui/pull/7221 made its way into Kibana main +export const processingPlugins: DefaultEuiMarkdownProcessingPlugins = + getDefaultEuiMarkdownProcessingPlugins(); export const platinumOnlyPluginTokens = [insightMarkdownPlugin.insightPrefix]; diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx index 2bccfbc8ac34b3..44a1a23abf774e 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/components/host_details.tsx @@ -231,12 +231,12 @@ export const HostDetails: React.FC = ({ hostName, timestamp, s return ( <> -

+

-

+
= ({ hostName, timestamp, s data-test-subj={HOST_DETAILS_TEST_ID} > -
+

-

+
= ({ hostName, timestamp, s -
+

-

+
diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx index 76a97e6e710538..681d542eac3a1b 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/components/related_cases.tsx @@ -10,6 +10,7 @@ import type { EuiBasicTableColumn } from '@elastic/eui'; import { EuiInMemoryTable, EuiSkeletonText } from '@elastic/eui'; import type { RelatedCase } from '@kbn/cases-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; import { CellTooltipWrapper } from '../../shared/components/cell_tooltip_wrapper'; import { CaseDetailsLink } from '../../../common/components/links'; import { @@ -65,7 +66,19 @@ export const RelatedCases: React.VFC = ({ eventId }) => { const { loading, error, data, dataCount } = useFetchRelatedCases({ eventId }); if (loading) { - return ; + return ( + + ); } if (error) { diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts b/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts index fc152e34d50745..5832ddda60c6d7 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts +++ b/x-pack/plugins/security_solution/public/flyout/left/components/test_ids.ts @@ -11,6 +11,7 @@ import { PREFIX } from '../../shared/test_ids'; export const ANALYZER_GRAPH_TEST_ID = `${PREFIX}AnalyzerGraph` as const; export const SESSION_VIEW_TEST_ID = `${PREFIX}SessionView` as const; +export const SESSION_VIEW_ERROR_TEST_ID = `${PREFIX}SessionViewError` as const; /* Insights tab */ diff --git a/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx b/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx index 12ad057284cd67..8d395f4a1d3dd1 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/components/user_details.tsx @@ -232,12 +232,12 @@ export const UserDetails: React.FC = ({ userName, timestamp, s return ( <> -

+

-

+
= ({ userName, timestamp, s data-test-subj={USER_DETAILS_TEST_ID} > -
+

-

+
= ({ userName, timestamp, s -
+

-

+
diff --git a/x-pack/plugins/security_solution/public/flyout/left/tabs/insights_tab.tsx b/x-pack/plugins/security_solution/public/flyout/left/tabs/insights_tab.tsx index 6f35b6b26f3c88..3e8c1f22de6221 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/tabs/insights_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/tabs/insights_tab.tsx @@ -113,7 +113,7 @@ export const InsightsTab: React.FC = memo(() => { color="primary" name="coarsness" legend={i18n.translate( - 'xpack.securitySolution.flyout.left.insights.buttonGroupButtonLabel', + 'xpack.securitySolution.flyout.left.insights.buttonGroupLegendLabel', { defaultMessage: 'Insights options', } diff --git a/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx b/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx index 923a2e9aa3ed64..632bcb856a2573 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/tabs/visualize_tab.tsx @@ -91,7 +91,7 @@ export const VisualizeTab: FC = memo(() => { color="primary" name="coarsness" legend={i18n.translate( - 'xpack.securitySolution.flyout.left.visualize.buttonGroupButtonLabel', + 'xpack.securitySolution.flyout.left.visualize.buttonGroupLegendLabel', { defaultMessage: 'Visualize options', } diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx index ac8ec64a0ee345..4b0169eeacbc22 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/description.tsx @@ -11,6 +11,7 @@ import React, { useMemo, useCallback } from 'react'; import { isEmpty } from 'lodash'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; import { useRightPanelContext } from '../context'; import { useBasicDataFromDetailsData } from '../../../timelines/components/side_panel/event_details/helpers'; import { @@ -65,6 +66,12 @@ export const Description: FC = () => { onClick={openRulePreview} iconSide="right" data-test-subj={RULE_SUMMARY_BUTTON_TEST_ID} + aria-label={i18n.translate( + 'xpack.securitySolution.flyout.right.about.description.ruleSummaryButtonAriaLabel', + { + defaultMessage: 'Show rule summary', + } + )} > { onClick={collapseDetails} iconType="arrowEnd" data-test-subj={COLLAPSE_DETAILS_BUTTON_TEST_ID} + aria-label={i18n.translate( + 'xpack.securitySolution.flyout.right.header.collapseDetailButtonAriaLabel', + { + defaultMessage: 'Collapse details', + } + )} > { onClick={expandDetails} iconType="arrowStart" data-test-subj={EXPAND_DETAILS_BUTTON_TEST_ID} + aria-label={i18n.translate( + 'xpack.securitySolution.flyout.right.header.expandDetailButtonAriaLabel', + { + defaultMessage: 'Expand details', + } + )} > = memo(({ flyoutIsExpandable }) )} -

+

{isAlert && !isEmpty(ruleName) ? ( ruleName ) : ( @@ -95,7 +95,7 @@ export const HeaderTitle: VFC = memo(({ flyoutIsExpandable }) defaultMessage="Event details" /> )} -

+
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.tsx index 8a981d037667fd..9ffc267c3ccae0 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/insights_summary_row.tsx @@ -9,6 +9,7 @@ import type { ReactElement, VFC } from 'react'; import React from 'react'; import { css } from '@emotion/react'; import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiHealth, EuiSkeletonText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { FormattedCount } from '../../../common/components/formatted_number'; export interface InsightsSummaryRowProps { @@ -64,7 +65,13 @@ export const InsightsSummaryRow: VFC = ({ lines={1} size="m" isLoading={loading} - contentAriaLabel="Loading" + contentAriaLabel={i18n.translate( + 'xpack.securitySolution.flyout.right.insights.insightSummaryLoadingAriaLabel', + { + defaultMessage: 'Loading insights for {value}', + values: { value }, + } + )} data-test-subj={loadingDataTestSubj} /> ); @@ -83,7 +90,12 @@ export const InsightsSummaryRow: VFC = ({ { onClick={goToInvestigationsTab} iconType="documentation" data-test-subj={INVESTIGATION_GUIDE_BUTTON_TEST_ID} + aria-label={i18n.translate( + 'xpack.securitySolution.flyout.right.investigation.investigationGuide.investigationGuideButtonAriaLabel', + { + defaultMessage: 'Show investigation guide', + } + )} > { onClick={openRulePreview} iconSide="right" data-test-subj={REASON_DETAILS_PREVIEW_BUTTON_TEST_ID} + aria-label={i18n.translate( + 'xpack.securitySolution.flyout.right.about.reason.alertReasonButtonAriaLabel', + { + defaultMessage: 'Show full reason', + } + )} > { onClick={goToResponseTab} iconType="documentation" data-test-subj={RESPONSE_BUTTON_TEST_ID} + aria-label={i18n.translate( + 'xpack.securitySolution.flyout.right.response.responseButtonAriaLabel', + { + defaultMessage: 'Response', + } + )} > { -
+

-

+
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/severity.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/severity.tsx index 81896bf7706369..a7cfddde6c9034 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/severity.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/severity.tsx @@ -46,12 +46,12 @@ export const DocumentSeverity: FC = memo(() => { -
+

-

+
diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx index e9637e61205daa..4c5e5a4507c38e 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx @@ -9,6 +9,7 @@ import { copyToClipboard, EuiButtonEmpty, EuiCopy } from '@elastic/eui'; import type { FC } from 'react'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; import { FLYOUT_URL_PARAM } from '../../shared/hooks/url/use_sync_flyout_state_with_url'; import { SHARE_BUTTON_TEST_ID } from './test_ids'; @@ -40,6 +41,12 @@ export const ShareButton: FC = ({ alertUrl }) => { }} iconType="share" data-test-subj={SHARE_BUTTON_TEST_ID} + aria-label={i18n.translate( + 'xpack.securitySolution.flyout.right.header.shareButtonAriaLabel', + { + defaultMessage: 'Share Alert', + } + )} > { return ( - <> + @@ -29,7 +40,7 @@ export const OverviewTab: FC = memo(() => { - + ); }); diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx index 4f06ce9a45eb43..3e273d7d126f33 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.tsx @@ -22,6 +22,7 @@ import { } from '@elastic/eui'; import type { IconType } from '@elastic/eui'; import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; export interface ExpandablePanelPanelProps { header: { @@ -99,7 +100,12 @@ export const ExpandablePanel: React.FC = ({ () => ( { loadProtectionUpdatesUrl(policy.id); + cy.getByTestSubj('protectionUpdatesSaveButton').should('be.disabled'); 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.intercept('POST', `/api/endpoint/protection_updates_note/${policy.id}`).as('note'); + cy.getByTestSubj('protectionUpdatesSaveButton').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') @@ -98,6 +100,7 @@ describe( cy.getByTestSubj('protectionUpdatesSuccessfulMessage'); cy.getByTestSubj('protection-updates-deployed-version').contains(formattedToday); cy.getByTestSubj('protection-updates-manifest-note').contains(testNote); + cy.getByTestSubj('protectionUpdatesSaveButton').should('be.disabled'); }); }); @@ -131,9 +134,13 @@ describe( 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('protectionUpdatesSaveButton').should('be.disabled'); cy.getByTestSubj('protection-updates-manifest-switch').click(); + cy.intercept('PUT', `/api/fleet/package_policies/${policy.id}`).as('policy_latest'); + + cy.getByTestSubj('protectionUpdatesSaveButton').click(); + cy.wait('@policy_latest').then(({ request, response }) => { expect(request.body.inputs[0].config.policy.value.global_manifest_version).to.equal( 'latest' @@ -142,6 +149,7 @@ describe( }); cy.getByTestSubj('protectionUpdatesSuccessfulMessage'); cy.getByTestSubj('protection-updates-automatic-updates-enabled'); + cy.getByTestSubj('protectionUpdatesSaveButton').should('be.disabled'); }); }); @@ -175,18 +183,23 @@ describe( it('should update note on save', () => { loadProtectionUpdatesUrl(policy.id); + cy.getByTestSubj('protectionUpdatesSaveButton').should('be.disabled'); + cy.getByTestSubj('protection-updates-manifest-note').contains(testNote); cy.getByTestSubj('protection-updates-manifest-note').clear(); cy.getByTestSubj('protection-updates-manifest-note').type(updatedTestNote); - cy.intercept('POST', `/api/endpoint/protection_updates_note/*`).as('note_updated'); - cy.getByTestSubj('policyDetailsSaveButton').click(); + cy.intercept('POST', `/api/endpoint/protection_updates_note/${policy.id}`).as( + 'note_updated' + ); + cy.getByTestSubj('protectionUpdatesSaveButton').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('protectionUpdatesSaveButton').should('be.disabled'); }); }); @@ -238,7 +251,7 @@ describe( 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('protectionUpdatesSaveButton').should('be.disabled'); }); }); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts index 534b681c2aeb46..7d872de49062d7 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts @@ -63,7 +63,7 @@ describe( }); // roles `t1_analyst` and `t2_analyst` are very similar with exception of one page - (['t1_analyst', `t2_analyst`] as ROLE[]).forEach((roleName) => { + [ROLE.t1_analyst, ROLE.t2_analyst].forEach((roleName) => { describe(`for role: ${roleName}`, () => { const deniedPages = allPages.filter((page) => page.id !== 'endpointList'); @@ -350,7 +350,7 @@ describe( }); }); - (['platform_engineer', 'endpoint_policy_manager'] as ROLE[]).forEach((roleName) => { + [ROLE.platform_engineer, ROLE.endpoint_policy_manager].forEach((roleName) => { describe(`for role: ${roleName}`, () => { const artifactPagesFullAccess = [ pageById.trustedApps, diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/essentials_with_endpoint.roles.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/essentials_with_endpoint.roles.cy.ts index 6cf3ab727980a4..dec6018bddc3cd 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/essentials_with_endpoint.roles.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/essentials_with_endpoint.roles.cy.ts @@ -55,7 +55,7 @@ describe( }); // roles `t1_analyst` and `t2_analyst` are the same as far as endpoint access - (['t1_analyst', `t2_analyst`] as ROLE[]).forEach((roleName) => { + [ROLE.t1_analyst, ROLE.t2_analyst].forEach((roleName) => { describe(`for role: ${roleName}`, () => { const deniedPages = allPages.filter((page) => page.id !== 'endpointList'); @@ -237,9 +237,11 @@ describe( }); // Endpoint Operations Manager, Endpoint Policy Manager and Platform Engineer currently have the same level of access - ( - ['platform_engineer', `endpoint_operations_analyst`, 'endpoint_policy_manager'] as ROLE[] - ).forEach((roleName) => { + [ + ROLE.platform_engineer, + ROLE.endpoint_operations_analyst, + ROLE.endpoint_policy_manager, + ].forEach((roleName) => { describe(`for role: ${roleName}`, () => { const artifactPagesFullAccess = [ pageById.trustedApps, diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts index 8ac78b508d084b..77987b5fd76ed7 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts @@ -94,7 +94,6 @@ const sendApiLoginRequest = ( const basicProvider = loginState.body.selector.providers.find( (provider) => provider.type === 'basic' ); - return request({ url: loginUrl, method: 'POST', diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/components/protection_updates_bottom_bar.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/components/protection_updates_bottom_bar.tsx new file mode 100644 index 00000000000000..da9ec04799d6f0 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/components/protection_updates_bottom_bar.tsx @@ -0,0 +1,94 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButton, + EuiButtonEmpty, + EuiFlexGroup, + EuiFlexItem, + EuiPageTemplate, +} from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import React, { useEffect, useMemo, useState } from 'react'; +import { useLocation } from 'react-router-dom'; +import type { ApplicationStart } from '@kbn/core-application-browser'; +import { useNavigateToAppEventHandler } from '../../../../../../common/hooks/endpoint/use_navigate_to_app_event_handler'; +import { APP_UI_ID } from '../../../../../../../common'; +import { getPoliciesPath } from '../../../../../common/routing'; +import type { PolicyDetailsRouteState } from '../../../../../../../common/endpoint/types'; + +interface ProtectionUpdatesBottomBarProps { + saveButtonDisabled: boolean; + isUpdating: boolean; + onSave: () => void; +} + +export const ProtectionUpdatesBottomBar = React.memo( + ({ isUpdating, onSave, saveButtonDisabled }) => { + const { state: locationRouteState } = useLocation(); + const [routeState, setRouteState] = useState(); + const routingOnCancelNavigateTo = routeState?.onCancelNavigateTo; + + useEffect(() => { + if (!routeState && locationRouteState) { + setRouteState(locationRouteState); + } + }, [locationRouteState, routeState]); + + const navigateToAppArguments = useMemo((): Parameters => { + if (routingOnCancelNavigateTo) { + return routingOnCancelNavigateTo; + } + + return [ + APP_UI_ID, + { + path: getPoliciesPath(), + }, + ]; + }, [routingOnCancelNavigateTo]); + + const handleCancelOnClick = useNavigateToAppEventHandler(...navigateToAppArguments); + + return ( + + + + + + + + + + + + + + + ); + } +); + +ProtectionUpdatesBottomBar.displayName = 'ProtectionUpdatesBottomBar'; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/hooks/use_post_protection_updates_note.ts b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/hooks/use_post_protection_updates_note.ts index 16b6ee66f07ca0..abe21b420dc832 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/hooks/use_post_protection_updates_note.ts +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/hooks/use_post_protection_updates_note.ts @@ -32,7 +32,7 @@ export const useCreateProtectionUpdatesNote = ({ >( (payload) => http.post( - resolvePathVariables(PROTECTION_UPDATES_NOTE_ROUTE, { policy_id: packagePolicyId }), + resolvePathVariables(PROTECTION_UPDATES_NOTE_ROUTE, { package_policy_id: packagePolicyId }), { version: '2023-10-31', body: JSON.stringify(payload), diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx index eaac2595c931b0..54445f6ff5fdd7 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/protection_updates/protection_updates_layout.tsx @@ -7,7 +7,6 @@ import type { EuiSwitchEvent } from '@elastic/eui'; import { - EuiButton, EuiCallOut, EuiDatePicker, EuiFlexGroup, @@ -30,6 +29,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import type { Moment } from 'moment'; import moment from 'moment'; import { cloneDeep } from 'lodash'; +import { ProtectionUpdatesBottomBar } from './components/protection_updates_bottom_bar'; import { useCreateProtectionUpdatesNote } from './hooks/use_post_protection_updates_note'; import { useGetProtectionUpdatesNote } from './hooks/use_get_protection_updates_note'; import { useUserPrivileges } from '../../../../../common/components/user_privileges'; @@ -95,70 +95,80 @@ export const ProtectionUpdatesLayout = React.memo( ? AUTOMATIC_UPDATES_CHECKBOX_LABEL : AUTOMATIC_UPDATES_OFF_CHECKBOX_LABEL; - const onSave = useCallback( - (version: string) => { - const update = cloneDeep(policy); - update.inputs[0].config.policy.value.global_manifest_version = version; - sendPolicyUpdate({ policy: update }) - .then(({ item: policyItem }) => { - toasts.addSuccess({ - 'data-test-subj': 'protectionUpdatesSuccessfulMessage', - title: i18n.translate( - 'xpack.securitySolution.endpoint.protectionUpdates.updateSuccessTitle', - { - defaultMessage: 'Success!', - } - ), - text: i18n.translate( - 'xpack.securitySolution.endpoint.protectionUpdates.updateSuccessMessage', - { - defaultMessage: 'Manifest updates successfully saved', - } - ), - }); + const saveButtonEnabled = + (fetchedNote ? note !== fetchedNote.note : note !== '') || + manifestVersion !== deployedVersion; - // Since the 'policyItem' is stored in a store and fetched as a result of an action on urlChange, we still need to dispatch an action even though Redux was removed from this component. - dispatch({ - type: 'serverReturnedPolicyDetailsData', - payload: { - policyItem, - }, - }); - }) - .catch((err) => { - toasts.addDanger({ - 'data-test-subj': 'protectionUpdatesFailureMessage', - title: i18n.translate( - 'xpack.securitySolution.endpoint.protectionUpdates.updateErrorTitle', - { - defaultMessage: 'Failed!', - } - ), - text: err.message, - }); + const onSave = useCallback(() => { + const update = cloneDeep(policy); + update.inputs[0].config.policy.value.global_manifest_version = manifestVersion; + sendPolicyUpdate({ policy: update }) + .then(({ item: policyItem }) => { + toasts.addSuccess({ + 'data-test-subj': 'protectionUpdatesSuccessfulMessage', + title: i18n.translate( + 'xpack.securitySolution.endpoint.protectionUpdates.updateSuccessTitle', + { + defaultMessage: 'Success!', + } + ), + text: i18n.translate( + 'xpack.securitySolution.endpoint.protectionUpdates.updateSuccessMessage', + { + defaultMessage: 'Manifest updates successfully saved', + } + ), }); - if ((!fetchedNote && note !== '') || (fetchedNote && note !== fetchedNote.note)) { - createNote( - { note }, - { - onError: (error) => { - toasts.addDanger({ - 'data-test-subj': 'protectionUpdatesNoteUpdateFailureMessage', - title: i18n.translate( - 'xpack.securitySolution.endpoint.protectionUpdates.noteUpdateErrorTitle', - { - defaultMessage: 'Note update failed!', - } - ), - text: error.body.message, - }); - }, - } - ); - } - }, - [policy, sendPolicyUpdate, fetchedNote, note, toasts, dispatch, createNote] - ); + + // Since the 'policyItem' is stored in a store and fetched as a result of an action on urlChange, we still need to dispatch an action even though Redux was removed from this component. + dispatch({ + type: 'serverReturnedPolicyDetailsData', + payload: { + policyItem, + }, + }); + }) + .catch((err) => { + toasts.addDanger({ + 'data-test-subj': 'protectionUpdatesFailureMessage', + title: i18n.translate( + 'xpack.securitySolution.endpoint.protectionUpdates.updateErrorTitle', + { + defaultMessage: 'Failed!', + } + ), + text: err.message, + }); + }); + if ((!fetchedNote && note !== '') || (fetchedNote && note !== fetchedNote.note)) { + createNote( + { note }, + { + onError: (error) => { + toasts.addDanger({ + 'data-test-subj': 'protectionUpdatesNoteUpdateFailureMessage', + title: i18n.translate( + 'xpack.securitySolution.endpoint.protectionUpdates.noteUpdateErrorTitle', + { + defaultMessage: 'Note update failed!', + } + ), + text: error.body.message, + }); + }, + } + ); + } + }, [ + policy, + manifestVersion, + sendPolicyUpdate, + fetchedNote, + note, + toasts, + dispatch, + createNote, + ]); const toggleAutomaticUpdates = useCallback( (event: EuiSwitchEvent) => { @@ -170,15 +180,11 @@ export const ProtectionUpdatesLayout = React.memo( if (selectedDate !== today) { setSelectedDate(today); } - // We need to save the policy without the user clicking save button - if (deployedVersion !== 'latest') { - onSave('latest'); - } } else { setManifestVersion(selectedDate.format(internalDateFormat)); } }, - [automaticUpdatesEnabled, deployedVersion, onSave, selectedDate, today] + [automaticUpdatesEnabled, selectedDate, today] ); const renderVersionToDeployPicker = () => { @@ -333,7 +339,7 @@ export const ProtectionUpdatesLayout = React.memo( value={note} disabled={getNoteInProgress || createNoteInProgress} onChange={(e) => setNote(e.target.value)} - fullWidth={true} + fullWidth rows={3} placeholder={i18n.translate( 'xpack.securitySolution.endpoint.protectionUpdates.note.placeholder', @@ -346,75 +352,70 @@ export const ProtectionUpdatesLayout = React.memo( ) : ( {note} )} - - - onSave(manifestVersion)} - isLoading={isUpdating} - > - - ); }; return ( - - + - - -
- {i18n.translate('xpack.securitySolution.endpoint.protectionUpdates.manifestName', { - defaultMessage: 'Manifest name', - })} -
-
- - {'artifactsec'} - -
- - {canWritePolicyManagement ? ( - - ) : ( - - {viewModeSwitchLabel} + + + +
+ {i18n.translate( + 'xpack.securitySolution.endpoint.protectionUpdates.manifestName', + { + defaultMessage: 'Manifest name', + } + )} +
+
+ + {'artifactsec'} - )} -
-
+
+ + {canWritePolicyManagement ? ( + + ) : ( + + {viewModeSwitchLabel} + + )} + +
- - -
- {renderManifestOutdatedCallOut()} - {renderContent()} -
- + + +
+ {renderManifestOutdatedCallOut()} + {renderContent()} +
+ + + ); } ); diff --git a/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts b/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts index d411cdf8e8abdc..dad6bd5b9de292 100644 --- a/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts +++ b/x-pack/plugins/security_solution/scripts/run_cypress/parallel.ts @@ -263,7 +263,17 @@ ${JSON.stringify(cypressConfigFile, null, 2)} Cypress FTR setup for file: ${filePath}: ---------------------------------------------- -${JSON.stringify(config.getAll(), null, 2)} +${JSON.stringify( + config.getAll(), + (key, v) => { + if (Array.isArray(v) && v.length > 32) { + return v.slice(0, 32).concat('... trimmed after 32 items.'); + } else { + return v; + } + }, + 2 +)} ---------------------------------------------- `); diff --git a/x-pack/plugins/security_solution_ess/public/common/__mocks__/services.mock.ts b/x-pack/plugins/security_solution_ess/public/common/__mocks__/services.mock.ts index 9e9909b45894b2..d75069dfb2bc07 100644 --- a/x-pack/plugins/security_solution_ess/public/common/__mocks__/services.mock.ts +++ b/x-pack/plugins/security_solution_ess/public/common/__mocks__/services.mock.ts @@ -7,9 +7,11 @@ import { coreMock } from '@kbn/core/public/mocks'; import { securitySolutionMock } from '@kbn/security-solution-plugin/public/mocks'; +import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; import type { Services } from '../services'; export const mockServices: Services = { ...coreMock.createStart(), securitySolution: securitySolutionMock.createStart(), + licensing: licensingMock.createStart(), }; diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/constants.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/constants.ts index 520cbdd192ae43..565b2d2c97c80b 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/links/constants.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/constants.ts @@ -51,7 +51,7 @@ export enum ExternalPageName { mlNodes = 'ml:nodes', mlFileUpload = 'ml:fileUpload', mlIndexDataVisualizer = 'ml:indexDataVisualizer', - mlDataComparison = 'ml:dataComparison', + mlDataDrift = 'ml:dataDrift', mlExplainLogRateSpikes = 'ml:logRateAnalysis', mlLogPatternAnalysis = 'ml:logPatternAnalysis', mlChangePointDetections = 'ml:changePointDetections', diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/ml_links.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/ml_links.ts index 32c75870976163..34a5c8530fb252 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/ml_links.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/ml_links.ts @@ -81,7 +81,7 @@ export const mlNavCategories: ProjectLinkCategory[] = [ linkIds: [ ExternalPageName.mlFileUpload, ExternalPageName.mlIndexDataVisualizer, - ExternalPageName.mlDataComparison, + ExternalPageName.mlDataDrift, ], }, { @@ -176,10 +176,10 @@ export const mlNavLinks: ProjectNavigationLink[] = [ description: i18n.INDEX_DATA_VISUALIZER_DESC, }, { - id: ExternalPageName.mlDataComparison, - title: i18n.DATA_COMPARISON_TITLE, + id: ExternalPageName.mlDataDrift, + title: i18n.DATA_DRIFT_TITLE, landingIcon: IconRapidBarGraphLazy, - description: i18n.DATA_COMPARISON_DESC, + description: i18n.DATA_DRIFT_TITLE, }, { id: ExternalPageName.mlExplainLogRateSpikes, diff --git a/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/ml_translations.ts b/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/ml_translations.ts index 36a28d561bda50..18baed686b5b20 100644 --- a/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/ml_translations.ts +++ b/x-pack/plugins/security_solution_serverless/public/navigation/links/sections/ml_translations.ts @@ -213,16 +213,16 @@ export const INDEX_DATA_VISUALIZER_DESC = i18n.translate( defaultMessage: 'Data view data visualizer page', } ); -export const DATA_COMPARISON_TITLE = i18n.translate( - 'xpack.securitySolutionServerless.navLinks.ml.datComparison.title', +export const DATA_DRIFT_TITLE = i18n.translate( + 'xpack.securitySolutionServerless.navLinks.ml.dataDrift.title', { - defaultMessage: 'Data comparison', + defaultMessage: 'Data drift', } ); export const DATA_COMPARISON_DESC = i18n.translate( - 'xpack.securitySolutionServerless.navLinks.ml.datComparison.desc', + 'xpack.securitySolutionServerless.navLinks.ml.dataDrift.desc', { - defaultMessage: 'Data comparison page', + defaultMessage: 'Data drift page', } ); export const LOG_RATE_ANALYSIS_TITLE = i18n.translate( diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/hooks/use_product_type_by_pli.ts b/x-pack/plugins/security_solution_serverless/public/upselling/hooks/use_product_type_by_pli.ts index dc5d7debb2954a..7704a7059cb242 100644 --- a/x-pack/plugins/security_solution_serverless/public/upselling/hooks/use_product_type_by_pli.ts +++ b/x-pack/plugins/security_solution_serverless/public/upselling/hooks/use_product_type_by_pli.ts @@ -5,10 +5,10 @@ * 2.0. */ -import type { AppFeatureKey } from '@kbn/security-solution-plugin/common'; +import type { AppFeatureKeyType } from '@kbn/security-solution-features'; import { PLI_APP_FEATURES } from '../../../common/pli/pli_config'; -export const getProductTypeByPLI = (requiredPLI: AppFeatureKey): string | null => { +export const getProductTypeByPLI = (requiredPLI: AppFeatureKeyType): string | null => { if (PLI_APP_FEATURES.security.essentials.includes(requiredPLI)) { return 'Security Essentials'; } diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/pages/osquery_automated_response_actions.tsx b/x-pack/plugins/security_solution_serverless/public/upselling/pages/osquery_automated_response_actions.tsx index 2168390eb31a24..3097d41819058d 100644 --- a/x-pack/plugins/security_solution_serverless/public/upselling/pages/osquery_automated_response_actions.tsx +++ b/x-pack/plugins/security_solution_serverless/public/upselling/pages/osquery_automated_response_actions.tsx @@ -8,11 +8,11 @@ import { EuiEmptyPrompt, EuiIcon } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; -import type { AppFeatureKey } from '@kbn/security-solution-plugin/common'; +import type { AppFeatureKeyType } from '@kbn/security-solution-features'; import { getProductTypeByPLI } from '../hooks/use_product_type_by_pli'; -const OsqueryResponseActionsUpsellingSection: React.FC<{ requiredPLI: AppFeatureKey }> = React.memo( - ({ requiredPLI }) => { +const OsqueryResponseActionsUpsellingSection: React.FC<{ requiredPLI: AppFeatureKeyType }> = + React.memo(({ requiredPLI }) => { const productTypeRequired = getProductTypeByPLI(requiredPLI); return ( @@ -38,8 +38,7 @@ const OsqueryResponseActionsUpsellingSection: React.FC<{ requiredPLI: AppFeature } /> ); - } -); + }); OsqueryResponseActionsUpsellingSection.displayName = 'OsqueryResponseActionsUpsellingSection'; diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/pages/threat_intelligence_paywall.tsx b/x-pack/plugins/security_solution_serverless/public/upselling/pages/threat_intelligence_paywall.tsx index 984b4ac74ca791..b2b3c11198d1fb 100644 --- a/x-pack/plugins/security_solution_serverless/public/upselling/pages/threat_intelligence_paywall.tsx +++ b/x-pack/plugins/security_solution_serverless/public/upselling/pages/threat_intelligence_paywall.tsx @@ -8,11 +8,11 @@ import React from 'react'; import { EuiEmptyPrompt, EuiIcon } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { AppFeatureKey } from '@kbn/security-solution-plugin/common'; +import type { AppFeatureKeyType } from '@kbn/security-solution-features'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { getProductTypeByPLI } from '../hooks/use_product_type_by_pli'; -const ThreatIntelligencePaywall: React.FC<{ requiredPLI: AppFeatureKey }> = React.memo( +const ThreatIntelligencePaywall: React.FC<{ requiredPLI: AppFeatureKeyType }> = React.memo( function PaywallComponent({ requiredPLI }) { const productTypeRequired = getProductTypeByPLI(requiredPLI); diff --git a/x-pack/plugins/serverless_search/public/layout/nav.tsx b/x-pack/plugins/serverless_search/public/layout/nav.tsx index 10d963100f89c7..047b490fcb137e 100644 --- a/x-pack/plugins/serverless_search/public/layout/nav.tsx +++ b/x-pack/plugins/serverless_search/public/layout/nav.tsx @@ -16,14 +16,6 @@ import { i18n } from '@kbn/i18n'; import type { ServerlessPluginStart } from '@kbn/serverless/public'; import type { CloudStart } from '@kbn/cloud-plugin/public'; -// Hiding this until page is in a better space -const _connectorItem = { - link: 'serverlessConnectors', - title: i18n.translate('xpack.serverlessSearch.nav.connectors', { - defaultMessage: 'Connectors', - }), -}; - const navigationTree: NavigationTreeDefinition = { body: [ { type: 'recentlyAccessed' }, diff --git a/x-pack/plugins/task_manager/server/task_validator.test.ts b/x-pack/plugins/task_manager/server/task_validator.test.ts index 52822adf6f49fe..08c18591e468e0 100644 --- a/x-pack/plugins/task_manager/server/task_validator.test.ts +++ b/x-pack/plugins/task_manager/server/task_validator.test.ts @@ -64,9 +64,7 @@ describe('TaskValidator', () => { expect(result).toEqual(task); }); - // TODO: Remove skip once all task types have defined their state schema. - // https://github.com/elastic/kibana/issues/159347 - it.skip(`should fail to validate the state schema when the task type doesn't have stateSchemaByVersion defined`, () => { + it(`should fail to validate the state schema when the task type doesn't have stateSchemaByVersion defined`, () => { const definitions = new TaskTypeDictionary(mockLogger()); definitions.registerTaskDefinitions({ foo: fooTaskDefinition, @@ -322,9 +320,7 @@ describe('TaskValidator', () => { expect(result).toEqual(task); }); - // TODO: Remove skip once all task types have defined their state schema. - // https://github.com/elastic/kibana/issues/159347 - it.skip(`should fail to validate the state schema when the task type doesn't have stateSchemaByVersion defined`, () => { + it(`should fail to validate the state schema when the task type doesn't have stateSchemaByVersion defined`, () => { const definitions = new TaskTypeDictionary(mockLogger()); definitions.registerTaskDefinitions({ foo: fooTaskDefinition, diff --git a/x-pack/plugins/task_manager/server/task_validator.ts b/x-pack/plugins/task_manager/server/task_validator.ts index 61d9a903dd5b4c..900af04cd1207d 100644 --- a/x-pack/plugins/task_manager/server/task_validator.ts +++ b/x-pack/plugins/task_manager/server/task_validator.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { max, memoize } from 'lodash'; +import { max, memoize, isEmpty } from 'lodash'; import type { Logger } from '@kbn/core/server'; import type { ObjectType } from '@kbn/config-schema'; import { TaskTypeDictionary } from './task_type_dictionary'; @@ -64,14 +64,13 @@ export class TaskValidator { const taskTypeDef = this.definitions.get(task.taskType); const latestStateSchema = this.cachedGetLatestStateSchema(taskTypeDef); - // TODO: Remove once all task types have defined their state schema. - // https://github.com/elastic/kibana/issues/159347 - // Otherwise, failures on read / write would occur. (don't forget to unskip test) - if (!latestStateSchema) { + let state = task.state; + + // Skip validating tasks that don't use state + if (!latestStateSchema && isEmpty(state)) { return task; } - let state = task.state; try { state = this.getValidatedStateSchema( this.migrateTaskState(task.state, task.stateVersion, taskTypeDef, latestStateSchema), @@ -111,10 +110,8 @@ export class TaskValidator { const taskTypeDef = this.definitions.get(task.taskType); const latestStateSchema = this.cachedGetLatestStateSchema(taskTypeDef); - // TODO: Remove once all task types have defined their state schema. - // https://github.com/elastic/kibana/issues/159347 - // Otherwise, failures on read / write would occur. (don't forget to unskip test) - if (!latestStateSchema) { + // Skip validating tasks that don't use state + if (!latestStateSchema && isEmpty(task.state)) { return task; } diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx index e9326ae1950151..246460d11d3eee 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx @@ -35,7 +35,6 @@ import { import { useStorage } from '@kbn/ml-local-storage'; import { useUrlState } from '@kbn/ml-url-state'; -import { useEnabledFeatures } from '../../../../serverless_context'; import { PivotAggDict } from '../../../../../../common/types/pivot_aggs'; import { PivotGroupByDict } from '../../../../../../common/types/pivot_group_by'; import { TRANSFORM_FUNCTION } from '../../../../../../common/constants'; @@ -113,7 +112,6 @@ export const StepDefineForm: FC = React.memo((props) => { ); const toastNotifications = useToastNotifications(); const stepDefineForm = useStepDefineForm(props); - const { showNodeInfo } = useEnabledFeatures(); const { advancedEditorConfig } = stepDefineForm.advancedPivotEditor.state; const { @@ -355,7 +353,6 @@ export const StepDefineForm: FC = React.memo((props) => { query={undefined} disabled={false} timefilter={timefilter} - hideFrozenDataTierChoice={!showNodeInfo} />
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index bafc66899d8ff4..0818edbb72eee5 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -3508,10 +3508,7 @@ "home.sampleData.logsSpecDescription": "Exemple de données, de visualisations et de tableaux de bord pour le monitoring des logs Internet.", "home.sampleData.logsSpecTitle": "Exemple de logs Internet", "home.sampleData.logsTsdbSpec.bytesDistributionTitle": "[Logs TSDB] Distribution des octets", - "home.sampleData.logsTsdbSpec.goalsTitle": "[Logs TSDB] Objectifs", "home.sampleData.logsTsdbSpec.heatmapTitle": "[Logs TSDB] Carte thermique de destination unique", - "home.sampleData.logsTsdbSpec.hostVisitsBytesTableTitle": "[Logs TSDB] Tableau des hôtes, visites et octets", - "home.sampleData.logsTsdbSpec.responseCodesOverTimeTitle": "[Logs TSDB] Codes de réponse sur la durée + annotations", "home.sampleData.logsTsdbSpec.sourceAndDestinationSankeyChartTitle": "[Logs TSDB] Diagramme de Sankey de système d'exploitation source et destination", "home.sampleData.logsTsdbSpec.visitorsMapTitle": "[Logs TSDB] Carte des visiteurs", "home.sampleData.logsTsdbSpec.webTrafficDescription": "Analyser des données de log factices relatives au trafic Internet du site d'Elastic", @@ -11626,7 +11623,6 @@ "xpack.dataVisualizer.nameCollisionMsg": "\"{name}\" existe déjà, veuillez fournir un nom unique", "xpack.dataVisualizer.randomSamplerSettingsPopUp.probabilityLabel": "Probabilité utilisée : {samplingProbability} %", "xpack.dataVisualizer.searchPanel.ofFieldsTotal": "sur un total de {totalCount}", - "xpack.dataVisualizer.searchPanel.totalDocCountLabel": "Total des documents : {prepend}{strongTotalCount}", "xpack.dataVisualizer.searchPanel.totalDocCountNumber": "{totalCount, plural, one {#} many {#} other {#}}", "xpack.dataVisualizer.addCombinedFieldsLabel": "Ajouter un champ combiné", "xpack.dataVisualizer.chrome.help.appName": "Data Visualizer (Visualiseur de données)", @@ -38486,7 +38482,6 @@ "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.editButtonTooltip": "Modifier", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalIconAriaLabel": "Au-dessous de l'intervalle minimal configuré", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalTooltipTitle": "Au-dessous de l'intervalle minimal configuré", - "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastExecutionDateTitle": "Heure de début de la dernière exécution.", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastResponseTitle": "Dernière réponse", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.nameTitle": "Nom", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.notifyTitle": "Notifier", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index c89022189f90d2..18016ac4caa29d 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -3523,10 +3523,7 @@ "home.sampleData.logsSpecDescription": "Web ログを監視するサンプルデータ、ビジュアライゼーション、ダッシュボードです。", "home.sampleData.logsSpecTitle": "サンプル Web ログ", "home.sampleData.logsTsdbSpec.bytesDistributionTitle": "[Logs TSDB] バイト分布", - "home.sampleData.logsTsdbSpec.goalsTitle": "[Logs TSDB] 目標", "home.sampleData.logsTsdbSpec.heatmapTitle": "[Logs TSDB] 一意のターゲットヒートマップ", - "home.sampleData.logsTsdbSpec.hostVisitsBytesTableTitle": "[Logs TSDB] ホスト、訪問数、バイト表", - "home.sampleData.logsTsdbSpec.responseCodesOverTimeTitle": "[Logs TSDB] 一定期間の応答コードと注釈", "home.sampleData.logsTsdbSpec.sourceAndDestinationSankeyChartTitle": "[Logs TSDB] コンピューターOSとターゲットサンキーダイアグラム", "home.sampleData.logsTsdbSpec.visitorsMapTitle": "[Logs TSDB] 訪問者マップ", "home.sampleData.logsTsdbSpec.webTrafficDescription": "Elastic Web サイトのサンプル Webトラフィックログデータを分析します", @@ -11640,7 +11637,6 @@ "xpack.dataVisualizer.nameCollisionMsg": "「{name}」はすでに存在します。一意の名前を入力してください。", "xpack.dataVisualizer.randomSamplerSettingsPopUp.probabilityLabel": "使用された確率:{samplingProbability}%", "xpack.dataVisualizer.searchPanel.ofFieldsTotal": "合計{totalCount}中", - "xpack.dataVisualizer.searchPanel.totalDocCountLabel": "合計ドキュメント数:{prepend}{strongTotalCount}", "xpack.dataVisualizer.searchPanel.totalDocCountNumber": "{totalCount, plural, other {#}}", "xpack.dataVisualizer.addCombinedFieldsLabel": "結合されたフィールドを追加", "xpack.dataVisualizer.chrome.help.appName": "データビジュアライザー", @@ -38477,7 +38473,6 @@ "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.editButtonTooltip": "編集", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalIconAriaLabel": "構成された最小間隔未満", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalTooltipTitle": "構成された最小間隔未満", - "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastExecutionDateTitle": "前回の実行の開始時間。", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastResponseTitle": "前回の応答", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.nameTitle": "名前", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.notifyTitle": "通知", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 67de77aba8658a..178fa11a295833 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -3522,10 +3522,7 @@ "home.sampleData.logsSpecDescription": "用于监测 Web 日志的样例数据、可视化和仪表板。", "home.sampleData.logsSpecTitle": "样例 Web 日志", "home.sampleData.logsTsdbSpec.bytesDistributionTitle": "[日志 TSDB] 字节分布", - "home.sampleData.logsTsdbSpec.goalsTitle": "[日志 TSDB] 目标", "home.sampleData.logsTsdbSpec.heatmapTitle": "[日志 TSDB] 唯一目标热图", - "home.sampleData.logsTsdbSpec.hostVisitsBytesTableTitle": "[日志 TSDB] 主机、访问和字节表", - "home.sampleData.logsTsdbSpec.responseCodesOverTimeTitle": "[日志 TSDB] 时移响应代码 + 注释", "home.sampleData.logsTsdbSpec.sourceAndDestinationSankeyChartTitle": "[日志 TSDB] 机器 OS 和目标 Sankey 图", "home.sampleData.logsTsdbSpec.visitorsMapTitle": "[日志 TSDB] 访客地图", "home.sampleData.logsTsdbSpec.webTrafficDescription": "分析 Elastic 网站的模拟 Web 流量日志数据", @@ -11640,7 +11637,6 @@ "xpack.dataVisualizer.nameCollisionMsg": "“{name}”已存在,请提供唯一名称", "xpack.dataVisualizer.randomSamplerSettingsPopUp.probabilityLabel": "使用的概率:{samplingProbability}%", "xpack.dataVisualizer.searchPanel.ofFieldsTotal": ",共 {totalCount} 个", - "xpack.dataVisualizer.searchPanel.totalDocCountLabel": "总文档数:{prepend}{strongTotalCount}", "xpack.dataVisualizer.searchPanel.totalDocCountNumber": "{totalCount, plural, other {#}}", "xpack.dataVisualizer.addCombinedFieldsLabel": "添加组合字段", "xpack.dataVisualizer.chrome.help.appName": "数据可视化工具", @@ -38471,7 +38467,6 @@ "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.editButtonTooltip": "编辑", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalIconAriaLabel": "低于配置的最小时间间隔", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.intervalTooltipTitle": "低于配置的最小时间间隔", - "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastExecutionDateTitle": "上次运行的开始时间。", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastResponseTitle": "上次响应", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.nameTitle": "名称", "xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.notifyTitle": "通知", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_auto_refresh.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_auto_refresh.tsx index eea8d8e5f1bbe2..42c59667e0e393 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_auto_refresh.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_auto_refresh.tsx @@ -29,7 +29,7 @@ const getLastUpdateText = (lastUpdate: string) => { { defaultMessage: 'Updated {lastUpdateText}', values: { - lastUpdateText: moment(lastUpdate).fromNow(), + lastUpdateText: moment(lastUpdate).locale(i18n.getLocale()).fromNow(), }, } ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx index 34c1f83878ef6f..3d929cf7bb5b86 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx @@ -413,14 +413,17 @@ export const RulesListTable = (props: RulesListTableProps) => { - Last run{' '} + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastRunTitle', + { defaultMessage: 'Last run' } + )} @@ -569,14 +572,17 @@ export const RulesListTable = (props: RulesListTableProps) => { - Duration{' '} + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.durationTitle', + { defaultMessage: 'Duration' } + )} @@ -639,14 +645,17 @@ export const RulesListTable = (props: RulesListTableProps) => { - Success ratio{' '} + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.successRatioTitle', + { defaultMessage: 'Success ratio' } + )} diff --git a/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts b/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts index 2633423b5855e8..0c1c90751b55dc 100644 --- a/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts +++ b/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts @@ -13,6 +13,7 @@ import { getCommonRequestHeader } from '../../../../functional/services/ml/commo export default ({ getService }: FtrProviderContext) => { const supertest = getService('supertestWithoutAuth'); const ml = getService('ml'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); describe('GET trained_models', () => { let testModelIds: string[] = []; @@ -23,6 +24,11 @@ export default ({ getService }: FtrProviderContext) => { testModelIds = await ml.api.createTestTrainedModels('regression', 5, true); await ml.api.createModelAlias('dfa_regression_model_n_0', 'dfa_regression_model_alias'); await ml.api.createIngestPipeline('dfa_regression_model_alias'); + + // Creating an indices that are tied to modelId: dfa_regression_model_n_1 + await ml.api.createIndex(`user-index_dfa_regression_model_n_1`, undefined, { + index: { default_pipeline: `pipeline_dfa_regression_model_n_1` }, + }); }); after(async () => { @@ -34,6 +40,8 @@ export default ({ getService }: FtrProviderContext) => { ); await ml.api.cleanMlIndices(); await ml.testResources.cleanMLSavedObjects(); + + await esDeleteAllIndices('user-index_dfa*'); }); it('returns all trained models with associated pipelines including aliases', async () => { @@ -47,12 +55,13 @@ export default ({ getService }: FtrProviderContext) => { expect(body.length).to.eql(6); const sampleModel = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); + expect(Object.keys(sampleModel.pipelines).length).to.eql(2); }); it('returns models without pipeline in case user does not have required permission', async () => { const { body, status } = await supertest - .get(`/internal/ml/trained_models?with_pipelines=true`) + .get(`/internal/ml/trained_models?with_pipelines=true&with_indices=true`) .auth(USER.ML_VIEWER, ml.securityCommon.getPasswordForUser(USER.ML_VIEWER)) .set(getCommonRequestHeader('1')); ml.api.assertResponseStatusCode(200, status, body); @@ -60,6 +69,7 @@ export default ({ getService }: FtrProviderContext) => { // Created models + system model expect(body.length).to.eql(6); const sampleModel = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); + expect(sampleModel.pipelines).to.eql(undefined); }); @@ -71,7 +81,61 @@ export default ({ getService }: FtrProviderContext) => { ml.api.assertResponseStatusCode(200, status, body); expect(body.length).to.eql(1); - expect(body[0].model_id).to.eql('dfa_regression_model_n_1'); + + const sampleModel = body[0]; + expect(sampleModel.model_id).to.eql('dfa_regression_model_n_1'); + expect(sampleModel.pipelines).to.eql(undefined); + expect(sampleModel.indices).to.eql(undefined); + }); + + it('returns trained model by id with_pipelines=true,with_indices=false', async () => { + const { body, status } = await supertest + .get( + `/internal/ml/trained_models/dfa_regression_model_n_1?with_pipelines=true&with_indices=false` + ) + .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) + .set(getCommonRequestHeader('1')); + ml.api.assertResponseStatusCode(200, status, body); + + expect(body.length).to.eql(1); + const sampleModel = body[0]; + + expect(sampleModel.model_id).to.eql('dfa_regression_model_n_1'); + expect(Object.keys(sampleModel.pipelines).length).to.eql( + 1, + `Expected number of pipelines for dfa_regression_model_n_1 to be ${1} (got ${ + Object.keys(sampleModel.pipelines).length + })` + ); + expect(sampleModel.indices).to.eql( + undefined, + `Expected indices for dfa_regression_model_n_1 to be undefined (got ${sampleModel.indices})` + ); + }); + + it('returns trained model by id with_pipelines=true,with_indices=true', async () => { + const { body, status } = await supertest + .get( + `/internal/ml/trained_models/dfa_regression_model_n_1?with_pipelines=true&with_indices=true` + ) + .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) + .set(getCommonRequestHeader('1')); + ml.api.assertResponseStatusCode(200, status, body); + + const sampleModel = body[0]; + expect(sampleModel.model_id).to.eql('dfa_regression_model_n_1'); + expect(Object.keys(sampleModel.pipelines).length).to.eql( + 1, + `Expected number of pipelines for dfa_regression_model_n_1 to be ${1} (got ${ + Object.keys(sampleModel.pipelines).length + })` + ); + expect(sampleModel.indices.length).to.eql( + 1, + `Expected number of indices for dfa_regression_model_n_1 to be ${1} (got ${ + sampleModel.indices.length + })` + ); }); it('returns 404 if requested trained model does not exist', async () => { diff --git a/x-pack/test/functional/apps/canvas/embeddables/lens.ts b/x-pack/test/functional/apps/canvas/embeddables/lens.ts index 1e7557cde4c8c3..774fd79299a36e 100644 --- a/x-pack/test/functional/apps/canvas/embeddables/lens.ts +++ b/x-pack/test/functional/apps/canvas/embeddables/lens.ts @@ -82,7 +82,7 @@ export default function canvasLensTest({ getService, getPageObjects }: FtrProvid const panelHeader = await testSubjects.find('embeddablePanelHeading-'); await dashboardPanelActions.openContextMenu(panelHeader); await dashboardPanelActions.clickEdit(); - await await PageObjects.lens.saveAndReturn(); + await PageObjects.lens.saveAndReturn(); await PageObjects.header.waitUntilLoadingHasFinished(); await testSubjects.exists('xyVisChart'); }); 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 0dc6f366629529..6f6e19bb54ee82 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 @@ -64,7 +64,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // All panels should be editable. This will catch cases where an error does not create an error embeddable. const panelTitles = await PageObjects.dashboard.getPanelTitles(); for (const title of panelTitles) { - await dashboardPanelActions.expectExistsEditPanelAction(title); + await dashboardPanelActions.expectExistsEditPanelAction(title, true); } }); diff --git a/x-pack/test/functional/apps/infra/home_page.ts b/x-pack/test/functional/apps/infra/home_page.ts index d5d2ad2cb8b84b..a6dc2754de3590 100644 --- a/x-pack/test/functional/apps/infra/home_page.ts +++ b/x-pack/test/functional/apps/infra/home_page.ts @@ -30,7 +30,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { return !!currentUrl.match(path); }); - describe('Home page', function () { + // Failing: See https://github.com/elastic/kibana/issues/167071 + describe.skip('Home page', function () { this.tags('includeFirefox'); before(async () => { await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/functional/apps/lens/group3/dashboard_inline_editing.ts b/x-pack/test/functional/apps/lens/group3/dashboard_inline_editing.ts new file mode 100644 index 00000000000000..da5858e0ffc1d6 --- /dev/null +++ b/x-pack/test/functional/apps/lens/group3/dashboard_inline_editing.ts @@ -0,0 +1,208 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects([ + 'dashboard', + 'visualize', + 'lens', + 'timeToVisualize', + 'common', + 'header', + ]); + const find = getService('find'); + const log = getService('log'); + const listingTable = getService('listingTable'); + const dashboardPanelActions = getService('dashboardPanelActions'); + const testSubjects = getService('testSubjects'); + const elasticChart = getService('elasticChart'); + + const createNewLens = async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', + operation: 'average', + field: 'bytes', + }); + + await PageObjects.lens.switchToVisualization('lnsMetric'); + await PageObjects.lens.waitForVisualization('mtrVis'); + }; + + const loadExistingLens = async () => { + await PageObjects.visualize.gotoVisualizationLandingPage(); + await listingTable.searchForItemWithName('lnsXYvis'); + await PageObjects.lens.clickVisualizeListItemTitle('lnsXYvis'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.waitForVisualization('xyVisChart'); + }; + + describe('lens inline editing tests', () => { + it('should allow inline editing of a by value visualization', async () => { + await createNewLens(); + await PageObjects.lens.save('New Lens from Modal', false, false, false, 'new'); + + await PageObjects.dashboard.waitForRenderComplete(); + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.clickInlineEdit(); + + log.debug('Adds a secondary dimension'); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsMetric_secondaryMetricDimensionPanel > lns-empty-dimension', + operation: 'max', + field: 'bytes', + keepOpen: true, + }); + await PageObjects.lens.closeDimensionEditor(); + await testSubjects.click('applyFlyoutButton'); + await PageObjects.dashboard.waitForRenderComplete(); + const data = await PageObjects.lens.getMetricVisualizationData(); + const expectedData = [ + { + title: 'Average of bytes', + subtitle: undefined, + extraText: 'Maximum of bytes 19,986', + value: '5,727.322', + color: 'rgba(245, 247, 250, 1)', + showingTrendline: false, + showingBar: false, + }, + ]; + + log.debug(data); + expect(data).to.eql(expectedData); + + await PageObjects.timeToVisualize.resetNewDashboard(); + }); + + it('should allow inline editing of a by reference visualization', async () => { + await loadExistingLens(); + await PageObjects.lens.save('xyVisChart Copy', true, false, false, 'new'); + + await PageObjects.dashboard.waitForRenderComplete(); + await elasticChart.setNewChartUiDebugFlag(true); + + await dashboardPanelActions.saveToLibrary('My by reference visualization'); + + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.clickInlineEdit(); + + log.debug('Removes breakdown dimension'); + + await PageObjects.lens.removeDimension('lnsXY_splitDimensionPanel'); + + await testSubjects.click('applyFlyoutButton'); + await PageObjects.dashboard.waitForRenderComplete(); + + const data = await PageObjects.lens.getCurrentChartDebugStateForVizType('xyVisChart'); + expect(data?.axes?.y.length).to.eql(1); + await PageObjects.timeToVisualize.resetNewDashboard(); + }); + + it('should reset changes made to the previous state', async () => { + await createNewLens(); + await PageObjects.lens.save('New Lens from Modal', false, false, false, 'new'); + + await PageObjects.dashboard.waitForRenderComplete(); + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.clickInlineEdit(); + + log.debug('Adds a secondary dimension'); + + await PageObjects.lens.configureDimension({ + dimension: 'lnsMetric_secondaryMetricDimensionPanel > lns-empty-dimension', + operation: 'max', + field: 'bytes', + keepOpen: true, + }); + + log.debug('Cancels the changes'); + await PageObjects.lens.closeDimensionEditor(); + await testSubjects.click('cancelFlyoutButton'); + await PageObjects.dashboard.waitForRenderComplete(); + + const data = await PageObjects.lens.getMetricVisualizationData(); + const expectedData = [ + { + title: 'Average of bytes', + subtitle: undefined, + extraText: '', + value: '5,727.322', + color: 'rgba(245, 247, 250, 1)', + showingTrendline: false, + showingBar: false, + }, + ]; + + expect(data).to.eql(expectedData); + await PageObjects.timeToVisualize.resetNewDashboard(); + }); + + it('should allow adding an annotation', async () => { + await loadExistingLens(); + await PageObjects.lens.save('xyVisChart Copy', true, false, false, 'new'); + + await PageObjects.dashboard.waitForRenderComplete(); + await elasticChart.setNewChartUiDebugFlag(true); + + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.clickInlineEdit(); + + log.debug('Adds annotation'); + + await PageObjects.lens.createLayer('annotations'); + + expect((await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`)).length).to.eql(2); + expect( + await ( + await testSubjects.find('lnsXY_xAnnotationsPanel > lns-dimensionTrigger') + ).getVisibleText() + ).to.eql('Event'); + + await testSubjects.click('applyFlyoutButton'); + await PageObjects.dashboard.waitForRenderComplete(); + await testSubjects.existOrFail('xyVisAnnotationIcon'); + await PageObjects.timeToVisualize.resetNewDashboard(); + }); + + it('should allow adding a reference line', async () => { + await loadExistingLens(); + await PageObjects.lens.save('xyVisChart Copy', true, false, false, 'new'); + + await PageObjects.dashboard.waitForRenderComplete(); + await elasticChart.setNewChartUiDebugFlag(true); + + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.clickInlineEdit(); + + log.debug('Adds reference line'); + + await PageObjects.lens.createLayer('referenceLine'); + + await PageObjects.lens.configureDimension({ + dimension: 'lns-layerPanel-1 > lnsXY_yReferenceLineLeftPanel > lns-dimensionTrigger', + operation: 'formula', + formula: `count()`, + keepOpen: true, + }); + + await PageObjects.lens.selectOptionFromComboBox('lns-icon-select', 'bell'); + await PageObjects.lens.closeDimensionEditor(); + await testSubjects.click('applyFlyoutButton'); + await PageObjects.dashboard.waitForRenderComplete(); + + await testSubjects.existOrFail('xyVisAnnotationIcon'); + + await PageObjects.timeToVisualize.resetNewDashboard(); + }); + }); +} diff --git a/x-pack/test/functional/apps/lens/group3/index.ts b/x-pack/test/functional/apps/lens/group3/index.ts index aa2112f248f71b..f82b409b7ba58f 100644 --- a/x-pack/test/functional/apps/lens/group3/index.ts +++ b/x-pack/test/functional/apps/lens/group3/index.ts @@ -76,5 +76,6 @@ export default ({ getService, loadTestFile, getPageObjects }: FtrProviderContext loadTestFile(require.resolve('./runtime_fields')); // 1m loadTestFile(require.resolve('./terms')); // 1m 35s loadTestFile(require.resolve('./epoch_millis')); // 30s + loadTestFile(require.resolve('./dashboard_inline_editing')); }); }; diff --git a/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts b/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts new file mode 100644 index 00000000000000..2eb579c1720d81 --- /dev/null +++ b/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts @@ -0,0 +1,111 @@ +/* + * 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 { FtrProviderContext } from '../../../ftr_provider_context'; +import { farequoteDataViewTestDataWithQuery } from '../../aiops/test_data'; +import { TestData } from '../../aiops/types'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const ml = getService('ml'); + const PageObjects = getPageObjects(['common', 'console', 'header', 'home', 'security']); + const elasticChart = getService('elasticChart'); + const esArchiver = getService('esArchiver'); + + function runTests(testData: TestData) { + it(`${testData.suiteTitle} loads the source data in data drift`, async () => { + await elasticChart.setNewChartUiDebugFlag(true); + + await ml.testExecution.logTestStep( + `${testData.suiteTitle} loads the saved search selection page` + ); + await ml.navigation.navigateToDataDrift(); + + await ml.testExecution.logTestStep( + `${testData.suiteTitle} loads the data drift index or saved search select page` + ); + await ml.jobSourceSelection.selectSourceForDataDrift(testData.sourceIndexOrSavedSearch); + }); + + it(`${testData.suiteTitle} displays index details`, async () => { + await ml.testExecution.logTestStep(`${testData.suiteTitle} displays the time range step`); + await ml.dataDrift.assertTimeRangeSelectorSectionExists(); + + await ml.testExecution.logTestStep(`${testData.suiteTitle} loads data for full time range`); + await ml.dataDrift.clickUseFullDataButton(); + + await ml.dataDrift.setRandomSamplingOption('Reference', 'dvRandomSamplerOptionOff'); + await ml.dataDrift.setRandomSamplingOption('Comparison', 'dvRandomSamplerOptionOff'); + + await PageObjects.header.waitUntilLoadingHasFinished(); + + await ml.testExecution.logTestStep( + `${testData.suiteTitle} displays elements in the doc count panel correctly` + ); + await ml.dataDrift.assertPrimarySearchBarExists(); + await ml.dataDrift.assertReferenceDocCountContent(); + await ml.dataDrift.assertComparisonDocCountContent(); + + await ml.testExecution.logTestStep( + `${testData.suiteTitle} displays elements in the page correctly` + ); + await ml.dataDrift.assertNoWindowParametersEmptyPromptExists(); + + await ml.testExecution.logTestStep('clicks the document count chart to start analysis'); + await ml.dataDrift.clickDocumentCountChart( + 'dataDriftDocCountChart-Reference', + testData.chartClickCoordinates + ); + await ml.dataDrift.runAnalysis(); + }); + } + + describe('data drift', async function () { + for (const testData of [farequoteDataViewTestDataWithQuery]) { + describe(`with '${testData.sourceIndexOrSavedSearch}'`, function () { + before(async () => { + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote'); + + await ml.testResources.createIndexPatternIfNeeded( + testData.sourceIndexOrSavedSearch, + '@timestamp' + ); + + await ml.testResources.setKibanaTimeZoneToUTC(); + + if (testData.dataGenerator === 'kibana_sample_data_logs') { + await PageObjects.security.login('elastic', 'changeme', { + expectSuccess: true, + }); + + await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { + useActualUrl: true, + }); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.home.addSampleDataSet('logs'); + await PageObjects.header.waitUntilLoadingHasFinished(); + } else { + await ml.securityUI.loginAsMlPowerUser(); + } + }); + + after(async () => { + await elasticChart.setNewChartUiDebugFlag(false); + await ml.testResources.deleteIndexPatternByTitle(testData.sourceIndexOrSavedSearch); + await esArchiver.unload('x-pack/test/functional/es_archives/ml/farequote'); + }); + + it(`${testData.suiteTitle} loads the ml page`, async () => { + // Start navigation from the base of the ML app. + await ml.navigation.navigateToMl(); + await elasticChart.setNewChartUiDebugFlag(true); + }); + + runTests(testData); + }); + } + }); +} diff --git a/x-pack/test/functional/apps/ml/data_visualizer/index.ts b/x-pack/test/functional/apps/ml/data_visualizer/index.ts index 13ed76a002ca60..2145267edcc39e 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/index.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/index.ts @@ -40,5 +40,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./index_data_visualizer_actions_panel')); loadTestFile(require.resolve('./index_data_visualizer_data_view_management')); loadTestFile(require.resolve('./file_data_visualizer')); + loadTestFile(require.resolve('./data_drift')); }); } diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 6880a3ab46ff5a..493977e7fc735d 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -1472,7 +1472,8 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont } if (!opts.keepOpen) { - await testSubjects.click('collapseFlyoutButton'); + await this.closeDimensionEditor(); + await testSubjects.click('applyFlyoutButton'); } }, diff --git a/x-pack/test/functional/services/ml/api.ts b/x-pack/test/functional/services/ml/api.ts index 2536ec0bc564af..d8dad778fa03e6 100644 --- a/x-pack/test/functional/services/ml/api.ts +++ b/x-pack/test/functional/services/ml/api.ts @@ -223,7 +223,8 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) { async createIndex( indices: string, - mappings?: Record | estypes.MappingTypeMapping + mappings?: Record | estypes.MappingTypeMapping, + settings?: Record | estypes.IndicesIndexSettings ) { log.debug(`Creating indices: '${indices}'...`); if ((await es.indices.exists({ index: indices, allow_no_indices: false })) === true) { @@ -233,7 +234,10 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) { const body = await es.indices.create({ index: indices, - ...(mappings ? { body: { mappings } } : {}), + body: { + ...(mappings ? { mappings } : {}), + ...(settings ? { settings } : {}), + }, }); expect(body) .to.have.property('acknowledged') @@ -1494,7 +1498,7 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) { }); this.assertResponseStatusCode(200, status, ingestPipeline); - log.debug('> Ingest pipeline crated'); + log.debug('> Ingest pipeline created'); return ingestPipeline; }, @@ -1503,7 +1507,8 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) { const { body, status } = await esSupertest.delete( `/_ingest/pipeline/${usePrefix ? 'pipeline_' : ''}${modelId}` ); - this.assertResponseStatusCode(200, status, body); + // @todo + // this.assertResponseStatusCode(200, status, body); log.debug('> Ingest pipeline deleted'); }, diff --git a/x-pack/test/functional/services/ml/data_drift.ts b/x-pack/test/functional/services/ml/data_drift.ts new file mode 100644 index 00000000000000..2e0eec6f0e10ee --- /dev/null +++ b/x-pack/test/functional/services/ml/data_drift.ts @@ -0,0 +1,214 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export function MachineLearningDataDriftProvider({ + getService, + getPageObjects, +}: FtrProviderContext) { + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const PageObjects = getPageObjects(['discover', 'header']); + const elasticChart = getService('elasticChart'); + const browser = getService('browser'); + + type RandomSamplerOption = + | 'dvRandomSamplerOptionOnAutomatic' + | 'dvRandomSamplerOptionOnManual' + | 'dvRandomSamplerOptionOff'; + + return { + getDataTestSubject(testSubject: string, id?: string) { + if (!id) return testSubject; + return `${testSubject}-${id}`; + }, + + async assertTimeRangeSelectorSectionExists() { + await testSubjects.existOrFail('dataComparisonTimeRangeSelectorSection'); + }, + + async assertTotalDocumentCount(selector: string, expectedFormattedTotalDocCount: string) { + await retry.tryForTime(5000, async () => { + const docCount = await testSubjects.getVisibleText(selector); + expect(docCount).to.eql( + expectedFormattedTotalDocCount, + `Expected total document count to be '${expectedFormattedTotalDocCount}' (got '${docCount}')` + ); + }); + }, + + async assertRandomSamplingOptionsButtonExists(id: string) { + await testSubjects.existOrFail( + this.getDataTestSubject('aiopsRandomSamplerOptionsButton', id) + ); + }, + + async assertNoWindowParametersEmptyPromptExists() { + await retry.tryForTime(5000, async () => { + await testSubjects.existOrFail('dataDriftNoWindowParametersEmptyPrompt'); + }); + }, + + async assertRandomSamplingOption( + id: string, + expectedOption: RandomSamplerOption, + expectedProbability?: number + ) { + await retry.tryForTime(20000, async () => { + await browser.pressKeys(browser.keys.ESCAPE); + await testSubjects.clickWhenNotDisabled( + this.getDataTestSubject('aiopsRandomSamplerOptionsButton', id) + ); + await testSubjects.existOrFail( + this.getDataTestSubject('aiopsRandomSamplerOptionsPopover', id) + ); + + if (expectedOption === 'dvRandomSamplerOptionOff') { + await testSubjects.existOrFail('dvRandomSamplerOptionOff', { timeout: 1000 }); + await testSubjects.missingOrFail('dvRandomSamplerProbabilityRange', { timeout: 1000 }); + await testSubjects.missingOrFail('dvRandomSamplerProbabilityUsedMsg', { + timeout: 1000, + }); + } + + if (expectedOption === 'dvRandomSamplerOptionOnManual') { + await testSubjects.existOrFail('dvRandomSamplerOptionOnManual', { timeout: 1000 }); + await testSubjects.existOrFail('dvRandomSamplerProbabilityRange', { timeout: 1000 }); + if (expectedProbability !== undefined) { + const probability = await testSubjects.getAttribute( + 'dvRandomSamplerProbabilityRange', + 'value' + ); + expect(probability).to.eql( + `${expectedProbability}`, + `Expected probability to be ${expectedProbability}, got ${probability}` + ); + } + } + + if (expectedOption === 'dvRandomSamplerOptionOnAutomatic') { + await testSubjects.existOrFail('dvRandomSamplerOptionOnAutomatic', { timeout: 1000 }); + await testSubjects.existOrFail('dvRandomSamplerProbabilityUsedMsg', { + timeout: 1000, + }); + + if (expectedProbability !== undefined) { + const probabilityText = await testSubjects.getVisibleText( + 'dvRandomSamplerProbabilityUsedMsg' + ); + expect(probabilityText).to.contain( + `${expectedProbability}`, + `Expected probability text to contain ${expectedProbability}, got ${probabilityText}` + ); + } + } + }); + }, + + async setRandomSamplingOption(id: string, option: RandomSamplerOption) { + await retry.tryForTime(20000, async () => { + // escape popover + await browser.pressKeys(browser.keys.ESCAPE); + await this.assertRandomSamplingOptionsButtonExists(id); + await testSubjects.clickWhenNotDisabled( + this.getDataTestSubject('aiopsRandomSamplerOptionsButton', id) + ); + await testSubjects.existOrFail( + this.getDataTestSubject('aiopsRandomSamplerOptionsPopover', id), + { timeout: 1000 } + ); + + await testSubjects.clickWhenNotDisabled( + this.getDataTestSubject('aiopsRandomSamplerOptionsSelect', id) + ); + + await testSubjects.existOrFail('dvRandomSamplerOptionOff', { timeout: 1000 }); + await testSubjects.existOrFail('dvRandomSamplerOptionOnManual', { timeout: 1000 }); + await testSubjects.existOrFail('dvRandomSamplerOptionOnAutomatic', { timeout: 1000 }); + + await testSubjects.click(option); + + await this.assertRandomSamplingOption(id, option); + }); + }, + + async clickUseFullDataButton() { + await retry.tryForTime(30 * 1000, async () => { + await testSubjects.clickWhenNotDisabledWithoutRetry('mlDatePickerButtonUseFullData'); + await testSubjects.clickWhenNotDisabledWithoutRetry('superDatePickerApplyTimeButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + }); + }, + + async assertPrimarySearchBarExists() { + await retry.tryForTime(5000, async () => { + await testSubjects.existOrFail(`dataVisualizerQueryInput`); + }); + }, + async assertDocCountContent(id: string) { + await retry.tryForTime(5000, async () => { + await testSubjects.existOrFail(this.getDataTestSubject(`dataDriftTotalDocCountHeader`, id)); + await testSubjects.existOrFail(this.getDataTestSubject(`dataDriftDocCountChart`, id)); + + const parent = await testSubjects.find( + this.getDataTestSubject(`dataDriftTotalDocCountHeader`, id) + ); + const subQueryBar = await testSubjects.findDescendant(`globalQueryBar`, parent); + expect(subQueryBar).not.eql( + undefined, + `Expected secondary query bar exists inside ${this.getDataTestSubject( + `dataDriftTotalDocCountHeader`, + id + )}, got ${subQueryBar}` + ); + }); + }, + + async assertReferenceDocCountContent() { + await this.assertDocCountContent('Reference'); + }, + + async assertComparisonDocCountContent() { + await this.assertDocCountContent('Comparison'); + }, + + async assertHistogramBrushesExist() { + await retry.tryForTime(5000, async () => { + await testSubjects.existOrFail(`aiopsHistogramBrushes`); + // As part of the interface for the histogram brushes, the button to clear the selection should be present + await testSubjects.existOrFail(`aiopsClearSelectionBadge`); + }); + }, + + async clickDocumentCountChart(dataTestSubj: string, chartClickCoordinates: [number, number]) { + await elasticChart.waitForRenderComplete(); + const el = await elasticChart.getCanvas(dataTestSubj); + + await browser + .getActions() + .move({ x: chartClickCoordinates[0], y: chartClickCoordinates[1], origin: el._webElement }) + .click() + .perform(); + + await this.assertHistogramBrushesExist(); + }, + + async assertDataDriftTableExists() { + await testSubjects.existOrFail(`mlDataDriftTable`); + }, + + async runAnalysis() { + await retry.tryForTime(5000, async () => { + await testSubjects.click(`aiopsRerunAnalysisButton`); + // As part of the interface for the histogram brushes, the button to clear the selection should be present + await this.assertDataDriftTableExists(); + }); + }, + }; +} diff --git a/x-pack/test/functional/services/ml/index.ts b/x-pack/test/functional/services/ml/index.ts index ba36b3be3858f0..19f4233ca1540d 100644 --- a/x-pack/test/functional/services/ml/index.ts +++ b/x-pack/test/functional/services/ml/index.ts @@ -65,7 +65,7 @@ import { AnomalyChartsProvider } from './anomaly_charts'; import { NotificationsProvider } from './notifications'; import { MlTableServiceProvider } from './common_table_service'; import { MachineLearningFieldStatsFlyoutProvider } from './field_stats_flyout'; - +import { MachineLearningDataDriftProvider } from './data_drift'; export function MachineLearningProvider(context: FtrProviderContext) { const commonAPI = MachineLearningCommonAPIProvider(context); const commonUI = MachineLearningCommonUIProvider(context); @@ -85,6 +85,8 @@ export function MachineLearningProvider(context: FtrProviderContext) { dashboardJobSelectionTable ); + const dataDrift = MachineLearningDataDriftProvider(context); + const dataFrameAnalytics = MachineLearningDataFrameAnalyticsProvider(context, api); const dataFrameAnalyticsCreation = MachineLearningDataFrameAnalyticsCreationProvider( context, @@ -180,6 +182,7 @@ export function MachineLearningProvider(context: FtrProviderContext) { customUrls, dashboardJobSelectionTable, dashboardEmbeddables, + dataDrift, dataFrameAnalytics, dataFrameAnalyticsCreation, dataFrameAnalyticsEdit, diff --git a/x-pack/test/functional/services/ml/job_source_selection.ts b/x-pack/test/functional/services/ml/job_source_selection.ts index b43757cd7105ca..4a58be75bc376e 100644 --- a/x-pack/test/functional/services/ml/job_source_selection.ts +++ b/x-pack/test/functional/services/ml/job_source_selection.ts @@ -39,6 +39,10 @@ export function MachineLearningJobSourceSelectionProvider({ getService }: FtrPro await this.selectSource(sourceName, 'mlAnalyticsCreationContainer'); }, + async selectSourceForDataDrift(sourceName: string) { + await this.selectSource(sourceName, 'mlPageDataDrift'); + }, + async selectSourceForIndexBasedDataVisualizer(sourceName: string) { await this.selectSource(sourceName, 'dataVisualizerIndexPage'); }, diff --git a/x-pack/test/functional/services/ml/navigation.ts b/x-pack/test/functional/services/ml/navigation.ts index bc05cfd6a9bc34..e0136a7c311a27 100644 --- a/x-pack/test/functional/services/ml/navigation.ts +++ b/x-pack/test/functional/services/ml/navigation.ts @@ -200,6 +200,10 @@ export function MachineLearningNavigationProvider({ await this.navigateToArea('~mlMainTab & ~dataVisualizer', 'mlPageDataVisualizerSelector'); }, + async navigateToDataDrift() { + await this.navigateToArea('~mlMainTab & ~dataDrift', 'mlPageDataDrift'); + }, + async navigateToJobManagement() { await this.navigateToAnomalyDetection(); }, diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/inspect/inspect_button.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/inspect/inspect_button.cy.ts index dbd593f15e1ac3..78ead35a493270 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/inspect/inspect_button.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/inspect/inspect_button.cy.ts @@ -47,9 +47,11 @@ describe('Inspect Explore pages', { tags: ['@ess', '@serverless', '@brokenInServ login(); visit(url, { - onLoad: () => { - waitForWelcomePanelToBeLoaded(); - selectDataView(DATA_VIEW); + visitOptions: { + onLoad: () => { + waitForWelcomePanelToBeLoaded(); + selectDataView(DATA_VIEW); + }, }, }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/navigation.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/navigation.cy.ts index f8107e92cc64b6..d61ba89fa90b25 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/navigation.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/alerts/navigation.cy.ts @@ -9,7 +9,7 @@ import { expandFirstAlert, waitForAlerts } from '../../../tasks/alerts'; import { createRule } from '../../../tasks/api_calls/rules'; import { cleanKibana } from '../../../tasks/common'; import { login } from '../../../tasks/login'; -import { visit } from '../../../tasks/navigation'; +import { visit, visitWithTimeRange } from '../../../tasks/navigation'; import { getNewRule } from '../../../objects/rule'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/row_renderers.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/row_renderers.cy.ts index 8abcac5843cfaa..60af66a577b237 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/row_renderers.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/row_renderers.cy.ts @@ -34,9 +34,11 @@ describe('Row renderers', { tags: ['@ess', '@serverless'] }, () => { deleteTimelines(); login(); visitWithTimeRange(hostsUrl('allHosts'), { - onLoad: () => { - waitForWelcomePanelToBeLoaded(); - waitForAllHostsToBeLoaded(); + visitOptions: { + onLoad: () => { + waitForWelcomePanelToBeLoaded(); + waitForAllHostsToBeLoaded(); + }, }, }); openTimelineUsingToggle(); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/login.ts b/x-pack/test/security_solution_cypress/cypress/tasks/login.ts index 34312b3bd58768..e01b80e7c1f06d 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/login.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/login.ts @@ -142,13 +142,14 @@ const loginWithUsernameAndPassword = (username: string, password: string) => { const basicProvider = loginState.body.selector.providers.find( (provider) => provider.type === 'basic' ); + return cy.request({ url: `${baseUrl}/internal/security/login`, method: 'POST', headers, body: { - providerType: basicProvider.type, - providerName: basicProvider.name, + providerType: basicProvider?.type, + providerName: basicProvider?.name, currentURL: '/', params: { username, password }, }, diff --git a/x-pack/test_serverless/api_integration/services/svl_cases/api.ts b/x-pack/test_serverless/api_integration/services/svl_cases/api.ts index 474a92c317e9fe..4163fc70291db2 100644 --- a/x-pack/test_serverless/api_integration/services/svl_cases/api.ts +++ b/x-pack/test_serverless/api_integration/services/svl_cases/api.ts @@ -14,17 +14,17 @@ import { CasesFindResponse } from '@kbn/cases-plugin/common/types/api'; import { kbnTestConfig, kibanaTestSuperuserServerless } from '@kbn/test'; import { FtrProviderContext } from '../../ftr_provider_context'; +export interface User { + username: string; + password: string; + description?: string; + roles: string[]; +} + export function SvlCasesApiServiceProvider({ getService }: FtrProviderContext) { const kbnServer = getService('kibanaServer'); const supertest = getService('supertest'); - interface User { - username: string; - password: string; - description?: string; - roles: string[]; - } - const superUser: User = { username: 'superuser', password: 'superuser', diff --git a/x-pack/test_serverless/api_integration/services/svl_cases/omit.ts b/x-pack/test_serverless/api_integration/services/svl_cases/omit.ts index 94ce0a479fffcd..cb424ed73609c5 100644 --- a/x-pack/test_serverless/api_integration/services/svl_cases/omit.ts +++ b/x-pack/test_serverless/api_integration/services/svl_cases/omit.ts @@ -9,15 +9,15 @@ import { Case, Attachment } from '@kbn/cases-plugin/common/types/domain'; import { omit } from 'lodash'; import { FtrProviderContext } from '../../ftr_provider_context'; -export function SvlCasesOmitServiceProvider({}: FtrProviderContext) { - interface CommonSavedObjectAttributes { - id?: string | null; - created_at?: string | null; - updated_at?: string | null; - version?: string | null; - [key: string]: unknown; - } +export interface CommonSavedObjectAttributes { + id?: string | null; + created_at?: string | null; + updated_at?: string | null; + version?: string | null; + [key: string]: unknown; +} +export function SvlCasesOmitServiceProvider({}: FtrProviderContext) { const savedObjectCommonAttributes = ['created_at', 'updated_at', 'version', 'id']; return { diff --git a/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts b/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts index 42b6801c6ab5bc..38279b0c8d6367 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cypress/support/commands.ts @@ -31,8 +31,8 @@ Cypress.Commands.add('loginAsElasticUser', () => { method: 'POST', url: `${kibanaUrlWithoutAuth}/internal/security/login`, body: { - providerType: basicProvider.type, - providerName: basicProvider.name, + providerType: basicProvider?.type, + providerName: basicProvider?.name, currentURL: `${kibanaUrlWithoutAuth}/login`, params: { username, password }, }, diff --git a/x-pack/test_serverless/functional/test_suites/security/cypress/tasks/login.ts b/x-pack/test_serverless/functional/test_suites/security/cypress/tasks/login.ts index de79a7a94f275a..89ca14ec0c28f9 100644 --- a/x-pack/test_serverless/functional/test_suites/security/cypress/tasks/login.ts +++ b/x-pack/test_serverless/functional/test_suites/security/cypress/tasks/login.ts @@ -8,6 +8,7 @@ import { request } from '@kbn/security-solution-plugin/public/management/cypress/tasks/common'; import { LoginState } from '@kbn/security-plugin/common/login_state'; import type { ServerlessRoleName } from '../../../../../shared/lib'; +import { ServerlessRoleName as RoleName } from '../../../../../shared/lib/security/types'; import { STANDARD_HTTP_HEADERS } from '../../../../../shared/lib/security/default_http_headers'; /** @@ -36,8 +37,8 @@ const sendApiLoginRequest = ( method: 'POST', headers, body: { - providerType: basicProvider.type, - providerName: basicProvider.name, + providerType: basicProvider?.type, + providerName: basicProvider?.name, currentURL: '/', params: { username, password }, }, @@ -64,7 +65,7 @@ interface CyLoginTask { * @param user Defaults to `soc_manager` */ export const login: CyLoginTask = ( - user: ServerlessRoleName | 'elastic' = 'soc_manager' + user: ServerlessRoleName | 'elastic' = RoleName.SOC_MANAGER ): ReturnType => { let username = Cypress.env('KIBANA_USERNAME'); let password = Cypress.env('KIBANA_PASSWORD'); diff --git a/yarn.lock b/yarn.lock index 7e1992e29ade1b..7e9bb35da14434 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4483,6 +4483,10 @@ version "0.0.0" uid "" +"@kbn/feature-controls-examples-plugin@link:examples/feature_control_examples": + version "0.0.0" + uid "" + "@kbn/feature-usage-test-plugin@link:x-pack/test/plugin_api_integration/plugins/feature_usage_test": version "0.0.0" uid "" @@ -16172,7 +16176,7 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== -execa@4.1.0, execa@^4.0.2: +execa@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -21736,7 +21740,7 @@ mdast-util-to-hast@10.0.1, mdast-util-to-hast@^10.0.0: unist-util-position "^3.0.0" unist-util-visit "^2.0.0" -mdast-util-to-hast@^10.2.0: +mdast-util-to-hast@10.2.0, mdast-util-to-hast@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz#61875526a017d8857b71abc9333942700b2d3604" integrity sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ== @@ -29483,10 +29487,10 @@ unified@9.2.0: trough "^1.0.0" vfile "^4.0.0" -unified@^9.0.0, unified@^9.2.1: - version "9.2.1" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3" - integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA== +unified@9.2.2, unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== dependencies: bail "^1.0.0" extend "^3.0.0" @@ -29495,10 +29499,10 @@ unified@^9.0.0, unified@^9.2.1: trough "^1.0.0" vfile "^4.0.0" -unified@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" - integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== +unified@^9.0.0: + version "9.2.1" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3" + integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA== dependencies: bail "^1.0.0" extend "^3.0.0"