diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index f581c21901ebd..721de7917534d 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -142,6 +142,7 @@ enabled: - x-pack/test/cases_api_integration/security_and_spaces/config_no_public_base_url.ts - x-pack/test/cases_api_integration/spaces_only/config.ts - x-pack/test/cloud_security_posture_functional/config.ts + - x-pack/test/cloud_security_posture_api/config.ts - x-pack/test/detection_engine_api_integration/basic/config.ts - x-pack/test/detection_engine_api_integration/security_and_spaces/group1/config.ts - x-pack/test/detection_engine_api_integration/security_and_spaces/group2/config.ts diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 2b5de2a9e3c9e..a36bd508f0ad0 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.devdocs.json b/api_docs/advanced_settings.devdocs.json index 66331982f81ce..831dfb0a125f2 100644 --- a/api_docs/advanced_settings.devdocs.json +++ b/api_docs/advanced_settings.devdocs.json @@ -305,9 +305,9 @@ "signature": [ "({\n def,\n name,\n value,\n isCustom,\n isOverridden,\n}: { def: ", { - "pluginId": "@kbn/core-ui-settings-common", + "pluginId": "@kbn/core-ui-settings-browser", "scope": "common", - "docId": "kibKbnCoreUiSettingsCommonPluginApi", + "docId": "kibKbnCoreUiSettingsBrowserPluginApi", "section": "def-common.PublicUiSettingsParams", "text": "PublicUiSettingsParams" }, @@ -354,9 +354,9 @@ "description": [], "signature": [ { - "pluginId": "@kbn/core-ui-settings-common", + "pluginId": "@kbn/core-ui-settings-browser", "scope": "common", - "docId": "kibKbnCoreUiSettingsCommonPluginApi", + "docId": "kibKbnCoreUiSettingsBrowserPluginApi", "section": "def-common.PublicUiSettingsParams", "text": "PublicUiSettingsParams" }, diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 230ecce49d683..6855f8f9002c8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index e704437b831c8..2afb1f1ffe062 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 15fae82e3d87e..ed0c19af12faf 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 4fc59e2c641db..ec829fca26741 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -5370,7 +5370,35 @@ "TypeC", "<{ serviceName: ", "StringC", - "; }>; }>, ", + "; }>; query: ", + "IntersectionC", + "<[", + "TypeC", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; }>, ", + "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" + }, + ">]>; }>]>; }>, ", { "pluginId": "apm", "scope": "server", @@ -6160,7 +6188,9 @@ "section": "def-server.APMRouteHandlerResources", "text": "APMRouteHandlerResources" }, - ", { agentName?: undefined; runtimeName?: undefined; } | { agentName: string | undefined; runtimeName: string | undefined; }, ", + ", { agentName?: string | undefined; runtimeName?: string | undefined; serverlessType?: ", + "ServerlessType", + " | undefined; }, ", "APMRouteCreateOptions", ">; \"GET /internal/apm/services/{serviceName}/metadata/icons\": ", { diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index ab1ba8a79751c..a0a63f1dd4367 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; @@ -21,7 +21,7 @@ Contact [APM UI](https://github.com/orgs/elastic/teams/apm-ui) for questions reg | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 42 | 0 | 42 | 61 | +| 42 | 0 | 42 | 62 | ## Client diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 0e8d9ddbc5849..bb08afc588830 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 22d8137b26567..eae171c59adc6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 5999b8f6e13ee..0d228f8ad9a4d 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-01-27 +date: 2023-01-30 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 7b47f4649afd4..227d548020973 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-01-27 +date: 2023-01-30 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 385bc6788116b..7743510f26d88 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 3ccf2d039efb8..fe1dec5fe6310 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index e119a1e9d54f4..ce2e358ea9f50 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 49083c11254a2..a90893f737fb1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index 9a0cc0e7bf27e..0f4a756b7d724 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 28872b884bb58..d82d0233f9c1b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index deb048bb62efc..ce8800ed5cb1c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 33aa6301ba518..35c90d18566f3 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index b09c9768f076a..266c100addc1c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/core.devdocs.json b/api_docs/core.devdocs.json index f9e75a566a99a..04ff270cbf464 100644 --- a/api_docs/core.devdocs.json +++ b/api_docs/core.devdocs.json @@ -10463,9 +10463,9 @@ "signature": [ "() => Readonly | undefined; requiresPageReload?: boolean | undefined; readonly?: boolean | undefined; sensitive?: boolean | undefined; type?: ", { @@ -20367,7 +20365,7 @@ }, " | undefined; }" ], - "path": "packages/core/ui-settings/core-ui-settings-common/src/ui_settings.ts", + "path": "packages/core/ui-settings/core-ui-settings-browser/src/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -47803,15 +47801,15 @@ "\nReturns registered uiSettings values {@link UiSettingsParams}" ], "signature": [ - "() => Readonly Readonly>" + ", \"schema\">>>" ], "path": "packages/core/ui-settings/core-ui-settings-server/src/ui_settings_client.ts", "deprecated": false, @@ -62531,10 +62529,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/execution_saved_object/saved_objects_type.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts" @@ -69857,47 +69851,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "core", - "id": "def-server.PublicUiSettingsParams", - "type": "Type", - "tags": [], - "label": "PublicUiSettingsParams", - "description": [ - "\nA sub-set of {@link UiSettingsParams} exposed to the client-side." - ], - "signature": [ - "{ name?: string | undefined; value?: unknown; description?: string | undefined; category?: string[] | undefined; options?: string[] | number[] | undefined; optionLabels?: Record | undefined; requiresPageReload?: boolean | undefined; readonly?: boolean | undefined; sensitive?: boolean | undefined; type?: ", - { - "pluginId": "@kbn/core-ui-settings-common", - "scope": "common", - "docId": "kibKbnCoreUiSettingsCommonPluginApi", - "section": "def-common.UiSettingsType", - "text": "UiSettingsType" - }, - " | undefined; deprecation?: ", - { - "pluginId": "@kbn/core-ui-settings-common", - "scope": "common", - "docId": "kibKbnCoreUiSettingsCommonPluginApi", - "section": "def-common.DeprecationSettings", - "text": "DeprecationSettings" - }, - " | undefined; order?: number | undefined; metric?: { type: string; name: string; } | undefined; scope?: ", - { - "pluginId": "@kbn/core-ui-settings-common", - "scope": "common", - "docId": "kibKbnCoreUiSettingsCommonPluginApi", - "section": "def-common.UiSettingsScope", - "text": "UiSettingsScope" - }, - " | undefined; }" - ], - "path": "packages/core/ui-settings/core-ui-settings-common/src/ui_settings.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "core", "id": "def-server.RawRequest", diff --git a/api_docs/core.mdx b/api_docs/core.mdx index a2c23e8830527..da92cad1c112c 100644 --- a/api_docs/core.mdx +++ b/api_docs/core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/core title: "core" image: https://source.unsplash.com/400x175/?github description: API docs for the core plugin -date: 2023-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core'] --- import coreObj from './core.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2833 | 17 | 1015 | 0 | +| 2832 | 17 | 1016 | 0 | ## Client diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index b01f3a6b7e918..32e364fe911fb 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index ae9c5c1e7b1bb..800cf884e2595 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 61e59d5e1f25f..cc5ff14a7dff3 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 2f29be6aa8873..2c219784f20b9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index b9d92a96a5386..69ec8375434e9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 375e1b76d4365..e7ac4a8b2ea7d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index e0dd1107a3a21..10d3dd109f98b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index a1833f9439305..333a495f43154 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index 7242fb6d75734..3dcafe9a4960a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index 62651e8696a6a..c945daf504f47 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -5955,9 +5955,9 @@ "signature": [ "() => Promise | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject) | - | | | [use_dashboard_button_href.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/use_dashboard_button_href.ts#:~:text=savedObjects), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/overview/containers/overview_cti_links/index.tsx#:~:text=savedObjects), [use_security_dashboards_table.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards_table.tsx#:~:text=savedObjects), [use_create_security_dashboard_link.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/use_create_security_dashboard_link.ts#:~:text=savedObjects) | - | | | [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes) | - | -| | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=convertToMultiNamespaceTypeVersion), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=convertToMultiNamespaceTypeVersion), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=convertToMultiNamespaceTypeVersion), [saved_objects_type.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/execution_saved_object/saved_objects_type.ts#:~:text=convertToMultiNamespaceTypeVersion), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | +| | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=convertToMultiNamespaceTypeVersion), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=convertToMultiNamespaceTypeVersion), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=convertToMultiNamespaceTypeVersion), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | | | [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [manifest_manager.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [manifest_manager.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 34 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION) | - | @@ -1450,7 +1450,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=SavedObjectsClientContract), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=SavedObjectsClientContract), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=SavedObjectsClientContract), [utils.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.test.ts#:~:text=SavedObjectsClientContract), [utils.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.test.ts#:~:text=SavedObjectsClientContract) | - | | | [use_dashboard_button_href.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/use_dashboard_button_href.ts#:~:text=find), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/overview/containers/overview_cti_links/index.tsx#:~:text=find), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/overview/containers/overview_cti_links/index.tsx#:~:text=find), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=find), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=find) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject) | - | -| | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=convertToMultiNamespaceTypeVersion), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=convertToMultiNamespaceTypeVersion), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=convertToMultiNamespaceTypeVersion), [saved_objects_type.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/execution_saved_object/saved_objects_type.ts#:~:text=convertToMultiNamespaceTypeVersion), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | +| | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=convertToMultiNamespaceTypeVersion), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=convertToMultiNamespaceTypeVersion), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=convertToMultiNamespaceTypeVersion), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | | | [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index e5f4313fbdb93..f30544104b267 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 0b4a3fbaa2689..021378947c8ee 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-01-27 +date: 2023-01-30 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 64b6deaef0840..99e6bd794bc63 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 64db5c189cc7e..45ae471ab0234 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 5bb2361324349..036fc068e8f61 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index d3aae07721e10..1057d65fc99b9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 296615100b3be..5ad74c80cf9ec 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 1163109a13698..3f5f4e0ff0b91 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 76a3082cacce6..551d633a05a68 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index bb984bc89f356..079c249780414 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index e13091d660559..326a2280f1c2d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index e9ec1f55093fb..eb2824379b766 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 26a2502a8109e..3d1c7b74a14e2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index cd1ccba6e9617..cc540a226955a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 49432287d4f8c..5af5306ba4d05 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 681975ee08acb..afc44e3f5b28f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 2a4c7da8dab20..65876d1ada699 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 47b710cc9ddbf..9e02dbb25fdb8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 0fdeda8d9273a..2c90a8e7f89af 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index b701763489290..64ba3e3442a55 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 3073d3dd83ce3..58f1a170b192e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index ad4cd745f9e28..b0efd4948a4fa 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index 8b1341595fba7..baaf83c93dbc8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.devdocs.json b/api_docs/expression_x_y.devdocs.json index a3445449ddf1d..67d952fd86d4f 100644 --- a/api_docs/expression_x_y.devdocs.json +++ b/api_docs/expression_x_y.devdocs.json @@ -449,6 +449,20 @@ "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "expressionXY", + "id": "def-common.AxisExtentConfig.niceValues", + "type": "CompoundType", + "tags": [], + "label": "niceValues", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index cfa9548138dfd..ea72821ebaa38 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Vis Editors](https://github.com/orgs/elastic/teams/kibana-visualization | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 170 | 0 | 160 | 13 | +| 171 | 0 | 161 | 13 | ## Client diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index fa5e0326f0f56..7d5f816adaa3a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index b5aef79eea0af..ae4a52e4885f3 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 7d6df8d941cf5..1764465052363 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 1af193fa9bb3d..8d5ccdc612397 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 11cfc6904d73f..3a8a8237f0b94 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 96dc2d2e8060a..74b7a1f3c8838 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-01-27 +date: 2023-01-30 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 4a73d04cad66e..b899d6d2de663 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 6a3e1d99f16dd..bcf7038f4b851 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index 08806c5b89993..4d246c79461e5 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index 027a0e6f7655e..4854c9abced73 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 4ba0d55b7a390..a6699d0e86c3d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 41f4cbe51eeb3..1d9adb71ac0e5 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index de20b0de53299..1ceea6db43660 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index f40a6d7e27e6f..eb094011f7443 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 5a5083c156dbb..8f1d5f0129a8a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 93cb2607c3953..50efdb79e6cfb 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 2ac467b72520c..e9a76aa665eae 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index f4cf45f4f8848..8f0fd576c413b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index a42ec1ed3d70b..7d18a038dbd52 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index 2b223da4edf95..24a185f0bcafb 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 74d6d3dbeee12..fb7772ac2e53a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 563a3f27e4dde..b590e8eff06d7 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 3005c4dea57ad..0d15a40c8abed 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 676edd94c21ab..ad86db69ebf2a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 7f8d48b5db660..db8d903c06614 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index eeb38287d30f2..39db1ca3e617c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index 9c5006b1397ee..1e7983eba24b8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 6deb215850b9b..b60512f023b35 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 186dd0e8f5440..186c425d73057 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.devdocs.json b/api_docs/kbn_apm_synthtrace_client.devdocs.json index 3b9c8f26a7be3..b0422331cb101 100644 --- a/api_docs/kbn_apm_synthtrace_client.devdocs.json +++ b/api_docs/kbn_apm_synthtrace_client.devdocs.json @@ -2510,7 +2510,7 @@ "label": "serverlessFunction", "description": [], "signature": [ - "({ functionName, serviceName, environment, agentName, architecture, }: { functionName: string; environment: string; agentName: string; serviceName?: string | undefined; architecture?: string | undefined; }) => ", + "({ functionName, serviceName, environment, agentName, architecture, serverlessType, }: { functionName: string; environment: string; agentName: string; serviceName?: string | undefined; architecture?: string | undefined; serverlessType?: \"aws.lambda\" | \"azure.functions\" | undefined; }) => ", "ServerlessFunction" ], "path": "packages/kbn-apm-synthtrace-client/src/lib/apm/index.ts", @@ -2526,7 +2526,7 @@ "label": "__0", "description": [], "signature": [ - "{ functionName: string; environment: string; agentName: string; serviceName?: string | undefined; architecture?: string | undefined; }" + "{ functionName: string; environment: string; agentName: string; serviceName?: string | undefined; architecture?: string | undefined; serverlessType?: \"aws.lambda\" | \"azure.functions\" | undefined; }" ], "path": "packages/kbn-apm-synthtrace-client/src/lib/apm/serverless_function.ts", "deprecated": false, diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 434c5382d636b..51fb8b8005858 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 7e1793e181bb4..fbb95221542f5 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index a91fda760e8b9..35c0fe796b9c5 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 86f5f3a1523f7..e2eac6071fba4 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.devdocs.json b/api_docs/kbn_cell_actions.devdocs.json index 4441df2e08ef2..c6df4678bfb02 100644 --- a/api_docs/kbn_cell_actions.devdocs.json +++ b/api_docs/kbn_cell_actions.devdocs.json @@ -144,6 +144,150 @@ } ], "interfaces": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellAction", + "type": "Interface", + "tags": [], + "label": "CellAction", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellAction", + "text": "CellAction" + }, + " extends Omit<", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.Action", + "text": "Action" + }, + ", \"isCompatible\">" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellAction.isCompatible", + "type": "Function", + "tags": [], + "label": "isCompatible", + "description": [ + "\nReturns a promise that resolves to true if this action is compatible given the context,\notherwise resolves to false." + ], + "signature": [ + "(context: ", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionCompatibilityContext", + "text": "CellActionCompatibilityContext" + }, + ") => Promise" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellAction.isCompatible.$1", + "type": "Object", + "tags": [], + "label": "context", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionCompatibilityContext", + "text": "CellActionCompatibilityContext" + } + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionCompatibilityContext", + "type": "Interface", + "tags": [], + "label": "CellActionCompatibilityContext", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionCompatibilityContext", + "text": "CellActionCompatibilityContext" + }, + " extends ", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.ActionExecutionContext", + "text": "ActionExecutionContext" + }, + "" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionCompatibilityContext.field", + "type": "Object", + "tags": [], + "label": "field", + "description": [ + "\nThe object containing the field name and type, needed for the compatibility check" + ], + "signature": [ + "{ name: string; type: string; }" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionCompatibilityContext.metadata", + "type": "Object", + "tags": [], + "label": "metadata", + "description": [ + "\nExtra configurations for actions." + ], + "signature": [ + "Record | undefined" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cell-actions", "id": "def-common.CellActionExecutionContext", @@ -197,7 +341,7 @@ "\nRef to a DOM node where the action can add custom HTML." ], "signature": [ - "React.MutableRefObject | undefined" + "React.MutableRefObject" ], "path": "packages/kbn-cell-actions/src/types.ts", "deprecated": false, @@ -213,7 +357,7 @@ "\nRef to the node where the cell action are rendered." ], "signature": [ - "React.MutableRefObject | undefined" + "React.MutableRefObject" ], "path": "packages/kbn-cell-actions/src/types.ts", "deprecated": false, @@ -293,38 +437,7 @@ "initialIsOpen": false } ], - "misc": [ - { - "parentPluginId": "@kbn/cell-actions", - "id": "def-common.CellAction", - "type": "Type", - "tags": [], - "label": "CellAction", - "description": [], - "signature": [ - { - "pluginId": "uiActions", - "scope": "public", - "docId": "kibUiActionsPluginApi", - "section": "def-public.Action", - "text": "Action" - }, - "<", - { - "pluginId": "@kbn/cell-actions", - "scope": "common", - "docId": "kibKbnCellActionsPluginApi", - "section": "def-common.CellActionExecutionContext", - "text": "CellActionExecutionContext" - }, - ">" - ], - "path": "packages/kbn-cell-actions/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], + "misc": [], "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 343422695ba2b..f0bc5b1fb97e3 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Owner missing] for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 15 | 0 | 12 | 3 | +| 20 | 0 | 14 | 3 | ## Common @@ -34,6 +34,3 @@ Contact [Owner missing] for questions regarding this plugin. ### Enums -### Consts, variables and types - - diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index bd067776fdc61..2c4a3016cc511 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index f707d533fe737..77e1342b6a7b8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 079c5eb0aa888..9b4395d47a864 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index d6dffac8f0854..4a84ced7636a9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 2fab4f93fe440..6d1ff577044ab 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index b95482db1e654..069f23a0c6871 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index c67464aee6f97..444b276790315 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 154eb93df05ab..4f30ccfb5a5ea 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index c514e701e0963..e1cf4c7c81a86 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index df591653d3338..90acfb8d3c42d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index 2ac4a23fe1411..989bfddc5ad4c 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index bc9339f5b628b..9207788b71dcb 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 993e57d6abf19..10ff4b00e813d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index 782ad26bc83b7..0a3ad2de810c4 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 42483cf5b783c..5e25155fe99b3 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 2b19e77bcb4ba..c735376e9bb3d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 17e6207d98649..fca2385c43a2f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 688915feba5bf..185c8a8c0d5da 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index 9d344fe290c21..eca95e4f9bb4d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index 6f3d7806d1bd4..e3685fc2066d8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 98d09bc7c153c..65fd987d8573e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 05cd7986a5cf3..18e2f252c0c85 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 4bdb5c9eda07e..6964da198d9a6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 73ccbbec9f524..841808f6c5d2d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 08dddb0cd6185..c7c6e08deedc7 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 197e0caaeb2a8..53833a277ff3b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index c2c971ec93838..4626b08cc0781 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 210086725b1a0..4e578e84321dd 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 4f1b4710f24ab..69bbcc7424ca2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 8a7ebbbde5f42..9f9920fbfcb44 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 65fdd73a3a794..18f8e597892b9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index 78b5e5a86c1b2..22282d38e237a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 01472aa410007..6851754193ed1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index c355a97e7927c..4603c1b5db2c0 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 98df37e9a75df..d66ae746b8dd1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index ac31154978bfb..4607944fe34f2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index abae088f8f697..d36082c846d19 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 7a5f518ae767f..227fe7e79e6b0 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index b59f572d7744c..e8525bba73e6f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index f1da7a2804a5c..f191340be9c13 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 58e3f21124e3b..b7c7ce11ed2c2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index 1fef58b323980..bcf53c6b63efc 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index 42c936c1d2bed..a969e55e05969 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index f8d82bba771d6..74d1f269f1bc5 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index acf7c28d2a778..af85ababf4a9f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index c80e48980add0..f5f50113bb830 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index d33468b69d767..20535709f9bf4 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index e2b023e44825b..e6f46741b98db 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index 55709607723a4..411104ede9491 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 1b6e985211927..2e0f829c6f5d4 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index c39aaa7407c7c..d046b63b65748 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 75194095b3843..db61e55d08c73 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 3cefebf73ba53..e0b8cf8c6275d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index bb1231731d805..f81a4b1dca0b2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index d206cefe49bcf..878429f1f432c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index e29aea9c54822..b74d61fd48bc0 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index f560d8e3264cc..a0f6c751f1322 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index 0453b0dd8c12f..675d43d95945c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index f35985dd0e855..3468fa27b7967 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 17237ada3f56a..9f58849fedb91 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index f6b539f3807d3..2f5d1108069ed 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index f84842d16c77e..ddbdafb1c895b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 42de53558f686..8e317783178fe 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 56e4c18a51b3a..e18968f71d09c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 004dbf923a07b..3bbc3dcb1ad3f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index d559872cac2ff..7bc1f355f3c50 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index 258d9d427531c..1412f197a1178 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index add8e1b05110d..2f6dde2fb228d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index e0c9bd5d99014..acd6f5098cc1b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index d348cbf35f264..c27ee0968e3c6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index 24f9017749929..0228a0b7f398c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index e457ceacffd3f..cb8eb78565089 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index d7f251ee69ed8..e807dd4b2bf2e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 530050d3eb4cb..4a3e1bb95abf0 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index a49e58f81f932..ed4d689190141 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index a53fc6124c775..66cbcfc913e75 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index 00df0ed338b8e..16f80c2ef88c9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index d04e4f2247cda..c76203c29fdd9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 4533f8e746966..de8f7fb32b44d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index c1ea05df66a27..eaacfeda3d0dc 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index da944948c73e1..3520dc1324a6e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 4ce85d8ce5f1c..6b7d2bcd26a8a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 7fa4c14717c3d..2d88ab176bdcf 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index a5efffc62af7b..d6147f89f809e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index 4502d94c30632..799798ef3955b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index e3f7ede1b3175..2061333d751ba 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index 1e9017015e6a4..0fdb792899e32 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index cd108b890cf5d..84d4904227011 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 175508e1e20ac..742add69ed5a7 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index 26b3890048154..1f47663a9540e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index e6d3c2ac99bb4..1dc629cf9d2e0 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index c302bf397633d..859261d83c679 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 13d4b7df92b39..e7b57a81de800 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index a0438ad521a72..ac5ebf3e71e50 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 473f2deeb470d..a3fed21b9979b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index f5d2d9eedb293..52ef44431a4d5 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index fd4a595ea1a0a..23624669a3f8f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 9651207e8a0ea..2449965e82474 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index dd7edd97d26f5..65ffa182d4220 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index 4611e3180ad80..a0df57e09c979 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index f787fde043084..c67dd8b1dd1ca 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index f841c7947b3e0..c8ef726cdeb7d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index e28a56b20ad8a..832de383b526e 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-01-27 +date: 2023-01-30 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 37e86a9d3b03e..6ffc31d1fca27 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index a42ab0471b98c..4596f78a805ca 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index b658b6d8e184c..069fcffdcb454 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 0b429766b09d3..a6bd44f60b7c8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 63ed8abfea872..3b1e9026a48b9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 1c5ba67da8ee9..fc77245dc3cf3 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index 1b8b6a4011316..4600e9d212c84 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index d4a19e1974d72..49d93560e3079 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index e827260aa6cde..fb4b14a8a8542 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 158cc35410965..3fdf81609d4d2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index e8bb1bd1bc31c..5c6dbc9a9ccb9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index e9f2c8f73e737..008e70efbdf43 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 9eb152b09c468..f76760c79e8c4 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 1d8bd1cf108e8..7fa45105d4416 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index eab16379dcbe6..2fa60c1304427 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 0a44e2babb9b4..6ab1c7d6d41e2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 7373ca1c1196d..915d1bee31595 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 7a2f52e5a2e0d..9196688eec7e7 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index efbcf9b9bc4bf..300ff8710b6d6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 90d51b25871f2..f8a1aeaed572f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index 50a83f6610b24..b3dec96995eec 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 878d017a5bb44..50e74752502a2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 83c5c046bf0cf..387bf244f3e84 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index e7b0e9282a3d7..7b51ae2386e4f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index 3aee7c286a160..732c0f388c492 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index da2b8ae4e1d29..4dbed3adb50a8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 3018c3bb67932..168a6de3884bf 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index 2b4ffeac60448..5ed0f53c38540 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 00cd38ae9d342..3d3d8c7372407 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 09ae6cd4322b7..66402b1e33977 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index 0b3852e2f315d..05461ace74602 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 3e641597dba82..12c46e4a55d1f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index ac7463c31ab38..2df56466d7b39 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 5ad06cc84820a..3e322719e6c3f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 6d3db88834288..0c78327852c14 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index e8b6d67c622e4..e7c2e6d106e8b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.devdocs.json b/api_docs/kbn_core_saved_objects_server.devdocs.json index 106d023c52af4..3890cd7f96e1e 100644 --- a/api_docs/kbn_core_saved_objects_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server.devdocs.json @@ -5793,10 +5793,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts" }, - { - "plugin": "securitySolution", - "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_monitoring/logic/rule_execution_log/execution_saved_object/saved_objects_type.ts" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts" diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index d20bc0c7269a6..4fccae05fcfb9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index 9e63518899840..3968ab5e944ea 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index a94734f123c4d..5c8209b1dd160 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index aacdd4a7aa8fd..a28d111a550b2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 6e3b9e9ddf71d..2bab6b5ae9535 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index 7c7542e471e0e..357fa83730435 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 19d794c47a3b1..8dc92118c079f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index eaedb938f3970..f8c6c61f848cc 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index 9bf32252c0d65..8f5a6fbadf09b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 171966abf3340..390f909ce2513 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index 55c2c8bd0d23a..ca0f19aa71b3a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 568a36a5b8819..de94f700b713f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 10060a5deb5be..815aa3601ead0 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 50f974a6d0358..3c2f405761f69 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 9aeff0c38f248..df472a1696b82 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 7ced5d35ca9ea..eee3789145151 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 20f2ae1a9c206..105503f3e6a6c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.devdocs.json b/api_docs/kbn_core_ui_settings_browser.devdocs.json index 62b0b1f08a943..bffcf4582a71e 100644 --- a/api_docs/kbn_core_ui_settings_browser.devdocs.json +++ b/api_docs/kbn_core_ui_settings_browser.devdocs.json @@ -145,9 +145,9 @@ "signature": [ "() => Readonly | undefined; requiresPageReload?: boolean | undefined; readonly?: boolean | undefined; sensitive?: boolean | undefined; type?: ", + { + "pluginId": "@kbn/core-ui-settings-common", + "scope": "common", + "docId": "kibKbnCoreUiSettingsCommonPluginApi", + "section": "def-common.UiSettingsType", + "text": "UiSettingsType" + }, + " | undefined; deprecation?: ", + { + "pluginId": "@kbn/core-ui-settings-common", + "scope": "common", + "docId": "kibKbnCoreUiSettingsCommonPluginApi", + "section": "def-common.DeprecationSettings", + "text": "DeprecationSettings" + }, + " | undefined; order?: number | undefined; metric?: { type: string; name: string; } | undefined; scope?: ", + { + "pluginId": "@kbn/core-ui-settings-common", + "scope": "common", + "docId": "kibKbnCoreUiSettingsCommonPluginApi", + "section": "def-common.UiSettingsScope", + "text": "UiSettingsScope" + }, + " | undefined; }" + ], + "path": "packages/core/ui-settings/core-ui-settings-browser/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-ui-settings-browser", "id": "def-common.SettingsSetup", diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index bb36954ebd1f5..4457d3c3e80d2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; @@ -21,7 +21,7 @@ Contact Kibana Core for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 29 | 1 | 17 | 0 | +| 30 | 1 | 18 | 0 | ## Common diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 4d54ff1d75227..e621db85bb8e1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index a3797baea0bfe..35c0617de2b6f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.devdocs.json b/api_docs/kbn_core_ui_settings_common.devdocs.json index 6cb30b3db1d75..e8e61fb48328f 100644 --- a/api_docs/kbn_core_ui_settings_common.devdocs.json +++ b/api_docs/kbn_core_ui_settings_common.devdocs.json @@ -431,47 +431,6 @@ ], "enums": [], "misc": [ - { - "parentPluginId": "@kbn/core-ui-settings-common", - "id": "def-common.PublicUiSettingsParams", - "type": "Type", - "tags": [], - "label": "PublicUiSettingsParams", - "description": [ - "\nA sub-set of {@link UiSettingsParams} exposed to the client-side." - ], - "signature": [ - "{ name?: string | undefined; value?: unknown; description?: string | undefined; category?: string[] | undefined; options?: string[] | number[] | undefined; optionLabels?: Record | undefined; requiresPageReload?: boolean | undefined; readonly?: boolean | undefined; sensitive?: boolean | undefined; type?: ", - { - "pluginId": "@kbn/core-ui-settings-common", - "scope": "common", - "docId": "kibKbnCoreUiSettingsCommonPluginApi", - "section": "def-common.UiSettingsType", - "text": "UiSettingsType" - }, - " | undefined; deprecation?: ", - { - "pluginId": "@kbn/core-ui-settings-common", - "scope": "common", - "docId": "kibKbnCoreUiSettingsCommonPluginApi", - "section": "def-common.DeprecationSettings", - "text": "DeprecationSettings" - }, - " | undefined; order?: number | undefined; metric?: { type: string; name: string; } | undefined; scope?: ", - { - "pluginId": "@kbn/core-ui-settings-common", - "scope": "common", - "docId": "kibKbnCoreUiSettingsCommonPluginApi", - "section": "def-common.UiSettingsScope", - "text": "UiSettingsScope" - }, - " | undefined; }" - ], - "path": "packages/core/ui-settings/core-ui-settings-common/src/ui_settings.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/core-ui-settings-common", "id": "def-common.UiSettingsScope", diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index a4c239118cd0f..dc1710d40a927 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact Kibana Core for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 25 | 0 | 3 | 0 | +| 24 | 0 | 3 | 0 | ## Common diff --git a/api_docs/kbn_core_ui_settings_server.devdocs.json b/api_docs/kbn_core_ui_settings_server.devdocs.json index a143921a6e575..c29ea4ee7655b 100644 --- a/api_docs/kbn_core_ui_settings_server.devdocs.json +++ b/api_docs/kbn_core_ui_settings_server.devdocs.json @@ -43,15 +43,15 @@ "\nReturns registered uiSettings values {@link UiSettingsParams}" ], "signature": [ - "() => Readonly Readonly>" + ", \"schema\">>>" ], "path": "packages/core/ui-settings/core-ui-settings-server/src/ui_settings_client.ts", "deprecated": false, diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index 8d7e4bcbcee36..50d479a704290 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index f22894c3c3d5b..9b4f92f88656a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index f20ffe1b0086b..655d36907edc1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index a66c933b1d138..721850f712396 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index 7fcea26e9ade8..d94d8f39d44d2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index dbe41bc4bd9b3..fe32fe6d09742 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index aa21e0db42bfa..f6f73955e945d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index cc237aa72479a..aa57bcafa5d95 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 5bf03a346a56b..31aa95ab485f3 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 1b2585bec69aa..5c7513c4776ef 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 9295cc5f1325c..20efd16d9c4d4 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 91d1fbf70db4e..93a3bdf8fb699 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 1861816165361..d2574656ee11c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 7fe74f2ffb8af..b027188acb6d6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index af4cb80422bdd..a9529773dfc77 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 7924dee076eab..d809cce3b6274 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index bd648c8df73cb..f6524ce9c0971 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 02f6773b74b5c..84af0a7b98494 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index e621d0a9aabb0..360f4b68d6d87 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 760dd23ec446d..714d4f044fe8c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 549510cfa500c..3c3a74d96af97 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 7961299c1eeb4..da781ad196acd 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index e47a62a3b5120..5c495dd649658 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 38ce67c87ffe5..7c43007947950 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 6f711ae409aaa..159dc92930b43 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 669a8ce98c709..d3c1d8f62910f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index c7b01ea089b43..b91ea5b281d51 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index cdf9dc8d1f0ae..413dd63d35735 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_get_repo_files.mdx b/api_docs/kbn_get_repo_files.mdx index bad60deca80f3..64a9c1e5b7bf2 100644 --- a/api_docs/kbn_get_repo_files.mdx +++ b/api_docs/kbn_get_repo_files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-get-repo-files title: "@kbn/get-repo-files" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/get-repo-files plugin -date: 2023-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/get-repo-files'] --- import kbnGetRepoFilesObj from './kbn_get_repo_files.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index e1af3bb3c213b..e078a0ec24285 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 0375ba0a4fdb6..126aba552fcff 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 7bea28ad597bd..6adb4eb34c18e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index ab7c22f84a912..2e095a65db292 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 060b716e8fbfc..2b295a805e432 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 74e3eb95ecf33..c397501db921f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index ce138de24a5ed..2a49529919548 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 9931f64ac1eb8..5fcd0953e989d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index be7ecde1d6336..2c7b594374be4 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 22ecf1de6e1c1..b578d6f0ff054 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 08b761e7aa5dc..a5fd9cbf4e7dd 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 2b5e7f7d208c4..11853327bf239 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 9d107ff02d31d..11b23f85db0ea 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index adf5e173eccb5..3927f61297815 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index a786e4ce9706e..3e923c48e785f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index b5c8f2642f8af..ec6755a037e54 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index a556687779802..2884e1a95e53e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index a29d909443a6c..1f5e5a603529a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 21de575699904..e4fa5b1fc4406 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 6540ad99343cf..9073884e3e906 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 0c69749c0b104..50230f0c37c4e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index f40a9727bd5f3..e0a807ae7fcfc 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index f95143253bc47..8663b0973a4fa 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index d47a9c3f0044f..bd86f138c7f45 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 20b060cf4026e..e8945cdbae852 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 799f3e1bcbf33..32b05613d6862 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index deb09538e85a7..19e67e69be75c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 9a81bdb1d9768..726577ba097d1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 9cdd150fd6071..a5b520a359366 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 212c3c79fd9b4..9b21b62a02005 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 6bf01bb5983cc..c1c4409f67b83 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index fa735002c9090..b6f86dc0cd4fa 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index 5ffc00c18abf0..0229ccceff20c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 0b241654fae68..1ac67e0201af6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index dd934a8bce55a..182b3d18d1317 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index 3cf325cfcfa79..4a2f7a1548390 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index fe8f9282ee0a2..bcc9621f6eaf5 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index f7cd105405058..a8aa63023c828 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index ba026999371e3..323e39b6192ff 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index f4047c896451a..eae842c432038 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 41aaf835c01e3..4dd0be8388470 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 481d1c0a8e624..977aecbf64ae4 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index a7d1405f7a572..aaae88b9fcbb1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 211114ef2f047..9d59e07d5c104 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index c5eb5a10cd34e..4dd583520714e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 743f7bbfeefa3..dd045c36fcb75 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index ab0d69769b255..0d5b772d8a0dd 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 62625a84d4aba..1ae1b5f1ccda9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index b593be9ec63ce..bbe20a810001c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 4bb4f771143a1..7d5c918352fe6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index eea716f61c6b1..df64ef56e48f6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 8f9b39ec47738..515fbef38847a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index 041fe4b180d0e..2bb6eec809af1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index d910793217bd4..69ccb1593f4d8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index b32106a65f98c..f85008faeacc6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index ae1ce091979d9..0e2bbcefdc4d8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 9a0c5c86d3040..3ba4c88efcf2e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 738f7b0daedfa..b3be901ccd130 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index c286a7e04adc2..1354047ee3695 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 1b6a993401cc8..576d0e5930ffd 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index f43c43b463da2..3db2e619c3bad 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 7f7c543e4b8e8..0ddbad2831322 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index c7bcc549506cb..613403ecdf068 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index f075dc418224f..129b0d1f90c20 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index a3437f34305af..0ddb60c7d6611 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 2c65b84ea8db4..a1ae33e86b3f9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index a598a9c2a83a5..64cc68ecff23d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index ee0d6ef94fcb8..30dd624ba0889 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 8148f8b42aaca..4c8a14cb5301d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 8a798fbf22345..1f27f197f6aa7 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index ad0c70e000c61..d6fa862f09ead 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index d10d85abeca16..36d55cb5d5ca2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index 0fb0da680189f..6b94f4f24bbca 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 7b085fabd9da8..060c2573ec94b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 5dc990124de6d..bb9b58d2daf61 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 7b654a2895b5b..663368f7eff44 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index 4ee02a23d431c..729eaf3eaaa43 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index e153b97ad1da4..837d0a3e579df 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index c407b1da22cf4..03ee5c2618af1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index 1b30878c96e29..cd35f7e5cf03d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 56eb2a8328af9..dac874e621691 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 929c71213fdcb..246359c3f1671 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index eddf6a3afa916..b9c8d7b042dac 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index 176634a6498fb..4ab936ba53775 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index e1aa8aa42deb6..d67cbc6398ee7 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index a7253671d6679..0295d42172b33 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 37755c75976fd..6e7c46200490d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index e896f3353286e..5306cc61ad823 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index 3aca1990f632c..953a303571a2e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 1f3574fa945f9..c975b40c2d3c0 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index 42cf6a1a72a04..ce5590d9103d9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 2bfa5b8e4cd8b..66bdc9c0ac3f5 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index a72be70c7c20f..fea5b27e93efe 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 6e94b0a09bb8f..0d60150cd58b8 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 6d7275be8d4d1..e6ce595ac568e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index e9e3613bfe9cf..920afbc20a329 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index 53fcbfa49e891..5baf421f29c62 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index f67894508febf..5c97689451e8b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 1ac1d8b1646d7..ff2270fc7658b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 78cd5635213ea..e9ef7a7af2377 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 9e9fd0416a8d0..cae8b252bb919 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 39c508c78ce98..d03ada1ae175e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index dc04e13ba6857..e3a26453bf082 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 1b54d37b50718..04ac3608174b9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 229bc3a628817..960d40b23b79c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 33884d0d91752..1e2ace57b7990 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 9d51ae4733361..935d7de444987 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index affca734c68ee..44fd681205e76 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 33d9c7877e22a..951d9b19af659 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 2ab99d1226ad9..68479d0480a5f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 6997a184d080b..70dad33d210fa 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index fde6f410a8cae..1c2e1f15f9654 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 0c2e8dd760256..673383ef97b67 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index b4f303ea88abb..89f4e93704d27 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 6d2530ee72ddd..fce46e8052a66 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 60f1f87d96104..e71ed78870a3b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index d7a6cb35fb71d..6e4fd9785a7dc 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index b2f87f0c23c88..00e072693095c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 1074c62a28833..db5e4488f9758 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index c21e1801eda44..e5fd98c4ccc0b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 3e3ad734d0153..6352f703cc561 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 6928ee053a89f..fe1bcfa772cf6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 2ba52344c1657..96d556658dbdf 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index 9328c94291a8a..5708d1161331c 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -1106,6 +1106,20 @@ "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "lens", + "id": "def-public.AxisExtentConfig.niceValues", + "type": "CompoundType", + "tags": [], + "label": "niceValues", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/chart_expressions/expression_xy/common/types/expression_functions.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index f62d4efd460c3..29a49dcef5bb7 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Vis Editors](https://github.com/orgs/elastic/teams/kibana-visualization | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 693 | 0 | 598 | 52 | +| 694 | 0 | 599 | 52 | ## Client diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index ff6d0d160e712..54828ce874a67 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index dca9df6fc2cd3..d627d5d0c6893 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 8ef5d5aa60d4e..e9199a657935a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 6e2602b36b0b3..2096ce8598128 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 219c0c70a135d..713b6e659790a 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-01-27 +date: 2023-01-30 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 a70897574527c..362ddfc8be3aa 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-01-27 +date: 2023-01-30 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 5c3ab21ff8e34..a0ec73841ae03 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index ac857e08306c5..f5363dfd1cd20 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1609,7 +1609,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 TRAINED_MODELS_NODES: \"trained_models/nodes\"; 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_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 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 ACCESS_DENIED: \"access-denied\"; 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_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 TRAINED_MODELS_NODES: \"trained_models/nodes\"; 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 ACCESS_DENIED: \"access-denied\"; 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_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 289f3dcf04fbc..f8db2ec390c7a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index df7fa9b02b744..7372a92b62978 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index ce8e36c660d17..dfad2c51573b2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index f1221d55512d1..e2be5b8a93ce7 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 249b6c8820495..e935ba982517e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 71fdd3015e6e9..38a0fe38afb2b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index a505038da41ca..d369b808ecb52 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -3550,6 +3550,20 @@ "path": "x-pack/plugins/observability/public/services/navigation_registry.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-public.NavigationSection.isBetaFeature", + "type": "CompoundType", + "tags": [], + "label": "isBetaFeature", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/observability/public/services/navigation_registry.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 60bcc71cc45e9..eee80c7d07501 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Observability UI](https://github.com/orgs/elastic/teams/observability-u | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 605 | 41 | 599 | 32 | +| 606 | 41 | 600 | 32 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index bebe48584711d..dd794c0fbfba7 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 85bfa61954c3b..96bd8997cd457 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 70019 | 527 | 59225 | 1207 | +| 70017 | 527 | 59226 | 1206 | ## Plugin Directory @@ -31,7 +31,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 1 | 32 | 2 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 12 | 0 | 1 | 2 | | | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 467 | 0 | 457 | 39 | -| | [APM UI](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 42 | 0 | 42 | 61 | +| | [APM UI](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 42 | 0 | 42 | 62 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 89 | 1 | 74 | 2 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | @@ -48,7 +48,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Cloud Security Posture](https://github.com/orgs/elastic/teams/cloud-posture-security) | The cloud security posture plugin | 17 | 0 | 2 | 2 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 13 | 0 | 13 | 1 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 268 | 0 | 264 | 9 | -| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2833 | 17 | 1015 | 0 | +| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2832 | 17 | 1016 | 0 | | crossClusterReplication | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | | customBranding | [global-experience](https://github.com/orgs/elastic/teams/kibana-global-experience) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [Fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 107 | 0 | 88 | 1 | @@ -82,7 +82,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'revealImage' function and renderer to expressions | 14 | 0 | 14 | 3 | | | [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds 'shape' function and renderer to expressions | 148 | 0 | 146 | 0 | | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression Tagcloud plugin adds a `tagcloud` renderer and function to the expression plugin. The renderer will display the `Wordcloud` chart. | 7 | 0 | 7 | 0 | -| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression XY plugin adds a `xy` renderer and function to the expression plugin. The renderer will display the `xy` chart. | 170 | 0 | 160 | 13 | +| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-visualizations) | Expression XY plugin adds a `xy` renderer and function to the expression plugin. The renderer will display the `xy` chart. | 171 | 0 | 161 | 13 | | | [Visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Adds expression runtime to Kibana | 2205 | 74 | 1746 | 5 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 236 | 0 | 100 | 2 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Index pattern fields and ambiguous values formatters | 288 | 26 | 249 | 3 | @@ -111,7 +111,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | kibanaUsageCollection | [Kibana Telemetry](https://github.com/orgs/elastic/teams/kibana-telemetry) | - | 0 | 0 | 0 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 609 | 3 | 416 | 9 | | | [Security Team](https://github.com/orgs/elastic/teams/security-team) | - | 3 | 0 | 3 | 1 | -| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 693 | 0 | 598 | 52 | +| | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 694 | 0 | 599 | 52 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 8 | 0 | 8 | 0 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 3 | 0 | 3 | 0 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | @@ -126,7 +126,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 34 | 0 | 34 | 2 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 2 | 0 | 2 | 1 | -| | [Observability UI](https://github.com/orgs/elastic/teams/observability-ui) | - | 605 | 41 | 599 | 32 | +| | [Observability UI](https://github.com/orgs/elastic/teams/observability-ui) | - | 606 | 41 | 600 | 32 | | | [Security asset management](https://github.com/orgs/elastic/teams/security-asset-management) | - | 24 | 0 | 24 | 7 | | painlessLab | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | | | [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). | 217 | 7 | 161 | 11 | @@ -163,8 +163,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Security solution](https://github.com/orgs/elastic/teams/security-solution) | - | 257 | 1 | 214 | 20 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [Kibana Localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 586 | 11 | 557 | 53 | -| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds UI Actions service to Kibana | 144 | 2 | 99 | 11 | +| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 587 | 11 | 558 | 53 | +| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds UI Actions service to Kibana | 134 | 2 | 92 | 9 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Extends UI Actions plugin with more functionality | 206 | 0 | 140 | 9 | | | [Data Discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list which can be integrated into apps | 267 | 0 | 242 | 7 | | | [Data Discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | The `unifiedHistogram` plugin provides UI components to create a layout including a resizable histogram and a main display. | 63 | 0 | 16 | 1 | @@ -211,7 +211,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Owner missing] | - | 11 | 0 | 11 | 0 | | | [Owner missing] | - | 10 | 0 | 10 | 0 | | | [Owner missing] | - | 19 | 0 | 17 | 0 | -| | [Owner missing] | Uniform components for displaying UI actions in data cells | 15 | 0 | 12 | 3 | +| | [Owner missing] | Uniform components for displaying UI actions in data cells | 20 | 0 | 14 | 3 | | | [Owner missing] | - | 76 | 0 | 76 | 0 | | | [Owner missing] | - | 7 | 0 | 2 | 0 | | | [Owner missing] | - | 3 | 0 | 3 | 0 | @@ -368,10 +368,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | Kibana Core | - | 6 | 0 | 4 | 0 | | | Kibana Core | - | 2 | 0 | 1 | 0 | | | Kibana Core | - | 6 | 0 | 6 | 0 | -| | Kibana Core | - | 29 | 1 | 17 | 0 | +| | Kibana Core | - | 30 | 1 | 18 | 0 | | | Kibana Core | - | 11 | 1 | 11 | 3 | | | Kibana Core | - | 8 | 0 | 8 | 0 | -| | Kibana Core | - | 25 | 0 | 3 | 0 | +| | Kibana Core | - | 24 | 0 | 3 | 0 | | | Kibana Core | - | 32 | 1 | 16 | 0 | | | Kibana Core | - | 18 | 1 | 17 | 3 | | | Kibana Core | - | 6 | 0 | 6 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 75c9039f8979b..ad4d121202873 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index f65eeeb91a62b..148ce4163f187 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 399a0908d0f5a..f86b5ea1ad68b 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index b83d6d3af0b51..10a64ef76481e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 401c8ce0d0389..15e34aff07d77 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-01-27 +date: 2023-01-30 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 2942701883e5f..2bec837f88bb2 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-01-27 +date: 2023-01-30 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 9059f132d4e71..795ac6a0fb15d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 8fbd6569c1624..7123a0630fdc9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 6e04c37c030c6..a85d08d1dd6cb 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-01-27 +date: 2023-01-30 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 7a053a176c0bf..bcf415146653e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 35bdd65315d57..7e69c9aa7f330 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-01-27 +date: 2023-01-30 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 0466d68c94f90..fc23fab122614 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-01-27 +date: 2023-01-30 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 b58a7a01895cd..2a59f90373c6b 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-01-27 +date: 2023-01-30 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 f590e8554b1b9..e81521a36d9f3 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-01-27 +date: 2023-01-30 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 594f696fb3c50..ab38e735def3e 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-01-27 +date: 2023-01-30 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 b8f3377d5e089..db4ef30ffff3e 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-01-27 +date: 2023-01-30 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 ae0bd48a7df15..3d410710943c9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index c4b6317addbc8..47228fc6d6467 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-01-27 +date: 2023-01-30 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 d166b11049324..9719d01b3b16e 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-01-27 +date: 2023-01-30 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 1b8122c3eea79..f391462896f27 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-01-27 +date: 2023-01-30 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 604915b4c7096..7e0ae543b84d7 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-01-27 +date: 2023-01-30 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 c7a0868c703af..f2df54ac73815 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-01-27 +date: 2023-01-30 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 3351d739ab3c1..966397d69a08c 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-01-27 +date: 2023-01-30 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 9728f3d296803..e5e4626cebc7c 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-01-27 +date: 2023-01-30 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 d6066c5a8f19c..42c7119795c87 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-01-27 +date: 2023-01-30 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 81c2a0a5c224f..1c4babb819ffb 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-01-27 +date: 2023-01-30 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 72b3b2981113d..3f20854762aff 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-01-27 +date: 2023-01-30 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 e887c4a616747..61fc83e8d80d1 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 647cf38b44234..fdefb06e38d46 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-01-27 +date: 2023-01-30 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 82542f7863a55..efdbc8646e154 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-01-27 +date: 2023-01-30 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 30c01b5809ee0..d47d5255bcf4f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index 2ea4be3a6dfc4..8beabd8957f66 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -5241,6 +5241,20 @@ "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.RuleType.hasGetSummarizedAlerts", + "type": "CompoundType", + "tags": [], + "label": "hasGetSummarizedAlerts", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index a5b827d84c928..0eb4b68b7548e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 586 | 11 | 557 | 53 | +| 587 | 11 | 558 | 53 | ## Client diff --git a/api_docs/ui_actions.devdocs.json b/api_docs/ui_actions.devdocs.json index 85c23674f7d5f..5900d4aad0f68 100644 --- a/api_docs/ui_actions.devdocs.json +++ b/api_docs/ui_actions.devdocs.json @@ -836,76 +836,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "uiActions", - "id": "def-public.CellActions", - "type": "Function", - "tags": [], - "label": "CellActions", - "description": [], - "signature": [ - "({ field, triggerId, children, mode, showActionTooltips, visibleCellActions, metadata, }: React.PropsWithChildren<", - "CellActionsProps", - ">) => JSX.Element" - ], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "uiActions", - "id": "def-public.CellActions.$1", - "type": "CompoundType", - "tags": [], - "label": "{\n field,\n triggerId,\n children,\n mode,\n showActionTooltips = true,\n visibleCellActions = 3,\n metadata,\n}", - "description": [], - "signature": [ - "React.PropsWithChildren<", - "CellActionsProps", - ">" - ], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "uiActions", - "id": "def-public.CellActionsContextProvider", - "type": "Function", - "tags": [], - "label": "CellActionsContextProvider", - "description": [], - "signature": [ - "({ children, getTriggerCompatibleActions, }: React.PropsWithChildren) => JSX.Element" - ], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions_context.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "uiActions", - "id": "def-public.CellActionsContextProvider.$1", - "type": "CompoundType", - "tags": [], - "label": "{\n children,\n getTriggerCompatibleActions,\n}", - "description": [], - "signature": [ - "React.PropsWithChildren" - ], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions_context.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "uiActions", "id": "def-public.createAction", @@ -1700,100 +1630,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "uiActions", - "id": "def-public.CellActionExecutionContext", - "type": "Interface", - "tags": [], - "label": "CellActionExecutionContext", - "description": [], - "signature": [ - { - "pluginId": "uiActions", - "scope": "public", - "docId": "kibUiActionsPluginApi", - "section": "def-public.CellActionExecutionContext", - "text": "CellActionExecutionContext" - }, - " extends ", - { - "pluginId": "uiActions", - "scope": "public", - "docId": "kibUiActionsPluginApi", - "section": "def-public.ActionExecutionContext", - "text": "ActionExecutionContext" - }, - "" - ], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "uiActions", - "id": "def-public.CellActionExecutionContext.extraContentNodeRef", - "type": "Object", - "tags": [], - "label": "extraContentNodeRef", - "description": [ - "\nRef to a DOM node where the action can add custom HTML." - ], - "signature": [ - "React.MutableRefObject" - ], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "uiActions", - "id": "def-public.CellActionExecutionContext.nodeRef", - "type": "Object", - "tags": [], - "label": "nodeRef", - "description": [ - "\nRef to the node where the cell action are rendered." - ], - "signature": [ - "React.MutableRefObject" - ], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "uiActions", - "id": "def-public.CellActionExecutionContext.metadata", - "type": "Object", - "tags": [], - "label": "metadata", - "description": [ - "\nExtra configurations for actions." - ], - "signature": [ - "Record | undefined" - ], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions.tsx", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "uiActions", - "id": "def-public.CellActionExecutionContext.field", - "type": "Object", - "tags": [], - "label": "field", - "description": [], - "signature": [ - "CellActionField" - ], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions.tsx", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "uiActions", "id": "def-public.Presentable", @@ -2372,20 +2208,7 @@ "initialIsOpen": false } ], - "enums": [ - { - "parentPluginId": "uiActions", - "id": "def-public.CellActionsMode", - "type": "Enum", - "tags": [], - "label": "CellActionsMode", - "description": [], - "path": "src/plugins/ui_actions/public/cell_actions/components/cell_actions.tsx", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], + "enums": [], "misc": [ { "parentPluginId": "uiActions", diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 0a9c9e3a840ce..495102dc60bea 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 144 | 2 | 99 | 11 | +| 134 | 2 | 92 | 9 | ## Client @@ -43,9 +43,6 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services ### Interfaces -### Enums - - ### Consts, variables and types diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index fde9d9379e62e..53e3048ef591a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index fdd949f24e910..2a5c72c19a055 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 157993dc6b492..a23bcfb92f3d4 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 078a9bec19057..03f7841649b46 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index fa4f8ef736387..31747fe10f66a 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 15705935dd12f..4b0a87e5f55a3 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 9f7bf50bc8e7e..22d3654c6a69d 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 7622db863ceff..22d7e86e365a2 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index a9d88ccd62f34..f5d28f485cf74 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 0be59ed3e499d..0b3d5343a149e 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 3f5f190ac56fd..672d59a578bc6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 286055d453f6c..827923c9236e3 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index d6765bd753118..eef6fd0a968e6 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index eff3d6cf88b06..2052315ac60fc 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index b26a441c96a01..9a668ca887a6f 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 0c894e6f937ec..09a9a548e978c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index a215e3d822935..6495677661504 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 3d6ab852d5891..20790046ae6e9 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index c2ad8825fb20a..2d7bc6c01527c 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-01-27 +date: 2023-01-30 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/dev_docs/operations/packages_idm.mdx b/dev_docs/operations/packages_idm.mdx index 082af6605b092..8a589315239fe 100644 --- a/dev_docs/operations/packages_idm.mdx +++ b/dev_docs/operations/packages_idm.mdx @@ -51,19 +51,16 @@ Package types allow us to have many different packages, pre-defined build tasks, : These packages can be imported from all other packages. `shared-browser` -: These packages can be imported from `shared-browser` and `plugin-browser` packages. `shared-browser` packages may include Storybooks. +: These packages can be imported from `shared-browser` and `public` directories within `plugin` packages. `shared-browser` packages may include Storybooks. `shared-server` -: These packages can be imported from `shared-server` and `plugin-server` packages. +: These packages can be imported from `shared-server` and `server` directories within `plugin` packages. `shared-scss` -: These packages can be imported by `shared-browser` and `plugin-browser` packages, and expose an `index.scss` file to consumers instead of an `index.ts` file. +: These packages can be imported by `shared-browser` and `public` directories within `plugin` packages, and expose an `index.scss` file to consumers instead of an `index.ts` file. -`plugin-browser` -: These packages expose types to other packages via a root `types.ts` file. Module IDs must end with `-plugin-browser`. Consumers must use `import type` statements. - -`plugin-server` -: These packages expose types to other packages via a root `types.ts` file. Module IDs must end with `-plugin-server`. Consumers must use `import type` statements. +`plugin` +: These packages were automatically created from the existing plugins at the time we switched everything over to packages. Module IDs must end with `-plugin`. Consumers must use `import type` statements. `functional-test` : These packages expose one or more functional testing configurations, including API integration tests, and can not be imported by other packages. Separating functional and integration tests allows us to iterate on tests without rebuilding the application. Similarly, iterating and updating the application should mostly mean the tests don't need to rebuild. @@ -160,8 +157,7 @@ The solution to resolving a circular dependency has, thus far, been to break out There are a few package naming rules: - all packages must use the `@kbn/` namespace - - `plugin-browser`-type packages must end with `-plugin-browser` - - `plugin-server- type packages must end with `-plugin-server` + - `plugin`-type packages must end with `-plugin` - considering that we operate in a global namespace, avoid overly generic names Other than these rules, it's up to you and your team to decide on an appropriate name for your package. @@ -205,4 +201,4 @@ We're now entering Phase 2 of the plan, more details about the phases of our pla [status]: #what-works-now [idm-rfc]: https://docs.google.com/document/d/1Bhg601MoGQjqGMGdLWSLnkopRexwrcbf_0MNcUkhx3I "Internal Dependency Management RFC on Google Docs" -[pkgDirs]: https://github.com/elastic/kibana/blob/main/packages/kbn-bazel-packages/src/bazel_package_dirs.ts#L22 +[pkgDirs]: https://github.com/elastic/kibana/blob/main/packages/kbn-repo-packages/src/repo_package_dirs.js#L19 diff --git a/docs/apm/troubleshooting.asciidoc b/docs/apm/troubleshooting.asciidoc index 50345e1495314..74b95040a238c 100644 --- a/docs/apm/troubleshooting.asciidoc +++ b/docs/apm/troubleshooting.asciidoc @@ -93,13 +93,19 @@ Instead, we should strip away the unique information and group our transactions In this case, that means naming all blog transactions, `/blog`, and all documentation transactions, `/guide`. If you feel like you'd be losing valuable information by following this naming convention, don't fret! -You can always add additional metadata to your transactions using {apm-guide-ref-v}/metadata.html#labels-fields[labels] (indexed) or -{apm-guide-ref-v}/metadata.html#custom-fields[custom context] (non-indexed). +You can always add additional metadata to your transactions using {apm-guide-ref}/metadata.html#labels-fields[labels] (indexed) or +{apm-guide-ref}/metadata.html#custom-fields[custom context] (non-indexed). After ensuring you've correctly named your transactions, -you might still see an error in the APM app related to too many transaction names. -If this is the case, you can increase the default number of transaction groups displayed in the APM app by configuring -<>. +you might still see errors in the APM app related to transaction group limit reached: + +`The number of transaction groups has been reached. Current APM server capacity for handling unique transaction groups has been reached. There are at least X transactions missing in this list. Please decrease the number of transaction groups in your service or increase the memory allocated to APM server.` + +You will see this warning if an agent is creating too many transaction groups. This could indicate incorrect instrumentation which will have to be fixed in your application. Alternatively you can increase the memory of the APM server. + +`Number of transaction groups exceed the allowed maximum(1,000) that are displayed. The maximum number of transaction groups displayed in Kibana has been reached. Try narrowing down results by using the query bar..` + +You will see this warning if your results have more than `1000` unique transaction groups. Alternatively you can use the query bar to reduce the number of unique transaction groups in your results. **More information** diff --git a/docs/developer/architecture/kibana-platform-plugin-api.asciidoc b/docs/developer/architecture/kibana-platform-plugin-api.asciidoc index af3dfa8647656..58ad9665f8495 100644 --- a/docs/developer/architecture/kibana-platform-plugin-api.asciidoc +++ b/docs/developer/architecture/kibana-platform-plugin-api.asciidoc @@ -176,7 +176,6 @@ of Kibana. |store session data in the LocalStorage when the user navigates away from {kib}, etc. |=== -There is no equivalent behavior to `start` or `stop` in legacy plugins. Conversely, there is no equivalent to `uiExports` in Kibana Platform plugins. As a general rule of thumb, features that were registered via `uiExports` are now registered during the `setup` phase. Most of everything else should move @@ -339,9 +338,3 @@ interface where the property name is the plugin's ID. the second argument to the plugin. <3> Notice that the type for the setup and start lifecycles are different. Plugin lifecycle functions can only access the APIs that are exposed _during_ that lifecycle. - -=== Migrating legacy plugins - -In Kibana 7.10, support for legacy plugins was removed. See -<> for detailed information on how to convert existing -legacy plugins to this new API. diff --git a/docs/developer/getting-started/development-plugin-resources.asciidoc b/docs/developer/getting-started/development-plugin-resources.asciidoc index 9aefeabb32a55..20c080bdb1916 100644 --- a/docs/developer/getting-started/development-plugin-resources.asciidoc +++ b/docs/developer/getting-started/development-plugin-resources.asciidoc @@ -48,13 +48,6 @@ TypeScript code is automatically converted into JavaScript during development, but not in the distributable version of {kib}. If you use the {kib-repo}blob/{branch}/packages/kbn-plugin-helpers[@kbn/plugin-helpers] to build your plugin, then your `.ts` and `.tsx` files will be permanently transpiled before your plugin is archived. If you have your own build process, make sure to run the TypeScript compiler on your source files and ship the compilation output so that your plugin will work with the distributable version of {kib}. -[discrete] -=== {kib} platform migration guide - -<> -provides an action plan for moving a legacy plugin to the new platform. -<> migration examples for the legacy core services. - [discrete] === Externally developed plugins diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 4d0e8e1999749..2408866ced99a 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -40,6 +40,10 @@ as uiSettings within the code. |Console provides the user with tools for storing and executing requests against Elasticsearch. +|{kib-repo}blob/{branch}/src/plugins/content_management/README.md[contentManagement] +|The content management plugin provides functionality to manage content in Kibana. + + |{kib-repo}blob/{branch}/src/plugins/controls/README.mdx[controls] |The Controls plugin contains Embeddables which can be used to add user-friendly interactivity to apps. diff --git a/docs/developer/plugin/index.asciidoc b/docs/developer/plugin/index.asciidoc index c74e4c91ef278..3b44484644a28 100644 --- a/docs/developer/plugin/index.asciidoc +++ b/docs/developer/plugin/index.asciidoc @@ -10,15 +10,11 @@ Most developers who contribute code directly to the {kib} repo are writing code start. However, there are a few differences when developing plugins outside the {kib} repo. These differences are covered here. * <> -* <> -* <> * <> * <> * <> include::plugin-tooling.asciidoc[leveloffset=+1] -include::migrating-legacy-plugins.asciidoc[leveloffset=+1] -include::migrating-legacy-plugins-examples.asciidoc[leveloffset=+1] include::external-plugin-functional-tests.asciidoc[leveloffset=+1] include::external-plugin-localization.asciidoc[leveloffset=+1] -include::testing-kibana-plugin.asciidoc[leveloffset=+1] +include::testing-kibana-plugin.asciidoc[leveloffset=+1] \ No newline at end of file diff --git a/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc b/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc deleted file mode 100644 index b674d084a76ca..0000000000000 --- a/docs/developer/plugin/migrating-legacy-plugins-examples.asciidoc +++ /dev/null @@ -1,1256 +0,0 @@ -[[migrating-legacy-plugins-examples]] -== Migration Examples - -This document is a list of examples of how to migrate plugin code from -legacy APIs to their {kib} Platform equivalents. - -[[config-migration]] -=== Configuration -==== Declaring config schema - -Declaring the schema of your configuration fields is similar to the -Legacy Platform, but uses the `@kbn/config-schema` package instead of -Joi. This package has full TypeScript support out-of-the-box. - -*Legacy config schema* -[source,typescript] ----- -import Joi from 'joi'; - -new kibana.Plugin({ - config() { - return Joi.object({ - enabled: Joi.boolean().default(true), - defaultAppId: Joi.string().default('home'), - index: Joi.string().default('.kibana'), - disableWelcomeScreen: Joi.boolean().default(false), - autocompleteTerminateAfter: Joi.number().integer().min(1).default(100000), - }) - } -}); ----- - -*{kib} Platform equivalent* -[source,typescript] ----- -import { schema, TypeOf } from '@kbn/config-schema'; - -export const config = { - schema: schema.object({ - enabled: schema.boolean({ defaultValue: true }), - defaultAppId: schema.string({ defaultValue: true }), - index: schema.string({ defaultValue: '.kibana' }), - disableWelcomeScreen: schema.boolean({ defaultValue: false }), - autocompleteTerminateAfter: schema.duration({ min: 1, defaultValue: 100000 }), - }) -}; - -// @kbn/config-schema is written in TypeScript, so you can use your schema -// definition to create a type to use in your plugin code. -export type MyPluginConfig = TypeOf; ----- - -==== Using {kib} config in a new plugin - -After setting the config schema for your plugin, you might want to read -configuration values from your plugin. It is provided as part of the -{kib-repo}/tree/{branch}/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.md[PluginInitializerContext] -in the _constructor_ of the plugin: - -*plugins/my_plugin/(public|server)/index.ts* -[source,typescript] ----- -import type { PluginInitializerContext } from '@kbn/core/server'; -import { MyPlugin } from './plugin'; - -export function plugin(initializerContext: PluginInitializerContext) { - return new MyPlugin(initializerContext); -} ----- - -*plugins/my_plugin/(public|server)/plugin.ts* -[source,typescript] ----- -import { CoreSetup, Logger, Plugin, PluginInitializerContext, PluginName } from '@kbn/core/server'; -import type { MyPluginConfig } from './config'; - -export class MyPlugin implements Plugin { - private readonly config: MyPluginConfig; - private readonly log: Logger; - - constructor(private readonly initializerContext: PluginInitializerContext) { - this.log = initializerContext.logger.get(); - this.config = initializerContext.config.get(); - } - - public setup(core: CoreSetup, deps: Record) { - const { someConfigValue } = this.config; - } -} ----- - -Additionally, some plugins need to access the runtime env configuration. - -[source,typescript] ----- -export class MyPlugin implements Plugin { - public setup(core: CoreSetup, deps: Record) { - const { mode: { dev }, packageInfo: { version } } = this.initializerContext.env - } ----- - -=== Creating a {kib} Platform plugin - -For example, if you want to move the legacy `demoplugin` plugin's -configuration to the {kib} Platform, you could create the {kib} Platform plugin with the -same name in `plugins/demoplugin` with the following files: - -*plugins/demoplugin/kibana.json* -[source,json5] ----- -{ - "id": "demoplugin", - "server": true -} ----- - -*plugins/demoplugin/server/index.ts* -[source,typescript] ----- -import { schema, TypeOf } from '@kbn/config-schema'; -import type { PluginInitializerContext } from '@kbn/core/server'; -import { DemoPlugin } from './plugin'; - -export const config = { - schema: schema.object({ - enabled: schema.boolean({ defaultValue: true }), - }), -} - -export const plugin = (initContext: PluginInitializerContext) => new DemoPlugin(initContext); - -export type DemoPluginConfig = TypeOf; -export { DemoPluginSetup } from './plugin'; ----- - -*plugins/demoplugin/server/plugin.ts* -[source,typescript] ----- -import type { PluginInitializerContext, Plugin, CoreSetup } from '@kbn/core/server'; -import type { DemoPluginConfig } from '.'; -export interface DemoPluginSetup {}; - -export class DemoPlugin implements Plugin { - constructor(private readonly initContext: PluginInitializerContext) {} - - public setup(core: CoreSetup) { - return {}; - } - - public start() {} - public stop() {} -} ----- - -[[http-routes-migration]] -=== HTTP Routes - -In the legacy platform, plugins have direct access to the Hapi `server` -object, which gives full access to all of Hapi’s API. In the New -Platform, plugins have access to the -{kib-repo}/tree/{branch}/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.md[HttpServiceSetup] -interface, which is exposed via the -{kib-repo}/tree/{branch}/docs/development/core/server/kibana-plugin-core-server.coresetup.md[CoreSetup] -object injected into the `setup` method of server-side plugins. - -This interface has a different API with slightly different behaviors. - -* All input (body, query parameters, and URL parameters) must be -validated using the `@kbn/config-schema` package. If no validation -schema is provided, these values will be empty objects. -* All exceptions thrown by handlers result in 500 errors. If you need a -specific HTTP error code, catch any exceptions in your handler and -construct the appropriate response using the provided response factory. -While you can continue using the `Boom` module internally in your -plugin, the framework does not have native support for converting Boom -exceptions into HTTP responses. - -Migrate legacy route registration: -*legacy/plugins/demoplugin/index.ts* -[source,typescript] ----- -import Joi from 'joi'; - -new kibana.Plugin({ - init(server) { - server.route({ - path: '/api/demoplugin/search', - method: 'POST', - options: { - validate: { - payload: Joi.object({ - field1: Joi.string().required(), - }), - } - }, - handler(req, h) { - return { message: `Received field1: ${req.payload.field1}` }; - } - }); - } -}); ----- -to the {kib} platform format: -*plugins/demoplugin/server/plugin.ts* -[source,typescript] ----- -import { schema } from '@kbn/config-schema'; -import type { CoreSetup } from '@kbn/core/server'; - -export class DemoPlugin { - public setup(core: CoreSetup) { - const router = core.http.createRouter(); - router.post( - { - path: '/api/demoplugin/search', - validate: { - body: schema.object({ - field1: schema.string(), - }), - } - }, - (context, req, res) => { - return res.ok({ - body: { - message: `Received field1: ${req.body.field1}` - } - }); - } - ) - } -} ----- - -If your plugin still relies on throwing Boom errors from routes, you can -use the `router.handleLegacyErrors` as a temporary solution until error -migration is complete: - -*plugins/demoplugin/server/plugin.ts* -[source,typescript] ----- -import { schema } from '@kbn/config-schema'; -import { CoreSetup } from '@kbn/core/server'; -import Boom from '@hapi/boom'; - -export class DemoPlugin { - public setup(core: CoreSetup) { - const router = core.http.createRouter(); - router.post( - { - path: '/api/demoplugin/search', - validate: { - body: schema.object({ - field1: schema.string(), - }), - } - }, - router.handleLegacyErrors((context, req, res) => { - throw Boom.notFound('not there'); // will be converted into proper Platform error - }) - ) - } -} ----- - -=== Accessing Services - -Services in the Legacy Platform were typically available via methods on -either `server.plugins.*`, `server.*`, or `req.*`. In the {kib} Platform, -all services are available via the `context` argument to the route -handler. The type of this argument is the -{kib-repo}/tree/{branch}/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md[RequestHandlerContext]. -The APIs available here will include all Core services and any services registered by plugins this plugin depends on. - -*legacy/plugins/demoplugin/index.ts* -[source,typescript] ----- -new kibana.Plugin({ - init(server) { - const { callWithRequest } = server.plugins.elasticsearch.getCluster('data'); - - server.route({ - path: '/api/my-plugin/my-route', - method: 'POST', - async handler(req, h) { - const results = await callWithRequest(req, 'search', query); - return { results }; - } - }); - } -}); ----- - -*plugins/demoplugin/server/plugin.ts* -[source,typescript] ----- -export class DemoPlugin { - public setup(core) { - const router = core.http.createRouter(); - router.post( - { - path: '/api/my-plugin/my-route', - }, - async (context, req, res) => { - const results = await context.core.elasticsearch.client.asCurrentUser.search(query); - return res.ok({ - body: { results } - }); - } - ) - } -} ----- - -=== Migrating Hapi pre-handlers - -In the Legacy Platform, routes could provide a `pre` option in their -config to register a function that should be run before the route -handler. These `pre` handlers allow routes to share some business -logic that may do some pre-work or validation. In {kib}, these are -often used for license checks. - -The {kib} Platform’s HTTP interface does not provide this -functionality. However, it is simple enough to port over using -a higher-order function that can wrap the route handler. - -==== Simple example - -In this simple example, a pre-handler is used to either abort the -request with an error or continue as normal. This is a simple -`gate-keeping` pattern. - -[source,typescript] ----- -// Legacy pre-handler -const licensePreRouting = (request) => { - const licenseInfo = getMyPluginLicenseInfo(request.server.plugins.xpack_main); - if (!licenseInfo.isOneOf(['gold', 'platinum', 'trial'])) { - throw Boom.forbidden(`You don't have the right license for MyPlugin!`); - } -} - -server.route({ - method: 'GET', - path: '/api/my-plugin/do-something', - config: { - pre: [{ method: licensePreRouting }] - }, - handler: (req) => { - return doSomethingInteresting(); - } -}) ----- - -In the {kib} Platform, the same functionality can be achieved by -creating a function that takes a route handler (or factory for a route -handler) as an argument and either successfully invokes it or -returns an error response. - -This a `high-order handler` similar to the `high-order -component` pattern common in the React ecosystem. - -[source,typescript] ----- -// Kibana Platform high-order handler -const checkLicense = ( - handler: RequestHandler -): RequestHandler => { - return (context, req, res) => { - const licenseInfo = getMyPluginLicenseInfo(context.licensing.license); - - if (licenseInfo.hasAtLeast('gold')) { - return handler(context, req, res); - } else { - return res.forbidden({ body: `You don't have the right license for MyPlugin!` }); - } - } -} - -router.get( - { path: '/api/my-plugin/do-something', validate: false }, - checkLicense(async (context, req, res) => { - const results = doSomethingInteresting(); - return res.ok({ body: results }); - }), -) ----- - -==== Full Example - -In some cases, the route handler may need access to data that the -pre-handler retrieves. In this case, you can utilize a handler _factory_ -rather than a raw handler. - -[source,typescript] ----- -// Legacy pre-handler -const licensePreRouting = (request) => { - const licenseInfo = getMyPluginLicenseInfo(request.server.plugins.xpack_main); - if (licenseInfo.isOneOf(['gold', 'platinum', 'trial'])) { - // In this case, the return value of the pre-handler is made available on - // whatever the 'assign' option is in the route config. - return licenseInfo; - } else { - // In this case, the route handler is never called and the user gets this - // error message - throw Boom.forbidden(`You don't have the right license for MyPlugin!`); - } -} - -server.route({ - method: 'GET', - path: '/api/my-plugin/do-something', - config: { - pre: [{ method: licensePreRouting, assign: 'licenseInfo' }] - }, - handler: (req) => { - const licenseInfo = req.pre.licenseInfo; - return doSomethingInteresting(licenseInfo); - } -}) ----- - -In many cases, it may be simpler to duplicate the function call to -retrieve the data again in the main handler. In other cases, you -can utilize a handler _factory_ rather than a raw handler as the -argument to your high-order handler. This way, the high-order handler can -pass arbitrary arguments to the route handler. - -[source,typescript] ----- -// Kibana Platform high-order handler -const checkLicense = ( - handlerFactory: (licenseInfo: MyPluginLicenseInfo) => RequestHandler -): RequestHandler => { - return (context, req, res) => { - const licenseInfo = getMyPluginLicenseInfo(context.licensing.license); - - if (licenseInfo.hasAtLeast('gold')) { - const handler = handlerFactory(licenseInfo); - return handler(context, req, res); - } else { - return res.forbidden({ body: `You don't have the right license for MyPlugin!` }); - } - } -} - -router.get( - { path: '/api/my-plugin/do-something', validate: false }, - checkLicense(licenseInfo => async (context, req, res) => { - const results = doSomethingInteresting(licenseInfo); - return res.ok({ body: results }); - }), -) ----- - -=== Chrome - -In the Legacy Platform, the `ui/chrome` import contained APIs for a very -wide range of features. In the {kib} Platform, some of these APIs have -changed or moved elsewhere. See <>. - -==== Updating an application navlink - -In the legacy platform, the navlink could be updated using -`chrome.navLinks.update`. - -[source,typescript] ----- -uiModules.get('xpack/ml').run(() => { - const showAppLink = xpackInfo.get('features.ml.showLinks', false); - const isAvailable = xpackInfo.get('features.ml.isAvailable', false); - - const navLinkUpdates = { - // hide by default, only show once the xpackInfo is initialized - hidden: !showAppLink, - disabled: !showAppLink || (showAppLink && !isAvailable), - }; - - npStart.core.chrome.navLinks.update('ml', navLinkUpdates); -}); ----- - -In the {kib} Platform, navlinks should not be updated directly. Instead, -it is now possible to add an `updater` when registering an application -to change the application or the navlink state at runtime. - -[source,typescript] ----- -// my_plugin has a required dependency to the `licensing` plugin -interface MyPluginSetupDeps { - licensing: LicensingPluginSetup; -} - -export class MyPlugin implements Plugin { - setup({ application }, { licensing }: MyPluginSetupDeps) { - const updater$ = licensing.license$.pipe( - map(license => { - const { hidden, disabled } = calcStatusFor(license); - if (hidden) return { navLinkStatus: AppNavLinkStatus.hidden }; - if (disabled) return { navLinkStatus: AppNavLinkStatus.disabled }; - return { navLinkStatus: AppNavLinkStatus.default }; - }) - ); - - application.register({ - id: 'my-app', - title: 'My App', - updater$, - async mount(params) { - const { renderApp } = await import('./application'); - return renderApp(params); - }, - }); - } ----- - -=== Chromeless Applications - -In {kib}, a `chromeless` application is one where the primary {kib} -UI components such as header or navigation can be hidden. In the legacy -platform, these were referred to as `hidden` applications and were set -via the `hidden` property in a {kib} plugin. Chromeless applications -are also not displayed in the left navbar. - -To mark an application as chromeless, specify `chromeless: true` when -registering your application to hide the chrome UI when the application -is mounted: - -[source,typescript] ----- -application.register({ - id: 'chromeless', - chromeless: true, - async mount(context, params) { - /* ... */ - }, -}); ----- - -If you wish to render your application at a route that does not follow -the `/app/${appId}` pattern, this can be done via the `appRoute` -property. Doing this currently requires you to register a server route -where you can return a bootstrapped HTML page for your application -bundle. - -[source,typescript] ----- -application.register({ - id: 'chromeless', - appRoute: '/chromeless', - chromeless: true, - async mount(context, params) { - /* ... */ - }, -}); ----- - -[[render-html-migration]] -=== Render HTML Content - -You can return a blank HTML page bootstrapped with the core application -bundle from an HTTP route handler via the `httpResources` service. You -may wish to do this if you are rendering a chromeless application with a -custom application route or have other custom rendering needs. - -[source,typescript] ----- -httpResources.register( - { path: '/chromeless', validate: false }, - (context, request, response) => { - //... some logic - return response.renderCoreApp(); - } -); ----- - -You can also exclude user data from the bundle metadata. User -data comprises all UI Settings that are _user provided_, then injected -into the page. You may wish to exclude fetching this data if not -authorized or to slim the page size. - -[source,typescript] ----- -httpResources.register( - { path: '/', validate: false, options: { authRequired: false } }, - (context, request, response) => { - //... some logic - return response.renderAnonymousCoreApp(); - } -); ----- - -[[saved-objects-migration]] -=== Saved Objects types - -In the legacy platform, saved object types were registered using static -definitions in the `uiExports` part of the plugin manifest. - -In the {kib} Platform, all these registrations are performed -programmatically during your plugin’s `setup` phase, using the core -`savedObjects`’s `registerType` setup API. - -The most notable difference is that in the {kib} Platform, the type -registration is performed in a single call to `registerType`, passing a -new `SavedObjectsType` structure that is a superset of the legacy -`schema`, `migrations` `mappings` and `savedObjectsManagement`. - -==== Concrete example - -Suppose you have the following in a legacy plugin: - -*legacy/plugins/demoplugin/index.ts* -[source,js] ----- -import mappings from './mappings.json'; -import { migrations } from './migrations'; - -new kibana.Plugin({ - init(server){ - // [...] - }, - uiExports: { - mappings, - migrations, - savedObjectSchemas: { - 'first-type': { - isNamespaceAgnostic: true, - }, - 'second-type': { - isHidden: true, - }, - }, - savedObjectsManagement: { - 'first-type': { - isImportableAndExportable: true, - icon: 'myFirstIcon', - defaultSearchField: 'title', - getTitle(obj) { - return obj.attributes.title; - }, - getEditUrl(obj) { - return `/some-url/${encodeURIComponent(obj.id)}`; - }, - }, - 'second-type': { - isImportableAndExportable: false, - icon: 'mySecondIcon', - getTitle(obj) { - return obj.attributes.myTitleField; - }, - getInAppUrl(obj) { - return { - path: `/some-url/${encodeURIComponent(obj.id)}`, - uiCapabilitiesPath: 'myPlugin.myType.show', - }; - }, - }, - }, - }, -}) ----- - -*legacy/plugins/demoplugin/mappings.json* -[source,json] ----- -{ - "first-type": { - "properties": { - "someField": { - "type": "text" - }, - "anotherField": { - "type": "text" - } - } - }, - "second-type": { - "properties": { - "textField": { - "type": "text" - }, - "boolField": { - "type": "boolean" - } - } - } -} ----- -*legacy/plugins/demoplugin/migrations.js* -[source,js] ----- -export const migrations = { - 'first-type': { - '1.0.0': migrateFirstTypeToV1, - '2.0.0': migrateFirstTypeToV2, - }, - 'second-type': { - '1.5.0': migrateSecondTypeToV15, - } -} ----- - -To migrate this, you have to regroup the declaration per-type. - -First type: -*plugins/demoplugin/server/saved_objects/first_type.ts* -[source,typescript] ----- -import type { SavedObjectsType } from '@kbn/core/server'; - -export const firstType: SavedObjectsType = { - name: 'first-type', - hidden: false, - namespaceType: 'agnostic', - mappings: { - properties: { - someField: { - type: 'text', - }, - anotherField: { - type: 'text', - }, - }, - }, - migrations: { - '1.0.0': migrateFirstTypeToV1, - '2.0.0': migrateFirstTypeToV2, - }, - management: { - importableAndExportable: true, - icon: 'myFirstIcon', - defaultSearchField: 'title', - getTitle(obj) { - return obj.attributes.title; - }, - getEditUrl(obj) { - return `/some-url/${encodeURIComponent(obj.id)}`; - }, - }, -}; ----- - -Second type: -*plugins/demoplugin/server/saved_objects/second_type.ts* -[source,typescript] ----- -import type { SavedObjectsType } from '@kbn/core/server'; - -export const secondType: SavedObjectsType = { - name: 'second-type', - hidden: true, - namespaceType: 'single', - mappings: { - properties: { - textField: { - type: 'text', - }, - boolField: { - type: 'boolean', - }, - }, - }, - migrations: { - '1.5.0': migrateSecondTypeToV15, - }, - management: { - importableAndExportable: false, - icon: 'mySecondIcon', - getTitle(obj) { - return obj.attributes.myTitleField; - }, - getInAppUrl(obj) { - return { - path: `/some-url/${encodeURIComponent(obj.id)}`, - uiCapabilitiesPath: 'myPlugin.myType.show', - }; - }, - }, -}; ----- - -Registration in the plugin’s setup phase: -*plugins/demoplugin/server/plugin.ts* -[source,typescript] ----- -import { firstType, secondType } from './saved_objects'; - -export class DemoPlugin implements Plugin { - setup({ savedObjects }) { - savedObjects.registerType(firstType); - savedObjects.registerType(secondType); - } -} ----- - -==== Changes in structure compared to legacy - -The {kib} Platform `registerType` expected input is very close to the legacy format. -However, there are some minor changes: - -* The `schema.isNamespaceAgnostic` property has been renamed: -`SavedObjectsType.namespaceType`. It no longer accepts a boolean but -instead an enum of `single`, `multiple`, `multiple-isolated`, or `agnostic` (see -{kib-repo}/tree/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsnamespacetype.md[SavedObjectsNamespaceType]). -* The `schema.indexPattern` was accepting either a `string` or a -`(config: LegacyConfig) => string`. `SavedObjectsType.indexPattern` only -accepts a string, as you can access the configuration during your -plugin’s setup phase. -* The `savedObjectsManagement.isImportableAndExportable` property has -been renamed: `SavedObjectsType.management.importableAndExportable`. -* The migration function signature has changed: In legacy, it used to be -[source,typescript] ----- -`(doc: SavedObjectUnsanitizedDoc, log: SavedObjectsMigrationLogger) => SavedObjectUnsanitizedDoc;` ----- -In {kib} Platform, it is -[source,typescript] ----- -`(doc: SavedObjectUnsanitizedDoc, context: SavedObjectMigrationContext) => SavedObjectUnsanitizedDoc;` ----- - -With context being: - -[source,typescript] ----- -export interface SavedObjectMigrationContext { - log: SavedObjectsMigrationLogger; -} ----- - -The changes is very minor though. The legacy migration: - -[source,js] ----- -const migration = (doc, log) => {...} ----- - -Would be converted to: - -[source,typescript] ----- -const migration: SavedObjectMigrationFn = (doc, { log }) => {...} ----- - -=== UiSettings - -UiSettings defaults registration performed during `setup` phase via -`core.uiSettings.register` API. - -*legacy/plugins/demoplugin/index.js* -[source,js] ----- -uiExports: { - uiSettingDefaults: { - 'my-plugin:my-setting': { - name: 'just-work', - value: true, - description: 'make it work', - category: ['my-category'], - }, - } -} ----- - -*plugins/demoplugin/server/plugin.ts* -[source,typescript] ----- -setup(core: CoreSetup){ - core.uiSettings.register({ - 'my-plugin:my-setting': { - name: 'just-work', - value: true, - description: 'make it work', - category: ['my-category'], - schema: schema.boolean(), - }, - }) -} ----- - -=== Elasticsearch client - -The new elasticsearch client is a thin wrapper around -`@elastic/elasticsearch`’s `Client` class. Even if the API is quite -close to the legacy client {kib} was previously using, there are some -subtle changes to take into account during migration. - -https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/index.html[Official -client documentation] - -==== Client API Changes - -Refer to the -https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/breaking-changes.html[Breaking -changes list] for more information about the changes between the legacy -and new client. - -The most significant changes on the Kibana side for the consumers are the following: - -===== User client accessor -Internal /current user client accessors has been renamed and are now -properties instead of functions: - -* `callAsInternalUser('ping')` -> `asInternalUser.ping()` -* `callAsCurrentUser('ping')` -> `asCurrentUser.ping()` -* the API now reflects the `Client`’s instead of leveraging the -string-based endpoint names the `LegacyAPICaller` was using. - -Before: - -[source,typescript] ----- -const body = await client.callAsInternalUser('indices.get', { index: 'id' }); ----- - -After: - -[source,typescript] ----- -const { body } = await client.asInternalUser.indices.get({ index: 'id' }); ----- - -===== Response object -Calling any ES endpoint now returns the whole response object instead -of only the body payload. - -Before: - -[source,typescript] ----- -const body = await legacyClient.callAsInternalUser('get', { id: 'id' }); ----- - -After: - -[source,typescript] ----- -const { body } = await client.asInternalUser.get({ id: 'id' }); ----- - -Note that more information from the ES response is available: - -[source,typescript] ----- -const { - body, // response payload - statusCode, // http status code of the response - headers, // response headers - warnings, // warnings returned from ES - meta // meta information about the request, such as request parameters, number of attempts and so on -} = await client.asInternalUser.get({ id: 'id' }); ----- - -===== Response Type -All API methods are now generic to allow specifying the response body. -type - -Before: - -[source,typescript] ----- -const body: GetResponse = await legacyClient.callAsInternalUser('get', { id: 'id' }); ----- - -After: - -[source,typescript] ----- -// body is of type `GetResponse` -const { body } = await client.asInternalUser.get({ id: 'id' }); -// fallback to `Record` if unspecified -const { body } = await client.asInternalUser.get({ id: 'id' }); ----- - -The new client doesn’t provide exhaustive typings for the response -object yet. You might have to copy response type definitions from the -Legacy Elasticsearch library until the additional announcements. - -[source,typescript] ----- -// Kibana provides a few typings for internal purposes -import type { SearchResponse } from '@kbn/core/server'; -type SearchSource = {...}; -type SearchBody = SearchResponse; -const { body } = await client.search(...); -interface Info {...} -const { body } = await client.info(...); ----- - -===== Errors -The returned error types changed. - -There are no longer specific errors for every HTTP status code (such as -`BadRequest` or `NotFound`). A generic `ResponseError` with the specific -`statusCode` is thrown instead. - -Before: - -[source,typescript] ----- -import { errors } from 'elasticsearch'; -try { - await legacyClient.callAsInternalUser('ping'); -} catch(e) { - if(e instanceof errors.NotFound) { - // do something - } - if(e.status === 401) {} -} ----- - -After: - -[source,typescript] ----- -import { errors } from '@elastic/elasticsearch'; -try { - await client.asInternalUser.ping(); -} catch(e) { - if(e instanceof errors.ResponseError && e.statusCode === 404) { - // do something - } - // also possible, as all errors got a name property with the name of the class, - // so this slightly better in term of performances - if(e.name === 'ResponseError' && e.statusCode === 404) { - // do something - } - if(e.statusCode === 401) {...} -} ----- - -===== Parameter naming format -The parameter property names changed from camelCase to snake_case - -Even if technically, the JavaScript client accepts both formats, the -TypeScript definitions are only defining snake_case properties. - -Before: - -[source,typescript] ----- -legacyClient.callAsCurrentUser('get', { - id: 'id', - storedFields: ['some', 'fields'], -}) ----- - -After: - -[source,typescript] ----- -client.asCurrentUser.get({ - id: 'id', - stored_fields: ['some', 'fields'], -}) ----- - -===== Request abortion -The request abortion API changed - -All promises returned from the client API calls now have an `abort` -method that can be used to cancel the request. - -Before: - -[source,typescript] ----- -const controller = new AbortController(); -legacyClient.callAsCurrentUser('ping', {}, { - signal: controller.signal, -}) -// later -controller.abort(); ----- - -After: - -[source,typescript] ----- -const request = client.asCurrentUser.ping(); -// later -request.abort(); ----- - -===== Headers -It is now possible to override headers when performing specific API -calls. - -Note that doing so is strongly discouraged due to potential side effects -with the ES service internal behavior when scoping as the internal or as -the current user. - -[source,typescript] ----- -const request = client.asCurrentUser.ping({}, { - headers: { - authorization: 'foo', - custom: 'bar', - } -}); ----- - -===== Functional tests -Functional tests are subject to migration to the new client as well. - -Before: - -[source,typescript] ----- -const client = getService('legacyEs'); ----- - -After: - -[source,typescript] ----- -const client = getService('es'); ----- - -==== Accessing the client from a route handler - -Apart from the API format change, accessing the client from within a -route handler did not change. As it was done for the legacy client, a -preconfigured <> bound to an incoming request is accessible using -the `core` context provider: - -[source,typescript] ----- -router.get( - { - path: '/my-route', - }, - async (context, req, res) => { - const { client } = context.core.elasticsearch; - // call as current user - const res = await client.asCurrentUser.ping(); - // call as internal user - const res2 = await client.asInternalUser.search(options); - return res.ok({ body: 'ok' }); - } -); ----- - -==== Accessing the client from a collector's `fetch` method - -At the moment, the `fetch` method's context receives preconfigured -<> for Elasticsearch and SavedObjects. -To help in the transition, both, the legacy (`callCluster`) and new clients are provided, -but we strongly discourage using the deprecated legacy ones for any new implementation. - -[source,typescript] ----- -usageCollection.makeUsageCollector({ - type: 'my-collector', - isReady: async () => true, // Logic to confirm the `fetch` method is ready to be called - schema: {...}, - async fetch(context) { - const { callCluster, esClient, soClient } = context; - - // Before: - const result = callCluster('search', options) - - // After: - const { body: result } = esClient.search(options); - - return result; - } -}); ----- - -Regarding the `soClient`, it is encouraged to use it instead of the plugin's owned SavedObject's repository -as we used to do in the past. - -Before: - -[source,typescript] ----- -function getUsageCollector( - usageCollection: UsageCollectionSetup, - getSavedObjectsRepository: () => ISavedObjectsRepository | undefined -) { - usageCollection.makeUsageCollector({ - type: 'my-collector', - isReady: () => typeof getSavedObjectsRepository() !== 'undefined', - schema: {...}, - async fetch() { - const savedObjectsRepository = getSavedObjectsRepository(); - - const { attributes: result } = await savedObjectsRepository.get('my-so-type', 'my-so-id'); - - return result; - } - }); -} ----- - -After: - -[source,typescript] ----- -function getUsageCollector(usageCollection: UsageCollectionSetup) { - usageCollection.makeUsageCollector({ - type: 'my-collector', - isReady: () => true, - schema: {...}, - async fetch({ soClient }) { - const { attributes: result } = await soClient.get('my-so-type', 'my-so-id'); - - return result; - } - }); -} ----- - -==== Creating a custom client - -Note that the `plugins` option is no longer available on the new -client. As the API is now exhaustive, adding custom endpoints using -plugins should no longer be necessary. - -The API to create custom clients did not change much: - -Before: - -[source,typescript] ----- -const customClient = coreStart.elasticsearch.legacy.createClient('my-custom-client', customConfig); -// do something with the client, such as -await customClient.callAsInternalUser('ping'); -// custom client are closable -customClient.close(); ----- - -After: - -[source,typescript] ----- -const customClient = coreStart.elasticsearch.createClient('my-custom-client', customConfig); -// do something with the client, such as -await customClient.asInternalUser.ping(); -// custom client are closable -customClient.close(); ----- - -If, for any reasons, you still need to reach an endpoint not listed on -the client API, using `request.transport` is still possible: - -[source,typescript] ----- -const { body } = await client.asCurrentUser.transport.request({ - method: 'get', - path: '/my-custom-endpoint', - body: { my: 'payload'}, - querystring: { param: 'foo' } -}) ----- diff --git a/docs/developer/plugin/migrating-legacy-plugins.asciidoc b/docs/developer/plugin/migrating-legacy-plugins.asciidoc deleted file mode 100644 index 337d02b11ee91..0000000000000 --- a/docs/developer/plugin/migrating-legacy-plugins.asciidoc +++ /dev/null @@ -1,608 +0,0 @@ -[[migrating-legacy-plugins]] -== Migrating legacy plugins to the {kib} Platform - -[IMPORTANT] -============================================== -In {kib} 7.10, support for legacy-style {kib} plugins was completely removed. -Moving forward, all plugins must be built on the new {kib} Platform Plugin API. -This guide is intended to assist plugin authors in migrating their legacy plugin -to the {kib} Platform Plugin API. -============================================== - -Make no mistake, it is going to take a lot of work to move certain -plugins to the {kib} Platform. - -The goal of this document is to guide developers through the recommended -process of migrating at a high level. Every plugin is different, so -developers should tweak this plan based on their unique requirements. - -First, we recommend you read <> to get an overview -of how plugins work in the {kib} Platform. Then continue here to follow our -generic plan of action that can be applied to any legacy plugin. - -=== Challenges to overcome with legacy plugins - -{kib} Platform plugins have an identical architecture in the browser and on -the server. Legacy plugins have one architecture that they use in the -browser and an entirely different architecture that they use on the -server. - -This means that there are unique sets of challenges for migrating to the -{kib} Platform, depending on whether the legacy plugin code is on the -server or in the browser. - -==== Challenges on the server - -The general architecture of legacy server-side code is similar to -the {kib} Platform architecture in one important way: most legacy -server-side plugins define an `init` function where the bulk of their -business logic begins, and they access both `core` and -`plugin-provided` functionality through the arguments given to `init`. -Rarely does legacy server-side code share stateful services via import -statements. - -Although not exactly the same, legacy plugin `init` functions behave -similarly today as {kib} Platform `setup` functions. `KbnServer` also -exposes an `afterPluginsInit` method, which behaves similarly to `start`. -There is no corresponding legacy concept of `stop`. - -Despite their similarities, server-side plugins pose a formidable -challenge: legacy core and plugin functionality is retrieved from either -the hapi.js `server` or `request` god objects. Worse, these objects are -often passed deeply throughout entire plugins, which directly couples -business logic with hapi. And the worst of it all is, these objects are -mutable at any time. - -The key challenge to overcome with legacy server-side plugins will -decoupling from hapi. - -==== Challenges in the browser - -The legacy plugin system in the browser is fundamentally incompatible -with the {kib} Platform. There is no client-side plugin definition. There -are no services that get passed to plugins at runtime. There really -isn’t even a concrete notion of `core`. - -When a legacy browser plugin needs to access functionality from another -plugin, say to register a UI section to render within another plugin, it -imports a stateful (global singleton) JavaScript module and performs -some sort of state mutation. Sometimes this module exists inside the -plugin itself, and it gets imported via the `plugin/` webpack alias. -Sometimes this module exists outside the context of plugins entirely and -gets imported via the `ui/` webpack alias. Neither of these concepts -exists in the {kib} Platform. - -Legacy browser plugins rely on the feature known as `uiExports/`, which -integrates directly with our build system to ensure that plugin code is -bundled together in such a way to enable that global singleton module -state. There is no corresponding feature in the {kib} Platform, and in -the fact we intend down the line to build {kib} Platform plugins as immutable -bundles that can not share state in this way. - -The key challenge to overcome with legacy browser-side plugins will be -converting all imports from `plugin/`, `ui/`, `uiExports`, and relative -imports from other plugins into a set of services that originate at -runtime during plugin initialization and get passed around throughout -the business logic of the plugin as function arguments. - -==== Plan of action - -To move a legacy plugin to the new plugin system, the -challenges on the server and in the browser must be addressed. - -The approach and level of effort varies significantly between server and -browser plugins, but at a high level, the approach is the same. - -First, decouple your plugin’s business logic from the dependencies that -are not exposed through the {kib} Platform, hapi.js, and Angular.js. Then -introduce plugin definitions that more accurately reflect how plugins -are defined in the {kib} Platform. Finally, replace the functionality you -consume from the core and other plugins with their {kib} Platform equivalents. - -Once those things are finished for any given plugin, it can officially -be switched to the new plugin system. - -=== Server-side plan of action - -Legacy server-side plugins access functionality from the core and other -plugins at runtime via function arguments, which is similar to how they -must be architected to use the new plugin system. This greatly -simplifies the plan of action for migrating server-side plugins. -The main challenge here is to de-couple plugin logic from hapi.js server and request objects. - -For migration examples, see <>. - -=== Browser-side plan of action - -It is generally a much greater challenge preparing legacy browser-side -code for the {kib} Platform than it is server-side, and as such there are -a few more steps. The level of effort here is proportional to the extent -to which a plugin is dependent on Angular.js. - -To complicate matters further, a significant amount of the business -logic in {kib} client-side code exists inside the `ui/public` -directory (aka ui modules), and all of that must be migrated as well. - -Because the usage of Angular and `ui/public` modules varies widely between -legacy plugins, there is no `one size fits all` solution to migrating -your browser-side code to the {kib} Platform. - -For migration examples, see <>. - -=== Frequently asked questions - -==== Do plugins need to be converted to TypeScript? - -No. That said, the migration process will require a lot of refactoring, -and TypeScript will make this dramatically easier and less risky. - -Although it's not strictly necessary, we encourage any plugin that exposes an extension point to do so -with first-class type support so downstream plugins that _are_ using -TypeScript can depend on those types. - -==== How can I avoid passing core services deeply within my UI component tree? - -Some core services are purely presentational, for example -`core.overlays.openModal()`, where UI -code does need access to these deeply within your application. However, -passing these services down as props throughout your application leads -to lots of boilerplate. To avoid this, you have three options: - -* Use an abstraction layer, like Redux, to decouple your UI code from -core (*this is the highly preferred option*). -* https://github.com/reduxjs/redux-thunk#injecting-a-custom-argument[redux-thunk] -and -https://redux-saga.js.org/docs/api/#createsagamiddlewareoptions[redux-saga] -already have ways to do this. -* Use React Context to provide these services to large parts of your -React tree. -* Create a high-order-component that injects core into a React -component. -* This would be a stateful module that holds a reference to core, but -provides it as props to components with a `withCore(MyComponent)` -interface. This can make testing components simpler. (Note: this module -cannot be shared across plugin boundaries, see above). -* Create a global singleton module that gets imported into each module -that needs it. This module cannot be shared across plugin -boundaries. -https://gist.github.com/epixa/06c8eeabd99da3c7545ab295e49acdc3[Example]. - -If you find that you need many different core services throughout your -application, this might indicate a problem in your code and could lead to pain down the -road. For instance, if you need access to an HTTP Client or -SavedObjectsClient in many places in your React tree, it’s likely that a -data layer abstraction (like Redux) could make developing your plugin -much simpler. - -Without such an abstraction, you will need to mock out core services -throughout your test suite and will couple your UI code very tightly to -core. However, if you can contain all of your integration points with -core to Redux middleware and reducers, you only need to mock core -services once and benefit from being able to change those integrations -with core in one place rather than many. This will become incredibly -handy when core APIs have breaking changes. - -==== How is the 'common' code shared on both the client and the server? - -There is no formal notion of `common` code that can safely be imported -from either client-side or server-side code. However, if a plugin author -wishes to maintain a set of code in their plugin in a single place and -then expose it to both server-side and client-side code, they can do so -by exporting the index files for both the `server` and `public` -directories. - -Plugins _should not_ ever import code from deeply inside another plugin -(e.g. `my_plugin/public/components`) or from other top-level directories -(e.g. `my_plugin/common/constants`) as these are not checked for breaking -changes and are considered unstable and subject to change at any time. -You can have other top-level directories like `my_plugin/common`, but -our tooling will not treat these as a stable API, and linter rules will -prevent importing from these directories _from outside the plugin_. - -The benefit of this approach is that the details of where code lives and -whether it is accessible in multiple runtimes is an implementation -detail of the plugin itself. A plugin consumer that is writing -client-side code only ever needs to concern themselves with the -client-side contracts being exposed, and the same can be said for -server-side contracts on the server. - -A plugin author, who decides some set of code should diverge from having -a single `common` definition, can now safely change the implementation -details without impacting downstream consumers. - -==== How do I find {kib} Platform services? - -Most of the utilities you used to build legacy plugins are available -in the {kib} Platform or {kib} Platform plugins. To help you find the new -home for new services, use the tables below to find where the {kib} -Platform equivalent lives. - -===== Client-side -====== Core services - -In client code, `core` can be imported in legacy plugins via the -`ui/new_platform` module. - -[[client-side-core-migration-table]] -[width="100%",cols="15%,85%",options="header",] -|=== -|Legacy Platform |{kib} Platform -|`chrome.addBasePath` -|{kib-repo}/tree/{branch}/docs/development/core/public/kibana-plugin-core-public.ibasepath.md[`core.http.basePath.prepend`] - -|`chrome.breadcrumbs.set` -|{kib-repo}/tree/{branch}/docs/development/core/public/kibana-plugin-core-public.chromestart.setbreadcrumbs.md[`core.chrome.setBreadcrumbs`] - -|`chrome.getUiSettingsClient` -|{kib-repo}/tree/{branch}/docs/development/core/public/kibana-plugin-core-public.corestart.uisettings.md[`core.uiSettings`] - -|`chrome.helpExtension.set` -|{kib-repo}/tree/{branch}/docs/development/core/public/kibana-plugin-core-public.chromestart.sethelpextension.md[`core.chrome.setHelpExtension`] - -|`chrome.setVisible` -|{kib-repo}/tree/{branch}/docs/development/core/public/kibana-plugin-core-public.chromestart.setisvisible.md[`core.chrome.setIsVisible`] - -|`chrome.getInjected` -| Request Data with your plugin REST HTTP API. - -|`chrome.setRootTemplate` / `chrome.setRootController` -|Use application mounting via {kib-repo}/tree/{branch}/docs/development/core/public/kibana-plugin-core-public.applicationsetup.register.md[`core.application.register`] - -|`chrome.navLinks.update` -|{kib-repo}/tree/{branch}/docs/development/core/public/kibana-plugin-core-public.app.updater_.md[`core.appbase.updater`]. Use the `updater$` property when registering your application via -`core.application.register` - -|`import { recentlyAccessed } from 'ui/persisted_log'` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.chromerecentlyaccessed.md[`core.chrome.recentlyAccessed`] - -|`ui/capabilities` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.capabilities.md[`core.application.capabilities`] - -|`ui/documentation_links` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.doclinksstart.md[`core.docLinks`] - -|`ui/kfetch` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.httpsetup.md[`core.http`] - -|`ui/notify` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.notificationsstart.md[`core.notifications`] -and -{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.overlaystart.md[`core.overlays`]. Toast messages are in `notifications`, banners are in `overlays`. - -|`ui/routes` -|There is no global routing mechanism. Each app -{kib-repo}blob/{branch}/rfcs/text/0004_application_service_mounting.md#complete-example[configures -its own routing]. - -|`ui/saved_objects` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.savedobjectsstart.md[`core.savedObjects`] - -|`ui/doc_title` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.chromedoctitle.md[`core.chrome.docTitle`] - -|`uiExports/injectedVars` / `chrome.getInjected` -|<>. Can only be used to expose configuration properties -|=== - -_See also: -{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.corestart.md[Public’s -CoreStart API Docs]_ - -====== Plugins for shared application services - -In client code, we have a series of plugins that house shared -application services, which are not technically part of `core`, but are -often used in {kib} plugins. - -This table maps some of the most commonly used legacy items to their {kib} -Platform locations. For the API provided by {kib} Plugins see <>. - -[width="100%",cols="15,85",options="header"] -|=== -|Legacy Platform |{kib} Platform -|`import 'ui/apply_filters'` |N/A. Replaced by triggering an -{kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.action_global_apply_filter.md[APPLY_FILTER_TRIGGER trigger]. Directive is deprecated. - -|`import 'ui/filter_bar'` -|`import { FilterBar } from 'plugins/data/public'`. Directive is deprecated. - -|`import 'ui/query_bar'` -|`import { QueryStringInput } from 'plugins/data/public'` {kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md[QueryStringInput]. Directives are deprecated. - -|`import 'ui/search_bar'` -|`import { SearchBar } from 'plugins/data/public'` {kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.datapublicpluginstartui.searchbar.md[SearchBar]. Directive is deprecated. - -|`import 'ui/kbn_top_nav'` -|`import { TopNavMenu } from 'plugins/navigation/public'`. Directive was removed. - -|`ui/saved_objects/saved_object_finder` -|`import { SavedObjectFinder } from 'plugins/saved_objects/public'` - -|`core_plugins/interpreter` -|{kib-repo}blob/{branch}/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.md[`plugins.data.expressions`] - -|`ui/courier` -|{kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.datapublicpluginsetup.search.md[`plugins.data.search`] - -|`ui/agg_types` -|{kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchsourcefields.aggs.md[`plugins.data.search.aggs`]. Most code is available for -static import. Stateful code is part of the `search` service. - -|`ui/embeddable` -|{kib-repo}blob/{branch}/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.md[`plugins.embeddables`] - -|`ui/filter_manager` -|`import { FilterManager } from 'plugins/data/public'` {kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.filtermanager.md[`FilterManager`] - -|`ui/index_patterns` -|`import { IndexPatternsService } from 'plugins/data/public'` {kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.md[IndexPatternsService] - -|`import 'ui/management'` -|`plugins.management.sections`. Management plugin `setup` contract. - -|`import 'ui/registry/field_format_editors'` -|`plugins.indexPatternManagement.fieldFormatEditors` indexPatternManagement plugin `setup` contract. - -|`ui/registry/field_formats` -|{kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.fieldformats.md[`plugins.data.fieldFormats`] - -|`ui/registry/feature_catalogue` -|`plugins.home.featureCatalogue.register` home plugin `setup` contract - -|`ui/registry/vis_types` -|`plugins.visualizations` - -|`ui/vis` -|`plugins.visualizations` - -|`ui/share` -|`plugins.share`. share plugin `start` contract. `showShareContextMenu` is now called -`toggleShareContextMenu`, `ShareContextMenuExtensionsRegistryProvider` -is now called `register` - -|`ui/vis/vis_factory` -|`plugins.visualizations` - -|`ui/vis/vis_filters` -|`plugins.visualizations.filters` - -|`ui/utils/parse_es_interval` -|`import { search: { aggs: { parseEsInterval } } } from 'plugins/data/public'`. `parseEsInterval`, `ParsedInterval`, `InvalidEsCalendarIntervalError`, -`InvalidEsIntervalFormatError` items were moved to the `Data Plugin` as -a static code -|=== - -===== Server-side - -====== Core services - -In server code, `core` can be accessed from either `server.newPlatform` -or `kbnServer.newPlatform`: - -[width="100%",cols="17, 83",options="header"] -|=== -|Legacy Platform |{kib} Platform -|`server.config()` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.plugininitializercontext.config.md[`initializerContext.config.create()`]. Must also define schema. See <> - -|`server.route` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.createrouter.md[`core.http.createRouter`]. See <>. - -|`server.renderApp()` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.rendercoreapp.md[`response.renderCoreApp()`]. See <>. - -|`server.renderAppWithDefaultConfig()` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.httpresourcesservicetoolkit.renderanonymouscoreapp.md[`response.renderAnonymousCoreApp()`]. See <>. - -|`request.getBasePath()` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.basepath.md[`core.http.basePath.get`] - -|`server.plugins.elasticsearch.getCluster('data')` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.md[`context.core.elasticsearch.client`] - -|`server.plugins.elasticsearch.getCluster('admin')` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.iscopedclusterclient.md[`context.core.elasticsearch.client`] - -|`server.plugins.elasticsearch.createCluster(...)` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.createclient.md[`core.elasticsearch.createClient`] - -|`server.savedObjects.setScopedSavedObjectsClientFactory` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.setclientfactoryprovider.md[`core.savedObjects.setClientFactoryProvider`] - -|`server.savedObjects.addScopedSavedObjectsClientWrapperFactory` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.addclientwrapper.md[`core.savedObjects.addClientWrapper`] - -|`server.savedObjects.getSavedObjectsRepository` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createinternalrepository.md[`core.savedObjects.createInternalRepository`] -{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.createscopedrepository.md[`core.savedObjects.createScopedRepository`] - -|`server.savedObjects.getScopedSavedObjectsClient` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicestart.getscopedclient.md[`core.savedObjects.getScopedClient`] - -|`request.getSavedObjectsClient` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md[`context.core.savedObjects.client`] - -|`request.getUiSettingsService` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.iuisettingsclient.md[`context.core.uiSettings.client`] - -|`kibana.Plugin.deprecations` -|<> and {kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.pluginconfigdescriptor.md[`PluginConfigDescriptor.deprecations`]. Deprecations from {kib} Platform are not applied to legacy configuration - -|`kibana.Plugin.savedObjectSchemas` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`] - -|`kibana.Plugin.mappings` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`]. Learn more in <>. - -|`kibana.Plugin.migrations` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`]. Learn more in <>. - -|`kibana.Plugin.savedObjectsManagement` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`]. Learn more in <>. -|=== - -_See also: -{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.coresetup.md[Server’s -CoreSetup API Docs]_ - -====== Plugin services - -[width="100%",cols="50%,50%",options="header",] -|=== -|Legacy Platform |{kib} Platform -|`xpack_main.registerFeature` -|{kib-repo}blob/{branch}/x-pack/plugins/features/server/plugin.ts[`plugins.features.registerKibanaFeature`] - -|`xpack_main.feature(pluginID).registerLicenseCheckResultsGenerator` -|{kib-repo}blob/{branch}/x-pack/plugins/licensing/README.md[`x-pack licensing plugin`] -|=== - -===== UI Exports - -The legacy platform used a set of `uiExports` to inject modules from -one plugin into other plugins. This mechanism is not necessary for the -{kib} Platform because _all plugins are executed on the page at once_, -though only one application is rendered at a time. - -This table shows where these uiExports have moved to in the {kib} -Platform. - -[width="100%",cols="15%,85%",options="header"] -|=== -|Legacy Platform |{kib} Platform -|`aliases` -|`N/A`. - -|`app` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.applicationsetup.register.md[`core.application.register`] - -|`canvas` -|{kib-repo}blob/{branch}/x-pack/plugins/canvas/README.md[Canvas plugin API] - -|`chromeNavControls` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.chromenavcontrols.md[`core.chrome.navControls.register{Left,Right}`] - -|`docViews` -|{kib-repo}blob/{branch}/src/plugins/discover/public/[`discover.docViews.addDocView`] - -|`embeddableActions` -|{kib-repo}blob/{branch}/src/plugins/embeddable/README.asciidoc[`embeddable plugin`] - -|`embeddableFactories` -|{kib-repo}blob/{branch}/src/plugins/embeddable/README.asciidoc[`embeddable plugin`], {kib-repo}blob/{branch}/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.registerembeddablefactory.md[`embeddable.registerEmbeddableFactory`] - -|`fieldFormatEditors`, `fieldFormats` -|{kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.fieldformats.md[`data.fieldFormats`] - -|`hacks` -|`N/A`. Just run the code in your plugin’s `start` method. - -|`home` -|{kib-repo}blob/{branch}/src/plugins/embeddable/README.asciidoc[`home plugin`] {kib-repo}blob/{branch}/src/plugins/home/public/services/feature_catalogue[`home.featureCatalogue.register`] - -|`indexManagement` -|{kib-repo}blob/{branch}/x-pack/plugins/index_management/README.md[`index management plugin`] - -|`injectDefaultVars` -|`N/A`. Plugins will only be able to allow config values for the frontend. See<> - -|`inspectorViews` -|{kib-repo}blob/{branch}/src/plugins/inspector/README.md[`inspector plugin`] - -|`interpreter` -|{kib-repo}blob/{branch}/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.md[`plugins.data.expressions`] - -|`links` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.applicationsetup.register.md[`core.application.register`] - -|`managementSections` -|{kib-repo}blob/{branch}/src/plugins/management/README.md[`plugins.management.sections.register`] - -|`mappings` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`] - -|`migrations` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`] - -|`navbarExtensions` -|`N/A`. Deprecated. - -|`savedObjectSchemas` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`] - -|`savedObjectsManagement` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`] - -|`savedObjectTypes` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`] - -|`search` -|{kib-repo}blob/{branch}/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.search.md[`data.search`] - -|`shareContextMenuExtensions` -|{kib-repo}blob/{branch}/src/plugins/share/README.md[`plugins.share`] - -|`taskDefinitions` -|{kib-repo}blob/{branch}/x-pack/plugins/task_manager/README.md[`taskManager plugin`] - -|`uiCapabilities` -|{kib-repo}blob/{branch}/docs/development/core/public/kibana-plugin-core-public.applicationsetup.register.md[`core.application.register`] - -|`uiSettingDefaults` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.uisettingsservicesetup.md[`core.uiSettings.register`] - -|`validations` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.savedobjectsservicesetup.registertype.md[`core.savedObjects.registerType`] - -|`visEditorTypes` -|{kib-repo}blob/{branch}/src/plugins/visualizations[`visualizations plugin`] - -|`visTypeEnhancers` -|{kib-repo}blob/{branch}/src/plugins/visualizations[`visualizations plugin`] - -|`visTypes` -|{kib-repo}blob/{branch}/src/plugins/visualizations[`visualizations plugin`] - -|`visualize` -|{kib-repo}blob/{branch}/src/plugins/visualize/README.md[`visualize plugin`] -|=== - -===== Plugin Spec - -[width="100%",cols="22%,78%",options="header",] -|=== -|Legacy Platform |{kib} Platform -|`id` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.md[`manifest.id`] - -|`require` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.md[`manifest.requiredPlugins`] - -|`version` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.md[`manifest.version`] - -|`kibanaVersion` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.md[`manifest.kibanaVersion`] - -|`configPrefix` -|{kib-repo}blob/{branch}/docs/development/core/server/kibana-plugin-core-server.pluginmanifest.md[`manifest.configPath`] - -|`config` -|<> - -|`deprecations` -|<> - -|`uiExports` -|`N/A`. Use platform & plugin public contracts - -|`publicDir` -|`N/A`. {kib} Platform serves static assets from `/public/assets` folder under `/plugins/{id}/assets/{path*}` URL. - -|`preInit`, `init`, `postInit` -|`N/A`. Use {kib} Platform <> -|=== - -=== See also - -For examples on how to migrate from specific legacy APIs, see <>. diff --git a/docs/management/advanced-options.asciidoc b/docs/management/advanced-options.asciidoc index 6b51685eefc6e..73f6344e191e3 100644 --- a/docs/management/advanced-options.asciidoc +++ b/docs/management/advanced-options.asciidoc @@ -553,4 +553,4 @@ only production-ready visualizations are available to users. [horizontal] [[telemetry-enabled-advanced-setting]]`telemetry:enabled`:: When enabled, helps improve the Elastic Stack by providing usage statistics for -basic features. This data will not be shared outside of Elastic. +basic features. diff --git a/docs/settings/apm-settings.asciidoc b/docs/settings/apm-settings.asciidoc index de5e8c686c61b..cbf87a4705412 100644 --- a/docs/settings/apm-settings.asciidoc +++ b/docs/settings/apm-settings.asciidoc @@ -68,9 +68,6 @@ Maximum number of traces per request for generating the global service map. Defa `xpack.apm.ui.enabled` {ess-icon}:: Set to `false` to hide the APM app from the main menu. Defaults to `true`. -`xpack.apm.ui.transactionGroupBucketSize` {ess-icon}:: -Number of top transaction groups displayed in the APM app. Defaults to `1000`. - `xpack.apm.ui.maxTraceItems` {ess-icon}:: Maximum number of child items displayed when viewing trace details. Defaults to `1000`. diff --git a/fleet_packages.json b/fleet_packages.json index 7ccfb852437cf..63195b19e2209 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -20,7 +20,7 @@ [ { "name": "apm", - "version": "8.7.0-preview-1674665274", + "version": "8.7.0-preview-1675078021", "forceAlignStackVersion": true }, { diff --git a/package.json b/package.json index 42b2c256c33c4..124c77a6829d7 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.6.0-canary.3", "@elastic/ems-client": "8.4.0", - "@elastic/eui": "73.0.0", + "@elastic/eui": "74.0.1", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/core/base/core-base-server-mocks/src/core_context.mock.ts b/packages/core/base/core-base-server-mocks/src/core_context.mock.ts index ca9cb0a654a90..db7da70b80fd7 100644 --- a/packages/core/base/core-base-server-mocks/src/core_context.mock.ts +++ b/packages/core/base/core-base-server-mocks/src/core_context.mock.ts @@ -23,7 +23,7 @@ function create({ logger?: jest.Mocked; configService?: jest.Mocked; } = {}): DeeplyMockedKeys { - return { coreId: Symbol(), env, logger, configService }; + return { coreId: Symbol(), env: env as DeeplyMockedKeys, logger, configService }; } export const mockCoreContext = { diff --git a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_from_plugin_package.test.ts b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_from_plugin_package.test.ts new file mode 100644 index 0000000000000..3d6a0f1221053 --- /dev/null +++ b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_from_plugin_package.test.ts @@ -0,0 +1,120 @@ +/* + * 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 { PluginPackageManifest } from '@kbn/repo-packages'; +import { PluginType } from '@kbn/core-base-common'; +import { pluginManifestFromPluginPackage } from './plugin_manifest_from_plugin_package'; + +const kibanaVersion = `1.${Math.round(10 * Math.random())}.1`; +const minimal: PluginPackageManifest = { + type: 'plugin', + id: '@kbn/some-legacy-plugin', + owner: ['@elastic/team-a', '@elastic/team-b'], + plugin: { + id: 'someLegacyPluginId', + browser: true, + server: true, + }, +}; +const basic: PluginPackageManifest = { + ...minimal, + plugin: { + ...minimal.plugin, + type: 'preboot', + configPath: ['some', 'legacy'], + enabledOnAnonymousPages: false, + extraPublicDirs: ['foo', 'bar'], + optionalPlugins: ['someOtherPlugin'], + requiredBundles: ['someRequiresBundlePlugin'], + requiredPlugins: ['someRequiredPlugin'], + }, + serviceFolders: ['foo', 'bar'], +}; + +describe('pluginManifestFromPluginPackage()', () => { + it('consumes correct values from plugin package manifest', () => { + expect(pluginManifestFromPluginPackage('static', basic)).toMatchInlineSnapshot(` + Object { + "configPath": Array [ + "some", + "legacy", + ], + "enabledOnAnonymousPages": false, + "id": "someLegacyPluginId", + "kibanaVersion": "static", + "optionalPlugins": Array [ + "someOtherPlugin", + ], + "owner": Object { + "name": "@elastic/team-a & @elastic/team-b", + }, + "requiredBundles": Array [ + "someRequiresBundlePlugin", + ], + "requiredPlugins": Array [ + "someRequiredPlugin", + ], + "server": true, + "serviceFolders": Array [ + "foo", + "bar", + ], + "type": "preboot", + "ui": true, + "version": "1.0.0", + } + `); + }); + + it('applies correct defaults', () => { + const pm = pluginManifestFromPluginPackage(kibanaVersion, minimal); + expect(pm).toHaveProperty('type', PluginType.standard); + expect(pm.enabledOnAnonymousPages).toBeUndefined(); + expect(pm.serviceFolders).toBeUndefined(); + expect(pm).toHaveProperty('kibanaVersion', kibanaVersion); + expect(pm).toHaveProperty('optionalPlugins', []); + expect(pm).toHaveProperty('requiredBundles', []); + expect(pm).toHaveProperty('requiredPlugins', []); + expect(pm).toHaveProperty('owner', { + name: '@elastic/team-a & @elastic/team-b', + }); + expect(pm).toHaveProperty('server', true); + expect(pm).toHaveProperty('ui', true); + expect(pm).toHaveProperty('configPath', 'some_legacy_plugin_id'); + }); + + it('reflects plugin.server', () => { + expect( + pluginManifestFromPluginPackage(kibanaVersion, { + ...minimal, + plugin: { ...minimal.plugin, server: false }, + }) + ).toHaveProperty('server', false); + expect( + pluginManifestFromPluginPackage(kibanaVersion, { + ...minimal, + plugin: { ...minimal.plugin, server: true }, + }) + ).toHaveProperty('server', true); + }); + + it('reflects plugin.browser', () => { + expect( + pluginManifestFromPluginPackage(kibanaVersion, { + ...minimal, + plugin: { ...minimal.plugin, browser: false }, + }) + ).toHaveProperty('ui', false); + expect( + pluginManifestFromPluginPackage(kibanaVersion, { + ...minimal, + plugin: { ...minimal.plugin, browser: true }, + }) + ).toHaveProperty('ui', true); + }); +}); diff --git a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_from_plugin_package.ts b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_from_plugin_package.ts new file mode 100644 index 0000000000000..13a860dc9b126 --- /dev/null +++ b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugin_manifest_from_plugin_package.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { snakeCase } from 'lodash'; +import { PluginPackageManifest } from '@kbn/repo-packages'; +import { PluginManifest } from '@kbn/core-plugins-server'; +import { PluginType } from '@kbn/core-base-common'; + +export function pluginManifestFromPluginPackage( + kibanaVersion: string, + manifest: PluginPackageManifest +): PluginManifest { + return { + type: manifest.plugin.type === 'preboot' ? PluginType.preboot : PluginType.standard, + id: manifest.plugin.id, + version: '1.0.0', + enabledOnAnonymousPages: manifest.plugin.enabledOnAnonymousPages, + serviceFolders: manifest.serviceFolders, + kibanaVersion, + optionalPlugins: manifest.plugin.optionalPlugins ?? [], + requiredBundles: manifest.plugin.requiredBundles ?? [], + requiredPlugins: manifest.plugin.requiredPlugins ?? [], + owner: { + name: manifest.owner.join(' & '), + }, + server: manifest.plugin.server, + ui: manifest.plugin.browser, + configPath: manifest.plugin.configPath ?? snakeCase(manifest.plugin.id), + }; +} diff --git a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts index 222788487fe0e..0a2daf42690d2 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.test.ts @@ -12,6 +12,7 @@ import { mockPackage, scanPluginSearchPathsMock } from './plugins_discovery.test import mockFs from 'mock-fs'; import { getEnvOptions, rawConfigServiceMock } from '@kbn/config-mocks'; import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; +import type { Package } from '@kbn/repo-packages'; import { firstValueFrom, from } from 'rxjs'; import { map, toArray } from 'rxjs/operators'; @@ -25,6 +26,35 @@ import { discover } from './plugins_discovery'; import { PluginType } from '@kbn/core-base-common'; const KIBANA_ROOT = process.cwd(); +jest.mock('@kbn/repo-packages', () => ({ + ...jest.requireActual('@kbn/repo-packages'), + getPackages: jest.fn().mockReturnValue([]), + getPluginPackagesFilter: jest.fn().mockReturnValue(() => true), +})); + +jest.mock('./plugin_manifest_from_plugin_package', () => ({ + pluginManifestFromPluginPackage: jest.fn((version, pkgManifest) => ({ + version, + ...pkgManifest, + })), +})); + +const getPluginPackagesFilterMock: jest.Mock = + jest.requireMock('@kbn/repo-packages').getPluginPackagesFilter; +const pluginManifestFromPluginPackageMock: jest.Mock = jest.requireMock( + './plugin_manifest_from_plugin_package' +).pluginManifestFromPluginPackage; + +function getMockPackage(id: string) { + return { + id, + manifest: { + id, + type: 'plugin', + }, + directory: resolve(REPO_ROOT, `packages/${id}`), + } as Package; +} const Plugins = { invalid: () => ({ @@ -180,6 +210,8 @@ describe('plugins discovery system', () => { jest.spyOn(console, 'log').mockImplementation((...args) => { process.stdout.write(args + '\n'); }); + + jest.clearAllMocks(); }); afterEach(() => { @@ -542,9 +574,61 @@ describe('plugins discovery system', () => { expect(loggingSystemMock.collect(logger).warn).toEqual([]); }); + describe('plugin packages', () => { + it('filters repoPackages in the env and converts them to PluginWrappers', async () => { + const foo = getMockPackage('foo'); + const bar = getMockPackage('bar'); + coreContext.env = { + ...env, + pluginSearchPaths: [], + repoPackages: [foo, bar], + }; + const filterFn = jest.fn((p: Package) => p === foo); + getPluginPackagesFilterMock.mockReturnValue(filterFn); + + const { plugin$ } = discover({ + config: new PluginsConfig(pluginConfig, coreContext.env), + coreContext, + instanceInfo, + nodeInfo, + }); + + const [plugin, ...empty] = await firstValueFrom(plugin$.pipe(toArray())); + expect(empty).toHaveLength(0); + + expect(getPluginPackagesFilterMock).toHaveBeenCalledTimes(1); + const filterArgs = getPluginPackagesFilterMock.mock.calls[0]; + expect(filterArgs).toEqual([ + { + examples: false, + oss: false, + parentDirs: [], + paths: [], + }, + ]); + + expect(filterFn).toHaveBeenCalledTimes(2); + expect(filterFn.mock.calls[0]).toEqual([foo, 0]); + expect(filterFn.mock.calls[1]).toEqual([bar, 1]); + expect(filterFn.mock.results).toEqual([ + { type: 'return', value: true }, + { type: 'return', value: false }, + ]); + + expect(pluginManifestFromPluginPackageMock).toHaveBeenCalledTimes(1); + const manifestArgs = pluginManifestFromPluginPackageMock.mock.calls[0]; + expect(manifestArgs).toEqual([coreContext.env.packageInfo.version, foo.manifest]); + expect(pluginManifestFromPluginPackageMock.mock.results[0]).toEqual({ + type: 'return', + value: plugin.manifest, + }); + }); + }); + describe('discovery order', () => { beforeEach(() => { scanPluginSearchPathsMock.mockClear(); + getPluginPackagesFilterMock.mockReturnValue(() => true); }); it('returns the plugins in a deterministic order', async () => { @@ -565,8 +649,13 @@ describe('plugins discovery system', () => { ]) ); + coreContext.env = { + ...env, + repoPackages: [getMockPackage('foo'), getMockPackage('bar')], + }; + let { plugin$ } = discover({ - config: new PluginsConfig(pluginConfig, env), + config: new PluginsConfig(pluginConfig, coreContext.env), coreContext, instanceInfo, nodeInfo, @@ -576,9 +665,8 @@ describe('plugins discovery system', () => { let plugins = await firstValueFrom(plugin$.pipe(toArray())); let pluginNames = plugins.map((plugin) => plugin.name); - expect(pluginNames).toHaveLength(3); - // order coming from `ROOT/plugin` -> `ROOT/src/plugins` -> // ROOT/x-pack - expect(pluginNames).toEqual(['pluginB', 'pluginA', 'pluginC']); + // order coming from `ROOT/packages` -> `ROOT/plugin` -> `ROOT/src/plugins` -> // ROOT/x-pack + expect(pluginNames).toEqual(['bar', 'foo', 'pluginB', 'pluginA', 'pluginC']); // second pass scanPluginSearchPathsMock.mockReturnValue( @@ -589,6 +677,11 @@ describe('plugins discovery system', () => { ]) ); + coreContext.env = { + ...env, + repoPackages: [getMockPackage('bar'), getMockPackage('foo')], + }; + plugin$ = discover({ config: new PluginsConfig(pluginConfig, env), coreContext, @@ -600,9 +693,8 @@ describe('plugins discovery system', () => { plugins = await firstValueFrom(plugin$.pipe(toArray())); pluginNames = plugins.map((plugin) => plugin.name); - expect(pluginNames).toHaveLength(3); - // order coming from `ROOT/plugin` -> `ROOT/src/plugins` -> // ROOT/x-pack - expect(pluginNames).toEqual(['pluginB', 'pluginA', 'pluginC']); + // order coming from `ROOT/packages` -> `ROOT/plugin` -> `ROOT/src/plugins` -> // ROOT/x-pack + expect(pluginNames).toEqual(['bar', 'foo', 'pluginB', 'pluginA', 'pluginC']); }); }); }); diff --git a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.ts b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.ts index ed4f6a3b1080b..60199d9987ae8 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/discovery/plugins_discovery.ts @@ -6,12 +6,14 @@ * Side Public License, v 1. */ -import { from, merge } from 'rxjs'; +import { from, merge, EMPTY } from 'rxjs'; import { catchError, filter, map, mergeMap, concatMap, shareReplay, toArray } from 'rxjs/operators'; import { Logger } from '@kbn/logging'; +import { getPluginPackagesFilter } from '@kbn/repo-packages'; import type { CoreContext } from '@kbn/core-base-server-internal'; import type { NodeInfo } from '@kbn/core-node-server'; import { PluginWrapper } from '../plugin'; +import { pluginManifestFromPluginPackage } from './plugin_manifest_from_plugin_package'; import { createPluginInitializerContext, InstanceInfo } from '../plugin_context'; import { PluginsConfig } from '../plugins_config'; import { PluginDiscoveryError } from './plugin_discovery_error'; @@ -48,23 +50,59 @@ export function discover({ ); } - const discoveryResults$ = merge( + const fsDiscovery$ = merge( from(config.additionalPluginPaths), scanPluginSearchPaths(config.pluginSearchPaths, log) ).pipe( - toArray(), - mergeMap((pathAndErrors) => { - return pathAndErrors.sort((a, b) => { - const pa = typeof a === 'string' ? a : a.path; - const pb = typeof b === 'string' ? b : b.path; - return pa < pb ? -1 : pa > pb ? 1 : 0; - }); - }), concatMap((pluginPathOrError) => { return typeof pluginPathOrError === 'string' ? createPlugin$(pluginPathOrError, log, coreContext, instanceInfo, nodeInfo) : [pluginPathOrError]; - }), + }) + ); + + const pluginPkgDiscovery$ = from(coreContext.env.repoPackages ?? EMPTY).pipe( + filter( + getPluginPackagesFilter({ + oss: coreContext.env.cliArgs.oss, + examples: coreContext.env.cliArgs.runExamples, + paths: config.additionalPluginPaths, + parentDirs: config.pluginSearchPaths, + }) + ), + map((pkg) => { + log.debug(`Successfully discovered plugin package "${pkg.id}"`); + const manifest = pluginManifestFromPluginPackage( + coreContext.env.packageInfo.version, + pkg.manifest + ); + const initializerContext = createPluginInitializerContext({ + coreContext, + opaqueId: Symbol(pkg.id), + manifest, + instanceInfo, + nodeInfo, + }); + + return new PluginWrapper({ + path: pkg.directory, + manifest, + opaqueId: initializerContext.opaqueId, + initializerContext, + }); + }) + ); + + const discoveryResults$ = merge(fsDiscovery$, pluginPkgDiscovery$).pipe( + toArray(), + // ensure that everything is always provided in a consistent order + mergeMap((pkgs) => + pkgs.sort((a, b) => { + const aComp = typeof a !== 'string' ? a.path : a; + const bComp = typeof b !== 'string' ? b.path : b; + return aComp.localeCompare(bComp); + }) + ), shareReplay() ); diff --git a/packages/core/plugins/core-plugins-server-internal/tsconfig.json b/packages/core/plugins/core-plugins-server-internal/tsconfig.json index 526d9e9f46fe2..01a508f92ddc8 100644 --- a/packages/core/plugins/core-plugins-server-internal/tsconfig.json +++ b/packages/core/plugins/core-plugins-server-internal/tsconfig.json @@ -37,6 +37,7 @@ "@kbn/core-environment-server-internal", "@kbn/core-node-server-internal", "@kbn/core-plugins-base-server-internal", + "@kbn/repo-packages", ], "exclude": [ "target/**/*", diff --git a/packages/core/root/core-root-server-internal/src/bootstrap.ts b/packages/core/root/core-root-server-internal/src/bootstrap.ts index d37e589e66efb..d5b82a26bf464 100644 --- a/packages/core/root/core-root-server-internal/src/bootstrap.ts +++ b/packages/core/root/core-root-server-internal/src/bootstrap.ts @@ -7,6 +7,7 @@ */ import chalk from 'chalk'; +import { getPackages } from '@kbn/repo-packages'; import { CliArgs, Env, RawConfigService } from '@kbn/config'; import { CriticalError } from '@kbn/core-base-server-internal'; import { Root } from './root'; @@ -39,6 +40,7 @@ export async function bootstrap({ configs, cliArgs, applyConfigOverrides }: Boot const env = Env.createDefault(REPO_ROOT, { configs, cliArgs, + repoPackages: getPackages(REPO_ROOT), }); const rawConfigService = new RawConfigService(env.configs, applyConfigOverrides); diff --git a/packages/core/root/core-root-server-internal/tsconfig.json b/packages/core/root/core-root-server-internal/tsconfig.json index 4f415fb5fadf5..06142eda5880f 100644 --- a/packages/core/root/core-root-server-internal/tsconfig.json +++ b/packages/core/root/core-root-server-internal/tsconfig.json @@ -67,6 +67,7 @@ "@kbn/apm-config-loader", "@kbn/core-custom-branding-server-internal", "@kbn/core-custom-branding-server-mocks", + "@kbn/repo-packages", ], "exclude": [ "target/**/*", diff --git a/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts b/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts index 08a99ae61a96a..a013a47193e36 100644 --- a/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts +++ b/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_root.ts @@ -12,6 +12,7 @@ import { defaultsDeep } from 'lodash'; import { BehaviorSubject } from 'rxjs'; import supertest from 'supertest'; +import { getPackages } from '@kbn/repo-packages'; import { ToolingLog } from '@kbn/tooling-log'; import { REPO_ROOT } from '@kbn/repo-info'; import { @@ -71,6 +72,7 @@ export function createRootWithSettings( dist: false, ...cliArgs, }, + repoPackages: getPackages(REPO_ROOT), }, pkg ); diff --git a/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json b/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json index 4f2c8c210354d..b5342c23fba2b 100644 --- a/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json +++ b/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json @@ -17,6 +17,7 @@ "@kbn/core-lifecycle-server-internal", "@kbn/core-root-server-internal", "@kbn/repo-info", + "@kbn/repo-packages", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-apm-synthtrace-client/src/lib/apm/apm_fields.ts b/packages/kbn-apm-synthtrace-client/src/lib/apm/apm_fields.ts index 981b6e16a393d..8978604fb2f1c 100644 --- a/packages/kbn-apm-synthtrace-client/src/lib/apm/apm_fields.ts +++ b/packages/kbn-apm-synthtrace-client/src/lib/apm/apm_fields.ts @@ -130,6 +130,7 @@ export type ApmFields = Fields<{ 'processor.name': string; 'session.id': string; 'trace.id': string; + 'transaction.aggregation.overflow_count': number; 'transaction.duration.us': number; 'transaction.id': string; 'transaction.name': string; diff --git a/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_service_metrics_aggregator.ts b/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_service_metrics_aggregator.ts index 47cefc9608e33..e2c053ba4159f 100644 --- a/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_service_metrics_aggregator.ts +++ b/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_service_metrics_aggregator.ts @@ -14,14 +14,14 @@ const KEY_FIELDS: Array = [ 'agent.name', 'service.environment', 'service.name', - 'service.node.name', 'transaction.type', + 'service.language.name', ]; export function createServiceMetricsAggregator(flushInterval: string) { return createApmMetricAggregator( { - filter: (event) => true, + filter: (event) => event['processor.event'] === 'transaction', getAggregateKey: (event) => { // see https://github.com/elastic/apm-server/blob/main/x-pack/apm-server/aggregation/txmetrics/aggregator.go return hashKeysOf(event, KEY_FIELDS); @@ -32,17 +32,16 @@ export function createServiceMetricsAggregator(flushInterval: string) { return { ...set, - 'metricset.name': 'service', + 'metricset.name': 'service_transaction', + 'metricset.interval': flushInterval, 'processor.event': 'metric', 'processor.name': 'metric', 'transaction.duration.histogram': createLosslessHistogram(), 'transaction.duration.summary': { - min: 0, - max: 0, value_count: 0, sum: 0, }, - 'event.outcome_numeric': { + 'event.success_count': { sum: 0, value_count: 0, }, @@ -50,26 +49,22 @@ export function createServiceMetricsAggregator(flushInterval: string) { }, }, (metric, event) => { - if (event['processor.event'] === 'transaction') { - const duration = event['transaction.duration.us']!; + const duration = event['transaction.duration.us']!; - metric['transaction.duration.histogram'].record(duration); + metric['transaction.duration.histogram'].record(duration); - if (event['event.outcome'] === 'success' || event['event.outcome'] === 'failure') { - metric['event.outcome_numeric'].value_count += 1; - } + if (event['event.outcome'] === 'success' || event['event.outcome'] === 'failure') { + metric['event.success_count'].value_count += 1; + } - if (event['event.outcome'] === 'success') { - metric['event.outcome_numeric'].sum += 1; - } + if (event['event.outcome'] === 'success') { + metric['event.success_count'].sum += 1; + } - const summary = metric['transaction.duration.summary']; + const summary = metric['transaction.duration.summary']; - summary.min = Math.min(duration, metric['transaction.duration.summary'].min); - summary.max = Math.max(duration, metric['transaction.duration.summary'].max); - summary.sum += duration; - summary.value_count += 1; - } + summary.sum += duration; + summary.value_count += 1; }, (metric) => { const serialized = metric['transaction.duration.histogram'].serialize(); @@ -80,6 +75,7 @@ export function createServiceMetricsAggregator(flushInterval: string) { }; // @ts-expect-error metric._doc_count = serialized.total; + return metric; } ); diff --git a/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_span_metrics_aggregator.ts b/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_span_metrics_aggregator.ts index fd4526df0225d..e4ed870b644da 100644 --- a/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_span_metrics_aggregator.ts +++ b/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_span_metrics_aggregator.ts @@ -37,6 +37,7 @@ export function createSpanMetricsAggregator(flushInterval: string) { return { ...set, 'metricset.name': 'service_destination', + 'metricset.interval': flushInterval, 'processor.event': 'metric', 'processor.name': 'metric', 'span.destination.service.response_time.count': 0, diff --git a/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_transaction_metrics_aggregator.ts b/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_transaction_metrics_aggregator.ts index 92be93100e397..14136d5b56c0d 100644 --- a/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_transaction_metrics_aggregator.ts +++ b/packages/kbn-apm-synthtrace/src/lib/apm/aggregators/create_transaction_metrics_aggregator.ts @@ -67,15 +67,38 @@ export function createTransactionMetricsAggregator(flushInterval: string) { return { ...set, 'metricset.name': 'transaction', + 'metricset.interval': flushInterval, 'processor.event': 'metric', 'processor.name': 'metric', 'transaction.root': !event['parent.id'], 'transaction.duration.histogram': createLosslessHistogram(), + 'transaction.duration.summary': { + value_count: 0, + sum: 0, + }, + 'event.success_count': { + sum: 0, + value_count: 0, + }, }; }, }, (metric, event) => { - metric['transaction.duration.histogram'].record(event['transaction.duration.us']!); + const duration = event['transaction.duration.us']!; + metric['transaction.duration.histogram'].record(duration); + + if (event['event.outcome'] === 'success' || event['event.outcome'] === 'failure') { + metric['event.success_count'].value_count += 1; + } + + if (event['event.outcome'] === 'success') { + metric['event.success_count'].sum += 1; + } + + const summary = metric['transaction.duration.summary']; + + summary.sum += duration; + summary.value_count += 1; }, (metric) => { const serialized = metric['transaction.duration.histogram'].serialize(); @@ -86,6 +109,7 @@ export function createTransactionMetricsAggregator(flushInterval: string) { }; // @ts-expect-error metric._doc_count = serialized.total; + return metric; } ); diff --git a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/get_routing_transform.ts b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/get_routing_transform.ts index 52d78923f2d54..8c3f5ea3b25b4 100644 --- a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/get_routing_transform.ts +++ b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/get_routing_transform.ts @@ -31,6 +31,12 @@ export function getRoutingTransform() { if (metricsetName === 'app') { index = `metrics-apm.app.${document['service.name']}-default`; + } else if ( + metricsetName === 'transaction' || + metricsetName === 'service_transaction' || + metricsetName === 'service_destination' + ) { + index = `metrics-apm.${metricsetName}.${document['metricset.interval']!}-default`; } else { index = `metrics-apm.internal-default`; } diff --git a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/index.ts b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/index.ts index 546c4ab118eff..58fab239eab40 100644 --- a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/index.ts +++ b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/index.ts @@ -20,6 +20,7 @@ import { ValuesType } from 'utility-types'; import { Logger } from '../../../utils/create_logger'; import { fork, sequential } from '../../../utils/stream_utils'; import { createBreakdownMetricsAggregator } from '../../aggregators/create_breakdown_metrics_aggregator'; +import { createServiceMetricsAggregator } from '../../aggregators/create_service_metrics_aggregator'; import { createSpanMetricsAggregator } from '../../aggregators/create_span_metrics_aggregator'; import { createTransactionMetricsAggregator } from '../../aggregators/create_transaction_metrics_aggregator'; import { getApmServerMetadataTransform } from './get_apm_server_metadata_transform'; @@ -69,15 +70,12 @@ export class ApmSynthtraceEsClient { } async clean() { - this.logger.info(`Cleaning APM data streams ${DATA_STREAMS.join(', ')}`); - - for (const name of DATA_STREAMS) { - const dataStream = await this.client.indices.getDataStream({ name }, { ignore: [404] }); - if (dataStream.data_streams && dataStream.data_streams.length > 0) { - this.logger.debug(`Deleting datastream: ${name}`); - await this.client.indices.deleteDataStream({ name }); - } - } + this.logger.info(`Cleaning APM data streams ${DATA_STREAMS.join(',')}`); + + await this.client.indices.deleteDataStream({ + name: DATA_STREAMS.join(','), + expand_wildcards: ['open', 'hidden'], + }); } async updateComponentTemplate( @@ -92,14 +90,16 @@ export class ApmSynthtraceEsClient { name, }); - const template = response.component_templates[0]; - - await this.client.cluster.putComponentTemplate({ - name, - template: { - ...modify(template.component_template.template), - }, - }); + await Promise.all( + response.component_templates.map((template) => { + return this.client.cluster.putComponentTemplate({ + name: template.name, + template: { + ...modify(template.component_template.template), + }, + }); + }) + ); this.logger.info(`Updated component template: ${name}`); } @@ -118,7 +118,14 @@ export class ApmSynthtraceEsClient { return (base: Readable) => { const aggregators = [ createTransactionMetricsAggregator('1m'), + createTransactionMetricsAggregator('10m'), + createTransactionMetricsAggregator('60m'), + createServiceMetricsAggregator('1m'), + createServiceMetricsAggregator('10m'), + createServiceMetricsAggregator('60m'), createSpanMetricsAggregator('1m'), + createSpanMetricsAggregator('10m'), + createSpanMetricsAggregator('60m'), ]; const serializationTransform = includeSerialization ? [getSerializeTransform()] : []; diff --git a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts index 7c990ede8d9ee..615d754452349 100644 --- a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts +++ b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts @@ -20,7 +20,7 @@ export class ApmSynthtraceKibanaClient { async fetchLatestApmPackageVersion() { this.logger.debug(`Fetching latest APM package version`); - const fleetPackageApiUrl = `${this.target}/api/fleet/epm/packages/apm`; + const fleetPackageApiUrl = `${this.target}/api/fleet/epm/packages/apm?prerelease=true`; const response = await fetch(fleetPackageApiUrl, { method: 'GET', headers: kibanaHeaders(), @@ -35,6 +35,7 @@ export class ApmSynthtraceKibanaClient { } const { latestVersion } = responseJson.item; + return latestVersion as string; } diff --git a/packages/kbn-apm-synthtrace/src/scenarios/continuous_rollups.ts b/packages/kbn-apm-synthtrace/src/scenarios/continuous_rollups.ts index a3e32b1cea79c..c4eba8b8c7d5f 100644 --- a/packages/kbn-apm-synthtrace/src/scenarios/continuous_rollups.ts +++ b/packages/kbn-apm-synthtrace/src/scenarios/continuous_rollups.ts @@ -6,18 +6,10 @@ * Side Public License, v 1. */ +import { apm, ApmFields } from '@kbn/apm-synthtrace-client'; import { merge, range as lodashRange } from 'lodash'; -import { PassThrough, pipeline, Transform } from 'stream'; -import { apm, ApmFields, ESDocumentWithOperation } from '@kbn/apm-synthtrace-client'; import { Scenario } from '../cli/scenario'; -import { createServiceMetricsAggregator } from '../lib/apm/aggregators/create_service_metrics_aggregator'; -import { createTransactionMetricsAggregator } from '../lib/apm/aggregators/create_transaction_metrics_aggregator'; import { ComponentTemplateName } from '../lib/apm/client/apm_synthtrace_es_client'; -import { getApmServerMetadataTransform } from '../lib/apm/client/apm_synthtrace_es_client/get_apm_server_metadata_transform'; -import { getDedotTransform } from '../lib/apm/client/apm_synthtrace_es_client/get_dedot_transform'; -import { getIntakeDefaultsTransform } from '../lib/apm/client/apm_synthtrace_es_client/get_intake_defaults_transform'; -import { getSerializeTransform } from '../lib/apm/client/apm_synthtrace_es_client/get_serialize_transform'; -import { fork } from '../lib/utils/stream_utils'; const scenario: Scenario = async ({ logger, scenarioOpts }) => { const { @@ -37,95 +29,11 @@ const scenario: Scenario = async ({ logger, scenarioOpts }) => { number_of_shards: 8, }, }, - mappings: { - properties: { - event: { - properties: { - outcome_numeric: { - type: 'aggregate_metric_double', - metrics: ['sum', 'value_count'], - default_metric: 'sum', - }, - }, - }, - transaction: { - properties: { - duration: { - properties: { - summary: { - type: 'aggregate_metric_double', - metrics: ['min', 'max', 'sum', 'value_count'], - default_metric: 'max', - }, - }, - }, - }, - }, - metricset: { - properties: { - interval: { - type: 'constant_keyword' as const, - }, - }, - }, - }, - }, }; return merge({}, template, next); } ); - - function withInterval(cb: (flushInterval: string) => Transform, flushInterval: string) { - const aggregator = cb(flushInterval); - - aggregator.pipe( - new PassThrough({ - objectMode: true, - write(metric: ApmFields, encoding, callback) { - metric['metricset.interval'] = flushInterval; - callback(); - }, - }) - ); - - return aggregator; - } - - const aggregators = [ - withInterval(createServiceMetricsAggregator, '1m'), - withInterval(createServiceMetricsAggregator, '10m'), - withInterval(createServiceMetricsAggregator, '60m'), - withInterval(createTransactionMetricsAggregator, '1m'), - withInterval(createTransactionMetricsAggregator, '10m'), - withInterval(createTransactionMetricsAggregator, '60m'), - ]; - - apmEsClient.pipeline((base) => { - return pipeline( - base, - getSerializeTransform(), - getIntakeDefaultsTransform(), - fork(...aggregators), - new Transform({ - objectMode: true, - transform(event: ESDocumentWithOperation, encoding, callback) { - const index = `metrics-apm.internal-${ - event['metricset.name'] === 'transaction' ? 'transaction' : 'service' - }.${event['metricset.interval']}`; - event._index = index; - callback(null, event); - }, - }), - getApmServerMetadataTransform(apmEsClient.getVersion()), - getDedotTransform(), - (err) => { - if (err) { - logger.error(err); - } - } - ); - }); }, generate: ({ range }) => { const TRANSACTION_TYPES = ['request', 'custom']; diff --git a/packages/kbn-apm-synthtrace/src/scenarios/other_transaction_group_bucket.ts b/packages/kbn-apm-synthtrace/src/scenarios/other_transaction_group_bucket.ts new file mode 100644 index 0000000000000..9289617c0119a --- /dev/null +++ b/packages/kbn-apm-synthtrace/src/scenarios/other_transaction_group_bucket.ts @@ -0,0 +1,81 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { apm, ApmFields } from '@kbn/apm-synthtrace-client'; +import { range as lodashRange } from 'lodash'; +import { Scenario } from '../cli/scenario'; + +const scenario: Scenario = async ({ logger, scenarioOpts }) => { + const { services: numServices = 10, txGroups: numTxGroups = 10 } = scenarioOpts ?? {}; + + return { + generate: ({ range }) => { + const TRANSACTION_TYPES = ['request']; + const ENVIRONMENTS = ['production', 'development']; + + const MIN_DURATION = 10; + const MAX_DURATION = 1000; + + const MAX_BUCKETS = 50; + + const BUCKET_SIZE = (MAX_DURATION - MIN_DURATION) / MAX_BUCKETS; + + const instances = lodashRange(0, numServices).flatMap((serviceId) => { + const serviceName = `service-${serviceId}`; + + const services = ENVIRONMENTS.map((env) => apm.service(serviceName, env, 'go')); + + return lodashRange(0, 2).flatMap((serviceNodeId) => + services.map((service) => service.instance(`${serviceName}-${serviceNodeId}`)) + ); + }); + + const transactionGroupRange = [ + ...lodashRange(0, numTxGroups).map((groupId) => `transaction-${groupId}`), + '_other', + ]; + + return range + .interval('1m') + .rate(1) + .generator((timestamp, timestampIndex) => { + return logger.perf( + 'generate_events_for_timestamp ' + new Date(timestamp).toISOString(), + () => { + const events = instances.flatMap((instance) => + transactionGroupRange.flatMap((groupId, groupIndex) => { + const duration = Math.round( + (timestampIndex % MAX_BUCKETS) * BUCKET_SIZE + MIN_DURATION + ); + + if (groupId === '_other') { + return instance + .transaction(groupId) + .timestamp(timestamp) + .duration(duration) + .defaults({ + 'transaction.aggregation.overflow_count': 10, + }); + } + + return instance + .transaction(groupId, TRANSACTION_TYPES[groupIndex % TRANSACTION_TYPES.length]) + .timestamp(timestamp) + .duration(duration) + .success(); + }) + ); + + return events; + } + ); + }); + }, + }; +}; + +export default scenario; diff --git a/packages/kbn-apm-synthtrace/src/test/__snapshots__/es_client_indexer.test.ts.snap b/packages/kbn-apm-synthtrace/src/test/__snapshots__/es_client_indexer.test.ts.snap index 84ca36477c1dc..7178720ea0a02 100644 --- a/packages/kbn-apm-synthtrace/src/test/__snapshots__/es_client_indexer.test.ts.snap +++ b/packages/kbn-apm-synthtrace/src/test/__snapshots__/es_client_indexer.test.ts.snap @@ -23,6 +23,51 @@ Array [ "event": "metric", }, }, + Object { + "@timestamp": "2022-01-01T00:00:00.000Z", + "metricset": Object { + "name": "transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T00:00:00.000Z", + "metricset": Object { + "name": "transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T00:00:00.000Z", + "metricset": Object { + "name": "service_transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T00:00:00.000Z", + "metricset": Object { + "name": "service_transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T00:00:00.000Z", + "metricset": Object { + "name": "service_transaction", + }, + "processor": Object { + "event": "metric", + }, + }, Object { "@timestamp": "2022-01-01T00:00:00.000Z", "metricset": Object { @@ -47,6 +92,33 @@ Array [ "event": "metric", }, }, + Object { + "@timestamp": "2022-01-01T00:30:00.000Z", + "metricset": Object { + "name": "transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T00:30:00.000Z", + "metricset": Object { + "name": "service_transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T00:30:00.000Z", + "metricset": Object { + "name": "service_transaction", + }, + "processor": Object { + "event": "metric", + }, + }, Object { "@timestamp": "2022-01-01T00:30:00.000Z", "metricset": Object { @@ -65,6 +137,69 @@ Array [ "event": "metric", }, }, + Object { + "@timestamp": "2022-01-01T01:00:00.000Z", + "metricset": Object { + "name": "transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T00:00:00.000Z", + "metricset": Object { + "name": "transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T01:00:00.000Z", + "metricset": Object { + "name": "transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T01:00:00.000Z", + "metricset": Object { + "name": "service_transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T01:00:00.000Z", + "metricset": Object { + "name": "service_transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T00:00:00.000Z", + "metricset": Object { + "name": "service_transaction", + }, + "processor": Object { + "event": "metric", + }, + }, + Object { + "@timestamp": "2022-01-01T01:00:00.000Z", + "metricset": Object { + "name": "service_transaction", + }, + "processor": Object { + "event": "metric", + }, + }, Object { "@timestamp": "2022-01-01T01:00:00.000Z", "metricset": Object { diff --git a/packages/kbn-apm-synthtrace/src/test/es_client_indexer.test.ts b/packages/kbn-apm-synthtrace/src/test/es_client_indexer.test.ts index 10990766bbc03..05ea68af97350 100644 --- a/packages/kbn-apm-synthtrace/src/test/es_client_indexer.test.ts +++ b/packages/kbn-apm-synthtrace/src/test/es_client_indexer.test.ts @@ -33,6 +33,13 @@ describe('Synthtrace ES Client indexer', () => { target: '', version: '', client: { + cluster: { + getComponentTemplate: async () => { + return { + component_templates: [], + }; + }, + }, helpers: { bulk: async (options: any) => { datasource = options.datasource; @@ -65,7 +72,7 @@ describe('Synthtrace ES Client indexer', () => { const events = await toArray(datasource); - expect(events.length).toBe(9); + expect(events.length).toBe(24); const mapped = events.map((event) => pick(event, '@timestamp', 'processor.event', 'metricset.name') @@ -155,7 +162,9 @@ describe('Synthtrace ES Client indexer', () => { expect(transactions.length).toBe(RATE * CARDINALITY * MINUTES); - const txMetrics = events.filter((event) => event.metricset?.name === 'transaction'); + const txMetrics = events.filter( + (event) => event.metricset?.name === 'transaction' && event.metricset?.interval === '1m' + ); expect(txMetrics.length).toBe(MINUTES * CARDINALITY); diff --git a/packages/kbn-cli-dev-mode/src/bootstrap.ts b/packages/kbn-cli-dev-mode/src/bootstrap.ts index b4d7324ee7265..e39e2f090af01 100644 --- a/packages/kbn-cli-dev-mode/src/bootstrap.ts +++ b/packages/kbn-cli-dev-mode/src/bootstrap.ts @@ -7,6 +7,7 @@ */ import { REPO_ROOT } from '@kbn/repo-info'; +import { getPackages } from '@kbn/repo-packages'; import { CliArgs, Env, RawConfigAdapter } from '@kbn/config'; import { CliDevMode } from './cli_dev_mode'; import { CliLog } from './log'; @@ -25,6 +26,7 @@ export async function bootstrapDevMode({ configs, cliArgs, applyConfigOverrides const env = Env.createDefault(REPO_ROOT, { configs, cliArgs, + repoPackages: getPackages(REPO_ROOT), }); const config = await loadConfig({ diff --git a/packages/kbn-cli-dev-mode/tsconfig.json b/packages/kbn-cli-dev-mode/tsconfig.json index ecc88ba0ab975..86ab4cf2592c4 100644 --- a/packages/kbn-cli-dev-mode/tsconfig.json +++ b/packages/kbn-cli-dev-mode/tsconfig.json @@ -24,6 +24,7 @@ "@kbn/repo-source-classifier", "@kbn/import-resolver", "@kbn/picomatcher", + "@kbn/repo-packages", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-config-mocks/src/env.mock.ts b/packages/kbn-config-mocks/src/env.mock.ts index 405a043863a81..8ed2123a3c81a 100644 --- a/packages/kbn-config-mocks/src/env.mock.ts +++ b/packages/kbn-config-mocks/src/env.mock.ts @@ -7,6 +7,7 @@ */ import { REPO_ROOT } from '@kbn/repo-info'; +import { getPackages } from '@kbn/repo-packages'; import { Env, type RawPackageInfo, type EnvOptions } from '@kbn/config'; type DeepPartial = { @@ -28,6 +29,7 @@ export function getEnvOptions(options: DeepPartial = {}): EnvOptions runExamples: false, ...(options.cliArgs || {}), }, + repoPackages: getPackages(REPO_ROOT), }; } diff --git a/packages/kbn-config-mocks/tsconfig.json b/packages/kbn-config-mocks/tsconfig.json index 2594906b1362f..5e0c421e09cd6 100644 --- a/packages/kbn-config-mocks/tsconfig.json +++ b/packages/kbn-config-mocks/tsconfig.json @@ -15,6 +15,7 @@ "@kbn/utility-types", "@kbn/doc-links", "@kbn/repo-info", + "@kbn/repo-packages", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-config/src/__snapshots__/env.test.ts.snap b/packages/kbn-config/src/__snapshots__/env.test.ts.snap index a8e2eb62dbedb..e356e6b5af142 100644 --- a/packages/kbn-config/src/__snapshots__/env.test.ts.snap +++ b/packages/kbn-config/src/__snapshots__/env.test.ts.snap @@ -39,6 +39,7 @@ Env { "/test/kibanaRoot/plugins", "/test/kibanaRoot/../kibana-extra", ], + "repoPackages": undefined, } `; @@ -81,6 +82,7 @@ Env { "/test/kibanaRoot/plugins", "/test/kibanaRoot/../kibana-extra", ], + "repoPackages": undefined, } `; @@ -122,6 +124,7 @@ Env { "/test/kibanaRoot/plugins", "/test/kibanaRoot/../kibana-extra", ], + "repoPackages": undefined, } `; @@ -163,6 +166,7 @@ Env { "/test/kibanaRoot/plugins", "/test/kibanaRoot/../kibana-extra", ], + "repoPackages": undefined, } `; @@ -204,6 +208,7 @@ Env { "/test/kibanaRoot/plugins", "/test/kibanaRoot/../kibana-extra", ], + "repoPackages": undefined, } `; @@ -245,5 +250,9 @@ Env { "/some/home/dir/plugins", "/some/home/dir/../kibana-extra", ], + "repoPackages": Array [ + "FakePackage1", + "FakePackage2", + ], } `; diff --git a/packages/kbn-config/src/env.test.ts b/packages/kbn-config/src/env.test.ts index 7411a59e16801..8633654c14ca9 100644 --- a/packages/kbn-config/src/env.test.ts +++ b/packages/kbn-config/src/env.test.ts @@ -7,6 +7,7 @@ */ import { mockPackage } from './env.test.mocks'; +import type { Package } from '@kbn/repo-packages'; import { Env, RawPackageInfo } from './env'; import { getEnvOptions } from './internal_mocks'; @@ -132,6 +133,7 @@ test('correctly creates environment with constructor.', () => { getEnvOptions({ cliArgs: { dev: false }, configs: ['/some/other/path/some-kibana.yml'], + repoPackages: ['FakePackage1', 'FakePackage2'] as unknown as Package[], }) ); diff --git a/packages/kbn-config/src/env.ts b/packages/kbn-config/src/env.ts index 4c54178447105..416f409bfcc25 100644 --- a/packages/kbn-config/src/env.ts +++ b/packages/kbn-config/src/env.ts @@ -9,12 +9,14 @@ import { resolve, join } from 'path'; import loadJsonFile from 'load-json-file'; import { getPluginSearchPaths } from '@kbn/plugin-discovery'; +import type { Package } from '@kbn/repo-packages'; import { PackageInfo, EnvironmentMode } from './types'; /** @internal */ export interface EnvOptions { configs: string[]; cliArgs: CliArgs; + repoPackages?: readonly Package[]; } /** @internal */ @@ -64,6 +66,8 @@ export class Env { public readonly logDir: string; /** @internal */ public readonly pluginSearchPaths: readonly string[]; + /** @internal */ + public readonly repoPackages?: readonly Package[]; /** * Information about Kibana package (version, build number etc.). @@ -100,6 +104,7 @@ export class Env { oss: options.cliArgs.oss, examples: options.cliArgs.runExamples, }); + this.repoPackages = options.repoPackages; this.cliArgs = Object.freeze(options.cliArgs); this.configs = Object.freeze(options.configs); diff --git a/packages/kbn-config/src/internal_mocks.ts b/packages/kbn-config/src/internal_mocks.ts index d321170ec8b00..6e4def3d65db8 100644 --- a/packages/kbn-config/src/internal_mocks.ts +++ b/packages/kbn-config/src/internal_mocks.ts @@ -14,7 +14,11 @@ import type { RawConfigService } from './raw'; import type { ConfigDeprecationContext } from './deprecation'; type DeepPartial = { - [P in keyof T]?: T[P] extends Array ? Array> : DeepPartial; + [P in keyof T]?: P extends 'repoPackages' + ? T[P] + : T[P] extends Array + ? Array> + : DeepPartial; }; export function getEnvOptions(options: DeepPartial = {}): EnvOptions { @@ -32,6 +36,7 @@ export function getEnvOptions(options: DeepPartial = {}): EnvOptions runExamples: false, ...(options.cliArgs || {}), }, + repoPackages: options.repoPackages, }; } diff --git a/packages/kbn-config/tsconfig.json b/packages/kbn-config/tsconfig.json index 0b75e6b015b33..887f6aa96e227 100644 --- a/packages/kbn-config/tsconfig.json +++ b/packages/kbn-config/tsconfig.json @@ -19,7 +19,8 @@ "@kbn/utility-types", "@kbn/i18n", "@kbn/plugin-discovery", - "@kbn/doc-links" + "@kbn/doc-links", + "@kbn/repo-packages" ], "exclude": [ "target/**/*", diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index 6406e0c635a28..7b02b09fdfbc8 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -415,6 +415,7 @@ export const getDocLinks = ({ kibanaBranch }: GetDocLinkOptions): DocLinks => { anomalyDetection: `${MACHINE_LEARNING_DOCS}ml-ad-overview.html`, anomalyDetectionJobs: `${MACHINE_LEARNING_DOCS}ml-ad-finding-anomalies.html`, anomalyDetectionConfiguringCategories: `${MACHINE_LEARNING_DOCS}ml-configuring-categories.html`, + anomalyDetectionScoreExplanation: `${MACHINE_LEARNING_DOCS}ml-ad-explain.html`, anomalyDetectionBucketSpan: `${MACHINE_LEARNING_DOCS}ml-ad-run-jobs.html#ml-ad-bucket-span`, anomalyDetectionCardinality: `${MACHINE_LEARNING_DOCS}ml-ad-run-jobs.html#ml-ad-cardinality`, anomalyDetectionCreateJobs: `${MACHINE_LEARNING_DOCS}ml-ad-run-jobs.html#ml-ad-create-job`, diff --git a/packages/kbn-health-gateway-server/src/config/config_service.ts b/packages/kbn-health-gateway-server/src/config/config_service.ts index 4b2b4b68f91ff..bd17a58f7b18d 100644 --- a/packages/kbn-health-gateway-server/src/config/config_service.ts +++ b/packages/kbn-health-gateway-server/src/config/config_service.ts @@ -8,6 +8,7 @@ import { fromRoot, REPO_ROOT } from '@kbn/repo-info'; import type { LoggerFactory } from '@kbn/logging'; +import { getPackages } from '@kbn/repo-packages'; import { ConfigService as KbnConfigService, CliArgs, Env, RawConfigService } from '@kbn/config'; import { getArgValues } from './read_argv'; @@ -38,6 +39,7 @@ export function getConfigService({ logger }: { logger: LoggerFactory }) { const env = Env.createDefault(REPO_ROOT, { configs: configPath, cliArgs: KIBANA_CLI_ARGS, + repoPackages: getPackages(REPO_ROOT), }); return new KbnConfigService(rawConfigService, env, logger); diff --git a/packages/kbn-health-gateway-server/tsconfig.json b/packages/kbn-health-gateway-server/tsconfig.json index 02a2f9c776b2c..c9a83f7a18223 100644 --- a/packages/kbn-health-gateway-server/tsconfig.json +++ b/packages/kbn-health-gateway-server/tsconfig.json @@ -22,6 +22,7 @@ "@kbn/server-http-tools", "@kbn/utility-types", "@kbn/repo-info", + "@kbn/repo-packages", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-kibana-manifest-schema/src/kibana_json_v2_schema.ts b/packages/kbn-kibana-manifest-schema/src/kibana_json_v2_schema.ts index 71df5b4449bfc..d3e1701c1ed75 100644 --- a/packages/kbn-kibana-manifest-schema/src/kibana_json_v2_schema.ts +++ b/packages/kbn-kibana-manifest-schema/src/kibana_json_v2_schema.ts @@ -55,17 +55,59 @@ export const MANIFEST_V2: JSONSchema = { `, default: false, }, + build: { + type: 'object', + properties: { + extraExcludes: { + type: 'array', + description: desc` + An array of micromatch patterns which will be used to exclude + files/directories in this package from the build. + `, + items: { + type: 'string', + }, + }, + noParse: { + type: 'array', + description: desc` + An array of micromatch patterns which will be used to exclude + files from being transformed automatically. Use this to skip large + assets which are already transpiled and do not need babel. + `, + items: { + type: 'string', + }, + }, + }, + }, + serviceFolders: { + description: desc` + Creates sections in the documentations based on the exports of the folders listed here. + If you need this you should probably split up your package, which is why this is deprecated. + `, + type: 'array', + items: { type: 'string' }, + deprecated: true, + }, + description: { + description: desc` + A brief description of what this package does and any capabilities it provides. + `, + type: 'string', + }, }, oneOf: [ { type: 'object', + required: ['type', 'plugin'], properties: { type: { - enum: ['plugin-browser', 'plugin-server'], + const: 'plugin', }, plugin: { type: 'object', - required: ['id'], + required: ['id', 'browser', 'server'], properties: { id: { type: 'string', @@ -74,11 +116,13 @@ export const MANIFEST_V2: JSONSchema = { configPath: { description: 'Root configuration path used by the plugin, defaults to "id" in snake_case format.', - type: 'array', - items: { - type: 'string', - pattern: PLUGIN_ID_PATTERN.source, - }, + oneOf: [ + { + type: 'array', + items: { type: 'string' }, + }, + { type: 'string' }, + ], }, requiredPlugins: { type: 'array', @@ -94,12 +138,6 @@ export const MANIFEST_V2: JSONSchema = { pattern: PLUGIN_ID_PATTERN.source, }, }, - description: { - description: desc` - A brief description of what this plugin does and any capabilities it provides. - `, - type: 'string', - }, enabledOnAnonymousPages: { description: desc` Specifies whether this plugin - and its required dependencies - will be enabled for anonymous pages (login page, status page when @@ -107,13 +145,25 @@ export const MANIFEST_V2: JSONSchema = { `, type: 'boolean', }, - serviceFolders: { + type: { description: desc` - Only used for the automatically generated API documentation. Specifying service - folders will cause your plugin API reference to be broken up into sub sections. + Only used to distinguish "preboot" plugins from standard plugins. + `, + enum: ['preboot'], + }, + browser: { + type: 'boolean', + description: desc` + Set this to true when your plugin has a browser-side component, causing the "public" directory + to be imported in a webpack bundle and the browser plugin to be started by core. + `, + }, + server: { + type: 'boolean', + description: desc` + Set this to true when your plugin has a server-side component, causing the "server" directory + to be imported by the server and the plugin started by core. `, - type: 'array', - items: { type: 'string' }, }, }, }, diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 2afd79ff64a94..b7439d781675b 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -19,6 +19,7 @@ pageLoadAssetSize: cloudLinks: 17629 cloudSecurityPosture: 19109 console: 46091 + contentManagement: 16254 controls: 40000 core: 435325 crossClusterReplication: 65408 diff --git a/packages/kbn-react-field/src/field_icon/__snapshots__/field_icon.test.tsx.snap b/packages/kbn-react-field/src/field_icon/__snapshots__/field_icon.test.tsx.snap index 1c2a5968d45e9..67ea69a8c269c 100644 --- a/packages/kbn-react-field/src/field_icon/__snapshots__/field_icon.test.tsx.snap +++ b/packages/kbn-react-field/src/field_icon/__snapshots__/field_icon.test.tsx.snap @@ -33,6 +33,16 @@ exports[`FieldIcon renders known field types _source is rendered 1`] = ` /> `; +exports[`FieldIcon renders known field types binary is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types boolean is rendered 1`] = ` `; +exports[`FieldIcon renders known field types dense_vector is rendered 1`] = ` + +`; + +exports[`FieldIcon renders known field types flattened is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types gauge is rendered 1`] = ` `; +exports[`FieldIcon renders known field types point is rendered 1`] = ` + +`; + +exports[`FieldIcon renders known field types rank_feature is rendered 1`] = ` + +`; + +exports[`FieldIcon renders known field types rank_features is rendered 1`] = ` + +`; + +exports[`FieldIcon renders known field types shape is rendered 1`] = ` + +`; + exports[`FieldIcon renders known field types string is rendered 1`] = ` { type: + | 'binary' | 'boolean' | 'conflict' | 'date' | 'date_range' + | 'dense_vector' | 'geo_point' | 'geo_shape' | 'ip' | 'ip_range' + | 'flattened' | 'match_only_text' | 'murmur3' | 'number' | 'number_range' + | 'rank_feature' + | 'rank_features' | '_source' + | 'point' + | 'shape' | 'string' | string | 'nested' @@ -39,22 +46,29 @@ export interface FieldIconProps extends Omit { const defaultIcon = { iconType: 'questionInCircle', color: 'gray' }; export const typeToEuiIconMap: Partial> = { + binary: { iconType: 'tokenBinary' }, boolean: { iconType: 'tokenBoolean' }, // icon for an index pattern mapping conflict in discover conflict: { iconType: 'alert', color: 'euiColorVis9', shape: 'square' }, date: { iconType: 'tokenDate' }, date_range: { iconType: 'tokenDate' }, + dense_vector: { iconType: 'tokenDenseVector' }, geo_point: { iconType: 'tokenGeo' }, geo_shape: { iconType: 'tokenGeo' }, ip: { iconType: 'tokenIP' }, ip_range: { iconType: 'tokenIP' }, + flattened: { iconType: 'tokenFlattened' }, match_only_text: { iconType: 'tokenString' }, // is a plugin's data type https://www.elastic.co/guide/en/elasticsearch/plugins/current/mapper-murmur3-usage.html murmur3: { iconType: 'tokenSearchType' }, number: { iconType: 'tokenNumber' }, number_range: { iconType: 'tokenNumber' }, + rank_feature: { iconType: 'tokenRankFeature' }, + rank_features: { iconType: 'tokenRankFeatures' }, histogram: { iconType: 'tokenHistogram' }, _source: { iconType: 'editorCodeBlock', color: 'gray' }, + point: { iconType: 'tokenShape' }, // there is no separate icon for `point` yet + shape: { iconType: 'tokenShape' }, string: { iconType: 'tokenString' }, text: { iconType: 'tokenString' }, keyword: { iconType: 'tokenKeyword' }, diff --git a/packages/kbn-repo-packages/index.js b/packages/kbn-repo-packages/index.js index 8668e385b95e4..0f6d2adf54cef 100644 --- a/packages/kbn-repo-packages/index.js +++ b/packages/kbn-repo-packages/index.js @@ -13,15 +13,11 @@ /** @typedef {import('./modern/types').KibanaPackageType} KibanaPackageType */ /** @typedef {import('./modern/types').ParsedPackageJson} ParsedPackageJson */ /** @typedef {import('./modern/types').KbnImportReq} KbnImportReq */ -/** @typedef {import('./modern/types').PluginTypeInfo} PluginTypeInfo */ +/** @typedef {import('./modern/types').PluginCategoryInfo} PluginCategoryInfo */ /** @typedef {Map} PackageMap */ const { getPackages, findPackageInfoForPath, getPkgMap } = require('./modern/get_packages'); -const { - parsePackageManifest, - readPackageManifest, - validatePackageManifest, -} = require('./modern/parse_package_manifest'); +const { readPackageManifest } = require('./modern/parse_package_manifest'); const { Package } = require('./modern/package'); const { parseKbnImportReq } = require('./modern/parse_kbn_import_req'); const Jsonc = require('./utils/jsonc'); @@ -39,9 +35,7 @@ module.exports = { getPackages, findPackageInfoForPath, getPkgMap, - parsePackageManifest, readPackageManifest, - validatePackageManifest, Jsonc, getDistributablePacakgesFilter, getPluginPackagesFilter, diff --git a/packages/kbn-repo-packages/modern/get_packages.js b/packages/kbn-repo-packages/modern/get_packages.js index a9b6db1e8f8c2..09d1b08868f30 100644 --- a/packages/kbn-repo-packages/modern/get_packages.js +++ b/packages/kbn-repo-packages/modern/get_packages.js @@ -69,7 +69,9 @@ function getPkgDirMap() { } /** - * Find the package which contains this path, if one exists + * Find the package which contains this path, if one exists, and return + * basic info about that package. + * * @param {string} repoRoot * @param {string} path absolute path to a file */ diff --git a/packages/kbn-repo-packages/modern/package.js b/packages/kbn-repo-packages/modern/package.js index 79b9b7e73387e..bff6fe01d451e 100644 --- a/packages/kbn-repo-packages/modern/package.js +++ b/packages/kbn-repo-packages/modern/package.js @@ -115,13 +115,6 @@ class Package { */ this.id = manifest.id; - /** - * Does this package expose a plugin, is it of one of the plugin types? - * @type {boolean} - * @readonly - */ - this.isPlugin = manifest.type === 'plugin-browser' || manifest.type === 'plugin-server'; - /** * Is this package highlighted as a "dev only" package? If so it will always * be listed in the devDependencies and will never end up in the build @@ -131,12 +124,20 @@ class Package { this.isDevOnly = !!this.manifest.devOnly; } + /** + * Does this package expose a plugin, is it of one of the plugin types? + * @returns {this is import('./types').PluginPackageManifest} + */ + isPlugin() { + return this.manifest.type === 'plugin'; + } + /** * Returns true if the package represents some type of plugin - * @returns {import('./types').PluginTypeInfo} + * @returns {import('./types').PluginCategoryInfo} */ - getPlguinType() { - if (!this.isPlugin) { + getPluginCategories() { + if (!this.isPlugin()) { throw new Error('package is not a plugin, check pkg.isPlugin before calling this method'); } @@ -156,7 +157,7 @@ class Package { * print all the BUILD.bazel files */ [inspect.custom]() { - return `${this.isPlugin ? `PluginPackage` : `Package`}<${this.normalizedRepoRelativeDir}>`; + return `${this.isPlugin() ? `PluginPackage` : `Package`}<${this.normalizedRepoRelativeDir}>`; } } diff --git a/packages/kbn-repo-packages/modern/parse_helpers.js b/packages/kbn-repo-packages/modern/parse_helpers.js index 66f834d8ca160..72afa44602689 100644 --- a/packages/kbn-repo-packages/modern/parse_helpers.js +++ b/packages/kbn-repo-packages/modern/parse_helpers.js @@ -9,8 +9,7 @@ /** @type {{ [k in import('./types').KibanaPackageType]: true }} */ const PACKAGE_TYPE_MAP = { 'functional-tests': true, - 'plugin-browser': true, - 'plugin-server': true, + plugin: true, 'shared-browser': true, 'shared-common': true, 'shared-scss': true, diff --git a/packages/kbn-repo-packages/modern/parse_package_manifest.js b/packages/kbn-repo-packages/modern/parse_package_manifest.js index 24012e7bf68c0..897b98df2830e 100644 --- a/packages/kbn-repo-packages/modern/parse_package_manifest.js +++ b/packages/kbn-repo-packages/modern/parse_package_manifest.js @@ -41,35 +41,38 @@ const isValidOwner = (v) => typeof v === 'string' && v.startsWith('@'); /** * @param {unknown} plugin - * @returns {import('./types').PluginPackageManifest['plugin']} + * @returns {import('./types').PluginPackageManifest['plugin']} plugin */ function validatePackageManifestPlugin(plugin) { if (!isObj(plugin)) { - throw err(`plugin`, plugin, `must be an object`); + throw err('plugin', plugin, 'must be an object'); } const { id, + browser, + server, + extraPublicDirs, configPath, requiredPlugins, optionalPlugins, requiredBundles, - description, enabledOnAnonymousPages, - serviceFolders, type, - ...extra } = plugin; - const extraKeys = Object.keys(extra); - if (extraKeys.length) { - throw new Error(`unexpected keys in "plugin" of package [${extraKeys.join(', ')}]`); - } - if (!isValidPluginId(id)) { throw err(`plugin.id`, id, `must be a string in camel or snake case`); } - + if (typeof browser !== 'boolean') { + throw err('plugin.browser', browser, 'must be a boolean'); + } + if (typeof server !== 'boolean') { + throw err('plugin.server', server, 'must be a boolean'); + } + if (extraPublicDirs !== undefined && !isArrOfStrings(extraPublicDirs)) { + throw err(`plugin.extraPublicDirs`, extraPublicDirs, `must be an array of strings`); + } if (configPath !== undefined && !(isSomeString(configPath) || isArrOfStrings(configPath))) { throw err( `plugin.configPath`, @@ -102,32 +105,25 @@ function validatePackageManifestPlugin(plugin) { ); } - if (description !== undefined && !isSomeString(description)) { - throw err(`plugin.description`, description, `must be a non-empty string when specified`); - } - if (enabledOnAnonymousPages !== undefined && typeof enabledOnAnonymousPages !== 'boolean') { throw err(`plugin.enabledOnAnonymousPages`, enabledOnAnonymousPages, `must be a boolean`); } - if (serviceFolders !== undefined && !isArrOfStrings(serviceFolders)) { - throw err(`plugin.serviceFolders`, serviceFolders, `must be an array of non-empty strings`); - } - if (type !== undefined && type !== 'preboot') { throw err(`plugin.type`, type, `must be undefined or "preboot"`); } return { id, + browser, + server, type, configPath, requiredPlugins, optionalPlugins, requiredBundles, - description, enabledOnAnonymousPages, - serviceFolders, + extraPublicDirs, }; } @@ -179,7 +175,18 @@ function validatePackageManifest(parsed) { throw new Error('expected manifest root to be an object'); } - const { type, id, owner, devOnly, plugin, sharedBrowserBundle, build, ...extra } = parsed; + const { + type, + id, + owner, + devOnly, + plugin, + sharedBrowserBundle, + build, + description, + serviceFolders, + ...extra + } = parsed; const extraKeys = Object.keys(extra); if (extraKeys.length) { @@ -209,11 +216,21 @@ function validatePackageManifest(parsed) { throw err(`devOnly`, devOnly, `must be a boolean when defined`); } + if (description !== undefined && !isSomeString(description)) { + throw err(`description`, description, `must be a non-empty string when specified`); + } + + if (serviceFolders !== undefined && !isArrOfStrings(serviceFolders)) { + throw err(`serviceFolders`, serviceFolders, `must be an array of non-empty strings`); + } + const base = { id, owner: Array.isArray(owner) ? owner : [owner], devOnly, build: validatePackageManifestBuild(build), + description, + serviceFolders, }; // return if this is one of the more basic types of package types @@ -224,8 +241,7 @@ function validatePackageManifest(parsed) { }; } - // handle the plugin field for plugin-* types - if (type === 'plugin-browser' || type === 'plugin-server') { + if (type === 'plugin') { return { type, ...base, @@ -254,32 +270,25 @@ function readPackageManifest(path) { content = Fs.readFileSync(path, 'utf8'); } catch (error) { if (error.code === 'ENOENT') { - throw new Error(`Missing kibana.jsonc file at ${path}`); + const err = new Error(`Missing kibana.jsonc file at ${path}`); + throw Object.assign(err, { code: 'ENOENT' }); } throw error; } try { - return parsePackageManifest(content); - } catch (error) { - throw new Error(`Unable to parse [${path}]: ${error.message}`); - } -} + let parsed; + try { + parsed = parse(content); + } catch (error) { + throw new Error(`Invalid JSONc: ${error.message}`); + } -/** - * Parse a kibana.jsonc file from a string - * @param {string} content - */ -function parsePackageManifest(content) { - let parsed; - try { - parsed = parse(content); + return validatePackageManifest(parsed); } catch (error) { - throw new Error(`Invalid JSONc: ${error.message}`); + throw new Error(`Unable to parse [${path}]: ${error.message}`); } - - return validatePackageManifest(parsed); } -module.exports = { parsePackageManifest, readPackageManifest, validatePackageManifest }; +module.exports = { readPackageManifest }; diff --git a/packages/kbn-repo-packages/modern/plugins.js b/packages/kbn-repo-packages/modern/plugins.js index f6f67df219678..4a96dcad1809e 100644 --- a/packages/kbn-repo-packages/modern/plugins.js +++ b/packages/kbn-repo-packages/modern/plugins.js @@ -18,7 +18,7 @@ function getPluginSearchPaths({ rootDir }) { /** * @param {import('./types').PluginSelector} selector - * @param {import('./types').PluginTypeInfo} type + * @param {import('./types').PluginCategoryInfo} type */ function matchType(selector, type) { if (!type.oss && selector.oss) { @@ -79,9 +79,9 @@ function getPluginPackagesFilter(selector = {}) { * @returns {pkg is import('./types').PluginPackage} */ return (pkg) => - pkg.isPlugin && + pkg.isPlugin() && matchParentDirsLimit(selector, pkg.directory) && - (matchType(selector, pkg.getPlguinType()) || + (matchType(selector, pkg.getPluginCategories()) || matchPluginPaths(selector, pkg.directory) || matchPluginParentDirs(selector, pkg.directory)); } @@ -99,11 +99,11 @@ function getDistributablePacakgesFilter() { return false; } - if (!pkg.isPlugin) { + if (!pkg.isPlugin()) { return true; } - const type = pkg.getPlguinType(); + const type = pkg.getPluginCategories(); return !(type.example || type.testPlugin); }; } diff --git a/packages/kbn-repo-packages/modern/types.ts b/packages/kbn-repo-packages/modern/types.ts index ce766f984e6ff..c6505bc5f2732 100644 --- a/packages/kbn-repo-packages/modern/types.ts +++ b/packages/kbn-repo-packages/modern/types.ts @@ -33,8 +33,7 @@ export interface ParsedPackageJson { } export type KibanaPackageType = - | 'plugin-browser' - | 'plugin-server' + | 'plugin' | 'shared-browser' | 'shared-server' | 'shared-common' @@ -79,23 +78,34 @@ interface PackageManifestBaseFields { */ noParse?: string[]; }; + /** + * A breif description of the package and what it provides + */ + description?: string; + /** + * Creates sections in the documentations based on the exports of the folders listed here. + * If you need this you should probably split up your package, which is why this is deprecated. + * @deprecated + */ + serviceFolders?: string[]; } export interface PluginPackageManifest extends PackageManifestBaseFields { - type: 'plugin-browser' | 'plugin-server'; + type: 'plugin'; /** * Details about the plugin which is contained within this package. */ plugin: { id: string; + browser: boolean; + server: boolean; configPath?: string | string[]; requiredPlugins?: string[]; optionalPlugins?: string[]; requiredBundles?: string[]; - description?: string; enabledOnAnonymousPages?: boolean; - serviceFolders?: string[]; type?: 'preboot'; + extraPublicDirs?: string[]; }; } @@ -149,6 +159,14 @@ export interface PluginSelector { * Absolute paths to parent directories of plugin packages which will always be included, regardless of the other settings */ limitParentDirs?: readonly string[]; + /** + * When set to true, only select plugins which have server-side components + */ + server?: boolean; + /** + * When set to true, only select plugins which have browser-side components + */ + browser?: boolean; } export interface KbnImportReq { @@ -166,7 +184,7 @@ export interface KbnImportReq { full: string; } -export interface PluginTypeInfo { +export interface PluginCategoryInfo { /** is this an oss plugin? */ oss: boolean; /** is this an example plugin? */ diff --git a/packages/kbn-repo-source-classifier/src/repo_source_classifier.ts b/packages/kbn-repo-source-classifier/src/repo_source_classifier.ts index 9957d3474e549..b83bc1b7148cc 100644 --- a/packages/kbn-repo-source-classifier/src/repo_source_classifier.ts +++ b/packages/kbn-repo-source-classifier/src/repo_source_classifier.ts @@ -177,16 +177,17 @@ export class RepoSourceClassifier { case 'functional-tests': case 'test-helper': return 'tests or mocks'; - case 'plugin-browser': case 'shared-browser': return 'browser package'; - case 'plugin-server': case 'shared-server': return 'server package'; case 'shared-scss': return 'static'; case 'shared-common': return 'common package'; + case 'plugin': + // classification in plugins is more complicated, fall through to remaining logic + break; default: // @ts-expect-error if there isn't an error here we are missing a case for a package type throw new Error(`unexpected package type [${manifest.type}]`); diff --git a/packages/kbn-securitysolution-exception-list-components/src/list_header/edit_modal/index.tsx b/packages/kbn-securitysolution-exception-list-components/src/list_header/edit_modal/index.tsx index 2db02aefd3af7..51b18adfbea32 100644 --- a/packages/kbn-securitysolution-exception-list-components/src/list_header/edit_modal/index.tsx +++ b/packages/kbn-securitysolution-exception-list-components/src/list_header/edit_modal/index.tsx @@ -43,7 +43,7 @@ const EditModalComponent: FC = ({ listDetails, onSave, onCancel )} -

{i18n.EXCEPTION_LIST_HEADER_EDIT_MODAL_TITLE(listDetails.name)}

+ {i18n.EXCEPTION_LIST_HEADER_EDIT_MODAL_TITLE(listDetails.name)}
diff --git a/packages/kbn-slo-schema/src/rest_specs/slo.ts b/packages/kbn-slo-schema/src/rest_specs/slo.ts index e09f14fb947f1..8fd6e757c6ffb 100644 --- a/packages/kbn-slo-schema/src/rest_specs/slo.ts +++ b/packages/kbn-slo-schema/src/rest_specs/slo.ts @@ -75,6 +75,7 @@ const sloResponseSchema = t.type({ objective: objectiveSchema, revision: t.number, settings: settingsSchema, + enabled: t.boolean, createdAt: dateType, updatedAt: dateType, }); @@ -101,6 +102,10 @@ const updateSLOParamsSchema = t.type({ }), }); +const manageSLOParamsSchema = t.type({ + path: t.type({ id: t.string }), +}); + const updateSLOResponseSchema = sloResponseSchema; const findSLOResponseSchema = t.type({ @@ -122,6 +127,8 @@ type CreateSLOResponse = t.TypeOf; // Raw respon type GetSLOResponse = t.OutputOf; +type ManageSLOParams = t.TypeOf; + type UpdateSLOInput = t.OutputOf; type UpdateSLOParams = t.TypeOf; type UpdateSLOResponse = t.OutputOf; @@ -144,6 +151,7 @@ export { getSLOResponseSchema, fetchHistoricalSummaryParamsSchema, fetchHistoricalSummaryResponseSchema, + manageSLOParamsSchema, sloResponseSchema, sloWithSummaryResponseSchema, updateSLOParamsSchema, @@ -160,6 +168,7 @@ export type { FetchHistoricalSummaryParams, FetchHistoricalSummaryResponse, HistoricalSummaryResponse, + ManageSLOParams, SLOResponse, SLOWithSummaryResponse, UpdateSLOInput, diff --git a/packages/kbn-slo-schema/src/schema/slo.ts b/packages/kbn-slo-schema/src/schema/slo.ts index 91727fe4e9973..1e2e1ec810389 100644 --- a/packages/kbn-slo-schema/src/schema/slo.ts +++ b/packages/kbn-slo-schema/src/schema/slo.ts @@ -43,6 +43,7 @@ const sloSchema = t.type({ objective: objectiveSchema, settings: settingsSchema, revision: t.number, + enabled: t.boolean, createdAt: dateType, updatedAt: dateType, }); diff --git a/packages/kbn-test/src/kbn_client/import_export/parse_archive.ts b/packages/kbn-test/src/kbn_client/import_export/parse_archive.ts index b6b85ba521525..eda37b62cf0d6 100644 --- a/packages/kbn-test/src/kbn_client/import_export/parse_archive.ts +++ b/packages/kbn-test/src/kbn_client/import_export/parse_archive.ts @@ -14,9 +14,19 @@ export interface SavedObject { [key: string]: unknown; } -export async function parseArchive(path: string): Promise { +export async function parseArchive( + path: string, + { stripSummary = false }: { stripSummary?: boolean } = {} +): Promise { return (await Fs.readFile(path, 'utf-8')) .split(/\r?\n\r?\n/) .filter((line) => !!line) - .map((line) => JSON.parse(line)); + .map((line) => JSON.parse(line)) + .filter( + stripSummary + ? (object) => { + return object.type && object.id; + } + : () => true + ); } diff --git a/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts b/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts index 5259b50cfce85..f9646410f64b5 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_import_export.ts @@ -25,6 +25,7 @@ interface ImportApiResponse { success: boolean; [key: string]: unknown; } + export class KbnClientImportExport { constructor( public readonly log: ToolingLog, @@ -92,7 +93,7 @@ export class KbnClientImportExport { const src = this.resolveAndValidatePath(path); this.log.debug('unloading docs from archive at', src); - const objects = await parseArchive(src); + const objects = await parseArchive(src, { stripSummary: true }); this.log.info('deleting', objects.length, 'objects', { space: options?.space }); const { deleted, missing } = await this.savedObjects.bulkDelete({ diff --git a/packages/kbn-test/src/kbn_client/kbn_client_saved_objects.ts b/packages/kbn-test/src/kbn_client/kbn_client_saved_objects.ts index b896aef3d2f56..879050fd40dec 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_saved_objects.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_saved_objects.ts @@ -6,12 +6,9 @@ * Side Public License, v 1. */ -import { inspect } from 'util'; -import * as Rx from 'rxjs'; -import { mergeMap } from 'rxjs/operators'; -import { isAxiosResponseError } from '@kbn/dev-utils'; -import { createFailError } from '@kbn/dev-cli-errors'; -import { ToolingLog } from '@kbn/tooling-log'; +import { chunk } from 'lodash'; +import type { ToolingLog } from '@kbn/tooling-log'; +import type { SavedObjectsBulkDeleteResponse } from '@kbn/core-saved-objects-api-server'; import { KbnClientRequester, uriencode } from './kbn_client_requester'; @@ -57,22 +54,15 @@ interface MigrateResponse { result: Array<{ status: string }>; } -interface FindApiResponse { - saved_objects: Array<{ - type: string; - id: string; - [key: string]: unknown; - }>; - total: number; - per_page: number; - page: number; -} - interface CleanOptions { space?: string; types: string[]; } +interface CleanApiResponse { + deleted: number; +} + interface DeleteObjectsOptions { space?: string; objects: Array<{ @@ -81,13 +71,43 @@ interface DeleteObjectsOptions { }>; } -async function concurrently(maxConcurrency: number, arr: T[], fn: (item: T) => Promise) { - if (arr.length) { - await Rx.lastValueFrom( - Rx.from(arr).pipe(mergeMap(async (item) => await fn(item), maxConcurrency)) - ); - } -} +const DELETE_CHUNK_SIZE = 50; + +// add types here +const STANDARD_LIST_TYPES = [ + 'url', + 'index-pattern', + 'action', + 'query', + 'alert', + 'graph-workspace', + 'tag', + 'visualization', + 'canvas-element', + 'canvas-workpad', + 'dashboard', + 'search', + 'lens', + 'map', + 'cases', + 'uptime-dynamic-settings', + 'osquery-saved-query', + 'osquery-pack', + 'infrastructure-ui-source', + 'metrics-explorer-view', + 'inventory-view', + 'infrastructure-monitoring-log-view', + 'apm-indices', + // Fleet saved object types + 'ingest-outputs', + 'ingest-download-sources', + 'ingest-agent-policies', + 'ingest-package-policies', + 'epm-packages', + 'epm-packages-assets', + 'fleet-preconfiguration-deletion-record', + 'fleet-fleet-server-host', +]; /** * SO client for FTR. @@ -194,74 +214,22 @@ export class KbnClientSavedObjects { public async clean(options: CleanOptions) { this.log.debug('Cleaning all saved objects', { space: options.space }); - let deleted = 0; - - while (true) { - const resp = await this.requester.request({ - method: 'GET', - path: options.space - ? uriencode`/s/${options.space}/internal/ftr/kbn_client_so/_find` - : `/internal/ftr/kbn_client_so/_find`, - query: { - per_page: 1000, - type: options.types, - fields: 'none', - }, - }); - - this.log.info('deleting batch of', resp.data.saved_objects.length, 'objects'); - const deletion = await this.bulkDelete({ - space: options.space, - objects: resp.data.saved_objects, - }); - deleted += deletion.deleted; - - if (resp.data.total <= resp.data.per_page) { - break; - } - } + const resp = await this.requester.request({ + method: 'POST', + path: options.space + ? uriencode`/s/${options.space}/internal/ftr/kbn_client_so/_clean` + : `/internal/ftr/kbn_client_so/_clean`, + body: { + types: options.types, + }, + }); + const deleted = resp.data.deleted; this.log.success('deleted', deleted, 'objects'); } public async cleanStandardList(options?: { space?: string }) { - // add types here - const types = [ - 'url', - 'index-pattern', - 'action', - 'query', - 'alert', - 'graph-workspace', - 'tag', - 'visualization', - 'canvas-element', - 'canvas-workpad', - 'dashboard', - 'search', - 'lens', - 'map', - 'cases', - 'uptime-dynamic-settings', - 'osquery-saved-query', - 'osquery-pack', - 'infrastructure-ui-source', - 'metrics-explorer-view', - 'inventory-view', - 'infrastructure-monitoring-log-view', - 'apm-indices', - // Fleet saved object types - 'ingest-outputs', - 'ingest-download-sources', - 'ingest-agent-policies', - 'ingest-package-policies', - 'epm-packages', - 'epm-packages-assets', - 'fleet-preconfiguration-deletion-record', - 'fleet-fleet-server-host', - ]; - - const newOptions = { types, space: options?.space }; + const newOptions = { types: STANDARD_LIST_TYPES, space: options?.space }; await this.clean(newOptions); } @@ -269,28 +237,25 @@ export class KbnClientSavedObjects { let deleted = 0; let missing = 0; - await concurrently(20, options.objects, async (obj) => { - try { - await this.requester.request({ - method: 'DELETE', - path: options.space - ? uriencode`/s/${options.space}/internal/ftr/kbn_client_so/${obj.type}/${obj.id}` - : uriencode`/internal/ftr/kbn_client_so/${obj.type}/${obj.id}`, - }); - deleted++; - } catch (error) { - if (isAxiosResponseError(error)) { - if (error.response.status === 404) { - missing++; - return; - } - - throw createFailError(`${error.response.status} resp: ${inspect(error.response.data)}`); - } + const chunks = chunk(options.objects, DELETE_CHUNK_SIZE); - throw error; - } - }); + for (let i = 0; i < chunks.length; i++) { + const objects = chunks[i]; + const { data: response } = await this.requester.request({ + method: 'POST', + path: options.space + ? uriencode`/s/${options.space}/internal/ftr/kbn_client_so/_bulk_delete` + : uriencode`/internal/ftr/kbn_client_so/_bulk_delete`, + body: objects.map(({ type, id }) => ({ type, id })), + }); + response.statuses.forEach((status) => { + if (status.success) { + deleted++; + } else if (status.error?.statusCode === 404) { + missing++; + } + }); + } return { deleted, missing }; } diff --git a/packages/kbn-test/tsconfig.json b/packages/kbn-test/tsconfig.json index df6a698fb2e71..7d73db67a0b92 100644 --- a/packages/kbn-test/tsconfig.json +++ b/packages/kbn-test/tsconfig.json @@ -31,5 +31,6 @@ "@kbn/stdio-dev-helpers", "@kbn/babel-register", "@kbn/repo-packages", + "@kbn/core-saved-objects-api-server", ] } diff --git a/src/core/server/integration_tests/ui_settings/doc_exists.ts b/src/core/server/integration_tests/ui_settings/doc_exists.ts index 60a0a5ca59c9f..0f4191e92ec2e 100644 --- a/src/core/server/integration_tests/ui_settings/doc_exists.ts +++ b/src/core/server/integration_tests/ui_settings/doc_exists.ts @@ -9,8 +9,13 @@ import { getServices, chance } from './lib'; export const docExistsSuite = (savedObjectsIndex: string) => () => { - async function setup(options: { initialSettings?: Record } = {}) { - const { initialSettings } = options; + async function setup( + options: { + initialSettings?: Record; + initialGlobalSettings?: Record; + } = {} + ) { + const { initialSettings, initialGlobalSettings } = options; const { uiSettings, uiSettingsGlobal, esClient, supertest } = getServices(); @@ -27,7 +32,9 @@ export const docExistsSuite = (savedObjectsIndex: string) => () => { if (initialSettings) { await uiSettings.setMany(initialSettings); - await uiSettingsGlobal.setMany(uiSettingsGlobal); + } + if (initialGlobalSettings) { + await uiSettingsGlobal.setMany(initialGlobalSettings); } return { uiSettings, uiSettingsGlobal, supertest }; @@ -198,7 +205,7 @@ export const docExistsSuite = (savedObjectsIndex: string) => () => { const defaultIndex = chance.word({ length: 10 }); const { supertest } = await setup({ - initialSettings: { + initialGlobalSettings: { defaultIndex, }, }); @@ -213,10 +220,6 @@ export const docExistsSuite = (savedObjectsIndex: string) => () => { defaultIndex: { userValue: defaultIndex, }, - foo: { - userValue: 'bar', - isOverridden: true, - }, }, }); }); @@ -242,15 +245,12 @@ export const docExistsSuite = (savedObjectsIndex: string) => () => { defaultIndex: { userValue: defaultIndex, }, - foo: { - userValue: 'bar', - isOverridden: true, - }, }, }); }); - it('returns a 400 if trying to set overridden value', async () => { + // kbn server only created with uiSettings overrides. Global settings don't seem to support overrides from kibana.yml + it.skip('returns a 400 if trying to set overridden value', async () => { const { supertest } = await setup(); const { body } = await supertest('delete', '/api/kibana/global_settings/foo') @@ -288,15 +288,12 @@ export const docExistsSuite = (savedObjectsIndex: string) => () => { defaultIndex: { userValue: defaultIndex, }, - foo: { - userValue: 'bar', - isOverridden: true, - }, }, }); }); - it('returns a 400 if trying to set overridden value', async () => { + // kbn server only created with uiSettings overrides. Global settings don't seem to support overrides from kibana.yml + it.skip('returns a 400 if trying to set overridden value', async () => { const { supertest } = await setup(); const { body } = await supertest('post', '/api/kibana/global_settings') @@ -320,7 +317,7 @@ export const docExistsSuite = (savedObjectsIndex: string) => () => { const defaultIndex = chance.word({ length: 10 }); const { uiSettingsGlobal, supertest } = await setup({ - initialSettings: { defaultIndex }, + initialGlobalSettings: { defaultIndex }, }); expect(await uiSettingsGlobal.get('defaultIndex')).toBe(defaultIndex); @@ -335,14 +332,11 @@ export const docExistsSuite = (savedObjectsIndex: string) => () => { buildNum: { userValue: expect.any(Number), }, - foo: { - userValue: 'bar', - isOverridden: true, - }, }, }); }); - it('returns a 400 if deleting overridden value', async () => { + // kbn server only created with uiSettings overrides. Global settings don't seem to support overrides from kibana.yml + it.skip('returns a 400 if deleting overridden value', async () => { const { supertest } = await setup(); const { body } = await supertest('delete', '/api/kibana/global_settings/foo').expect(400); diff --git a/src/core/server/integration_tests/ui_settings/doc_missing.ts b/src/core/server/integration_tests/ui_settings/doc_missing.ts index b7953cd4b25d4..f48024ff6c928 100644 --- a/src/core/server/integration_tests/ui_settings/doc_missing.ts +++ b/src/core/server/integration_tests/ui_settings/doc_missing.ts @@ -45,7 +45,6 @@ export const docMissingSuite = (savedObjectsIndex: string) => () => { describe('set route', () => { it('creates doc, returns a 200 with value set', async () => { const { supertest } = getServices(); - const defaultIndex = chance.word(); const { body } = await supertest('post', '/api/kibana/settings/defaultIndex') diff --git a/src/core/server/integration_tests/ui_settings/lib/servers.ts b/src/core/server/integration_tests/ui_settings/lib/servers.ts index a02b2fb86b119..9aaf781099e67 100644 --- a/src/core/server/integration_tests/ui_settings/lib/servers.ts +++ b/src/core/server/integration_tests/ui_settings/lib/servers.ts @@ -18,6 +18,7 @@ import { type TestUtils, type HttpMethod, } from '@kbn/core-test-helpers-kbn-server'; +import { schema } from '@kbn/config-schema'; import type { SavedObjectsClientContract, IUiSettingsClient } from '../../..'; let servers: TestUtils; @@ -49,6 +50,19 @@ export async function startServers() { }); esServer = await servers.startES(); kbn = await servers.startKibana(); + // register global settings + kbn.coreSetup.uiSettings.registerGlobal({ + foo: { + value: 'bar', + schema: schema.string(), + }, + }); + kbn.coreSetup.uiSettings.registerGlobal({ + defaultIndex: { + value: 'something', + schema: schema.string(), + }, + }); } export function getServices() { @@ -64,7 +78,6 @@ export function getServices() { const uiSettings = kbn.coreStart.uiSettings.asScopedToClient(savedObjectsClient); const uiSettingsGlobal = kbn.coreStart.uiSettings.globalAsScopedToClient(savedObjectsClient); - services = { supertest: (method: HttpMethod, path: string) => getSupertest(kbn.root, method, path), esClient, diff --git a/src/core/server/integration_tests/ui_settings/routes.test.ts b/src/core/server/integration_tests/ui_settings/routes.test.ts index ba806d04079ee..8ca1a1ad7dad1 100644 --- a/src/core/server/integration_tests/ui_settings/routes.test.ts +++ b/src/core/server/integration_tests/ui_settings/routes.test.ts @@ -26,6 +26,19 @@ describe('ui settings service', () => { schema: schema.string(), }, }); + // global uiSettings have to be registerd to be set + uiSettings.registerGlobal({ + custom: { + value: '42', + schema: schema.string(), + }, + }); + uiSettings.registerGlobal({ + foo: { + value: 'foo', + schema: schema.string(), + }, + }); await root.start(); }); diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index 4c8c7067e2ceb..eb4c5d4d8b484 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -84,6 +84,6 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.4.0': ['Elastic License 2.0'], - '@elastic/eui@73.0.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@74.0.1': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry }; diff --git a/src/plugins/content_management/README.md b/src/plugins/content_management/README.md new file mode 100644 index 0000000000000..08bbe41c4f787 --- /dev/null +++ b/src/plugins/content_management/README.md @@ -0,0 +1,3 @@ +# Content management + +The content management plugin provides functionality to manage content in Kibana. diff --git a/src/plugins/content_management/common/constants.ts b/src/plugins/content_management/common/constants.ts new file mode 100644 index 0000000000000..5c35a41577b82 --- /dev/null +++ b/src/plugins/content_management/common/constants.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. + */ + +export const PLUGIN_ID = 'contentManagement'; + +export const API_ENDPOINT = '/api/content_management'; diff --git a/src/plugins/content_management/common/index.ts b/src/plugins/content_management/common/index.ts new file mode 100644 index 0000000000000..bc5dde9968d6d --- /dev/null +++ b/src/plugins/content_management/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 { PLUGIN_ID, API_ENDPOINT } from './constants'; diff --git a/src/plugins/content_management/jest.config.js b/src/plugins/content_management/jest.config.js new file mode 100644 index 0000000000000..130f1acfae958 --- /dev/null +++ b/src/plugins/content_management/jest.config.js @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/src/plugins/content_management'], + coverageDirectory: '/target/kibana-coverage/jest/src/plugins/content_management', + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/src/plugins/content_management/{common,public,server}/**/*.{js,ts,tsx}', + ], +}; diff --git a/src/plugins/content_management/kibana.json b/src/plugins/content_management/kibana.json new file mode 100644 index 0000000000000..8be769a8553c8 --- /dev/null +++ b/src/plugins/content_management/kibana.json @@ -0,0 +1,14 @@ +{ + "id": "contentManagement", + "version": "kibana", + "server": true, + "ui": true, + "requiredPlugins": [], + "requiredBundles": [], + "optionalPlugins": [], + "owner": { + "name": "@elastic/kibana-global-experience", + "githubTeam": "@elastic/kibana-global-experience" + }, + "description": "Content management app" +} diff --git a/src/plugins/content_management/public/index.ts b/src/plugins/content_management/public/index.ts new file mode 100644 index 0000000000000..786c4f212481f --- /dev/null +++ b/src/plugins/content_management/public/index.ts @@ -0,0 +1,15 @@ +/* + * 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 { ContentManagementPlugin } from './plugin'; + +export function plugin() { + return new ContentManagementPlugin(); +} + +export type { ContentManagementPublicStart } from './types'; diff --git a/src/plugins/content_management/public/plugin.ts b/src/plugins/content_management/public/plugin.ts new file mode 100644 index 0000000000000..1650d95955d44 --- /dev/null +++ b/src/plugins/content_management/public/plugin.ts @@ -0,0 +1,26 @@ +/* + * 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 { CoreSetup, Plugin } from '@kbn/core/public'; +import { + ContentManagementPublicStart, + ContentManagementPublicSetup, + SetupDependencies, +} from './types'; + +export class ContentManagementPlugin + implements Plugin +{ + public setup(core: CoreSetup, deps: SetupDependencies) { + return {}; + } + + public start() { + return {}; + } +} diff --git a/src/plugins/content_management/public/types.ts b/src/plugins/content_management/public/types.ts new file mode 100644 index 0000000000000..e06d6e48bba40 --- /dev/null +++ b/src/plugins/content_management/public/types.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ContentManagementPublicSetup {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ContentManagementPublicStart {} diff --git a/src/plugins/content_management/server/index.ts b/src/plugins/content_management/server/index.ts new file mode 100644 index 0000000000000..e56a3b845fa93 --- /dev/null +++ b/src/plugins/content_management/server/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { PluginInitializerContext } from '@kbn/core/server'; + +import { ContentManagementPlugin } from './plugin'; + +export function plugin(initializerContext: PluginInitializerContext) { + return new ContentManagementPlugin(initializerContext); +} + +export type { ContentManagementServerSetup, ContentManagementServerStart } from './types'; diff --git a/src/plugins/content_management/server/plugin.ts b/src/plugins/content_management/server/plugin.ts new file mode 100755 index 0000000000000..54ed5ba7a7c2d --- /dev/null +++ b/src/plugins/content_management/server/plugin.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import type { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/server'; +import { + ContentManagementServerSetup, + ContentManagementServerStart, + SetupDependencies, +} from './types'; + +export class ContentManagementPlugin + implements Plugin +{ + constructor(initializerContext: PluginInitializerContext) {} + + public setup(core: CoreSetup) { + return {}; + } + + public start(core: CoreStart) { + return {}; + } +} diff --git a/src/plugins/content_management/server/types.ts b/src/plugins/content_management/server/types.ts new file mode 100644 index 0000000000000..0f4cc3138b5e9 --- /dev/null +++ b/src/plugins/content_management/server/types.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SetupDependencies {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ContentManagementServerSetup {} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ContentManagementServerStart {} diff --git a/src/plugins/content_management/tsconfig.json b/src/plugins/content_management/tsconfig.json new file mode 100644 index 0000000000000..d0ad9f31d30c0 --- /dev/null +++ b/src/plugins/content_management/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + }, + "include": ["common/**/*", "public/**/*", "server/**/*", ".storybook/**/*"], + "kbn_references": [ + "@kbn/core", + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx b/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx index dbabf2f1ee76b..2a41cc5a2bd8e 100644 --- a/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx @@ -98,8 +98,8 @@ export function CopyToDashboardModal({ > - -

{dashboardCopyToDashboardActionStrings.getDisplayName()}

+ + {dashboardCopyToDashboardActionStrings.getDisplayName()}
diff --git a/src/plugins/dashboard/public/dashboard_app/listing/confirm_overlays.tsx b/src/plugins/dashboard/public/dashboard_app/listing/confirm_overlays.tsx index e1bd8c339e228..b8d6f436c38ba 100644 --- a/src/plugins/dashboard/public/dashboard_app/listing/confirm_overlays.tsx +++ b/src/plugins/dashboard/public/dashboard_app/listing/confirm_overlays.tsx @@ -73,8 +73,8 @@ export const confirmCreateWithUnsaved = ( aria-describedby={descriptionId} > - -

{createConfirmStrings.getCreateTitle()}

+ + {createConfirmStrings.getCreateTitle()}
diff --git a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid.test.tsx b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid.test.tsx index b6dfebe9beb14..afc346f55e4c3 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid.test.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid.test.tsx @@ -10,24 +10,39 @@ import sizeMe from 'react-sizeme'; import React from 'react'; -import { - ContactCardEmbeddableFactory, - CONTACT_CARD_EMBEDDABLE, -} from '@kbn/embeddable-plugin/public/lib/test_samples/embeddables'; +import { CONTACT_CARD_EMBEDDABLE } from '@kbn/embeddable-plugin/public/lib/test_samples/embeddables'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import { pluginServices } from '../../../services/plugin_services'; import { DashboardGrid } from './dashboard_grid'; -import { getSampleDashboardInput, mockDashboardReduxEmbeddableTools } from '../../../mocks'; +import { DashboardContainer } from '../../embeddable/dashboard_container'; +import { getSampleDashboardInput } from '../../../mocks'; +import type { Props as DashboardGridItemProps } from './dashboard_grid_item'; -const DashboardServicesProvider = pluginServices.getContextProvider(); +jest.mock('./dashboard_grid_item', () => { + return { + // eslint-disable-next-line @typescript-eslint/no-var-requires + DashboardGridItem: require('react').forwardRef( + (props: DashboardGridItemProps, ref: HTMLDivElement) => { + const className = + props.expandedPanelId === undefined + ? 'regularPanel' + : props.expandedPanelId === props.id + ? 'expandedPanel' + : 'hiddenPanel'; + return ( +
+ mockDashboardGridItem +
+ ); + } + ), + }; +}); -async function prepare() { - const embeddableFactory = new ContactCardEmbeddableFactory((() => null) as any, {} as any); - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(embeddableFactory); +const DashboardServicesProvider = pluginServices.getContextProvider(); +async function getDashboardContainer() { const initialInput = getSampleDashboardInput({ panels: { '1': { @@ -42,12 +57,9 @@ async function prepare() { }, }, }); - const dashboardMock = await mockDashboardReduxEmbeddableTools({ explicitInput: initialInput }); - - return { - tools: dashboardMock.tools, - dashboardContainer: dashboardMock.dashboardContainer, - }; + const dashboardContainer = new DashboardContainer(initialInput); + await dashboardContainer.untilInitialized(); + return dashboardContainer; } beforeAll(() => { @@ -60,45 +72,47 @@ afterAll(() => { sizeMe.noPlaceholders = false; }); -// unhandled promise rejection: https://github.com/elastic/kibana/issues/112699 -test.skip('renders DashboardGrid', async () => { - const { tools } = await prepare(); +test('renders DashboardGrid', async () => { + const dashboardContainer = await getDashboardContainer(); + const { Wrapper: DashboardReduxWrapper } = dashboardContainer.getReduxEmbeddableTools(); const component = mountWithIntl( - + - + ); - const panelElements = component.find('EmbeddableChildPanel'); + const panelElements = component.find('GridItem'); expect(panelElements.length).toBe(2); }); -// unhandled promise rejection: https://github.com/elastic/kibana/issues/112699 -test.skip('renders DashboardGrid with no visualizations', async () => { - const { tools, dashboardContainer } = await prepare(); +test('renders DashboardGrid with no visualizations', async () => { + const dashboardContainer = await getDashboardContainer(); + const { Wrapper: DashboardReduxWrapper } = dashboardContainer.getReduxEmbeddableTools(); + const component = mountWithIntl( - + - + ); dashboardContainer.updateInput({ panels: {} }); component.update(); - expect(component.find('EmbeddableChildPanel').length).toBe(0); + expect(component.find('GridItem').length).toBe(0); }); -// unhandled promise rejection: https://github.com/elastic/kibana/issues/112699 -test.skip('DashboardGrid removes panel when removed from container', async () => { - const { tools, dashboardContainer } = await prepare(); +test('DashboardGrid removes panel when removed from container', async () => { + const dashboardContainer = await getDashboardContainer(); + const { Wrapper: DashboardReduxWrapper } = dashboardContainer.getReduxEmbeddableTools(); + const component = mountWithIntl( - + - + ); @@ -107,35 +121,34 @@ test.skip('DashboardGrid removes panel when removed from container', async () => delete filteredPanels['1']; dashboardContainer.updateInput({ panels: filteredPanels }); component.update(); - const panelElements = component.find('EmbeddableChildPanel'); + const panelElements = component.find('GridItem'); expect(panelElements.length).toBe(1); }); -// unhandled promise rejection: https://github.com/elastic/kibana/issues/112699 -test.skip('DashboardGrid renders expanded panel', async () => { - const { tools, dashboardContainer } = await prepare(); +test('DashboardGrid renders expanded panel', async () => { + const dashboardContainer = await getDashboardContainer(); + const { Wrapper: DashboardReduxWrapper } = dashboardContainer.getReduxEmbeddableTools(); + const component = mountWithIntl( - + - + ); dashboardContainer.setExpandedPanelId('1'); component.update(); // Both panels should still exist in the dom, so nothing needs to be re-fetched once minimized. - expect(component.find('EmbeddableChildPanel').length).toBe(2); + expect(component.find('GridItem').length).toBe(2); - expect( - (component.find('DashboardGridUi').state() as { expandedPanelId?: string }).expandedPanelId - ).toBe('1'); + expect(component.find('#mockDashboardGridItem_1').hasClass('expandedPanel')).toBe(true); + expect(component.find('#mockDashboardGridItem_2').hasClass('hiddenPanel')).toBe(true); dashboardContainer.setExpandedPanelId(); component.update(); - expect(component.find('EmbeddableChildPanel').length).toBe(2); + expect(component.find('GridItem').length).toBe(2); - expect( - (component.find('DashboardGridUi').state() as { expandedPanelId?: string }).expandedPanelId - ).toBeUndefined(); + expect(component.find('#mockDashboardGridItem_1').hasClass('regularPanel')).toBe(true); + expect(component.find('#mockDashboardGridItem_2').hasClass('regularPanel')).toBe(true); }); diff --git a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx index 6e09254fed0d0..1c8b3d992187d 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx @@ -22,7 +22,7 @@ import { useDashboardContainerContext } from '../../dashboard_container_renderer type DivProps = Pick, 'className' | 'style' | 'children'>; -interface Props extends DivProps { +export interface Props extends DivProps { id: DashboardPanelState['explicitInput']['id']; index?: number; type: DashboardPanelState['type']; diff --git a/src/plugins/data/public/utils/table_inspector_view/components/__snapshots__/data_view.test.tsx.snap b/src/plugins/data/public/utils/table_inspector_view/components/__snapshots__/data_view.test.tsx.snap index 56cda90c489b6..f65b08fc632bc 100644 --- a/src/plugins/data/public/utils/table_inspector_view/components/__snapshots__/data_view.test.tsx.snap +++ b/src/plugins/data/public/utils/table_inspector_view/components/__snapshots__/data_view.test.tsx.snap @@ -255,7 +255,7 @@ Array [ @@ -290,7 +290,9 @@ Array [ - + @@ -595,7 +597,7 @@ Array [
@@ -631,7 +633,9 @@ Array [ - + diff --git a/src/plugins/data_view_field_editor/public/components/field_editor/field_detail.tsx b/src/plugins/data_view_field_editor/public/components/field_editor/field_detail.tsx index b9db87b65e3cd..cd3381c191ce7 100644 --- a/src/plugins/data_view_field_editor/public/components/field_editor/field_detail.tsx +++ b/src/plugins/data_view_field_editor/public/components/field_editor/field_detail.tsx @@ -23,7 +23,7 @@ const geti18nTexts = (): { defaultMessage: 'Set custom label', }), description: i18n.translate('indexPatternFieldEditor.editor.form.customLabelDescription', { - defaultMessage: `Create a label to display in place of the field name in Discover, Maps, and Visualize. Useful for shortening a long field name. Queries and filters use the original field name.`, + defaultMessage: `Create a label to display in place of the field name in Discover, Maps, Lens, Visualize, and TSVB. Useful for shortening a long field name. Queries and filters use the original field name.`, }), }, value: { diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/__snapshots__/url.test.tsx.snap b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/__snapshots__/url.test.tsx.snap index 5cc6ef3f937f9..cbd533689169a 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/__snapshots__/url.test.tsx.snap +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/__snapshots__/url.test.tsx.snap @@ -172,7 +172,7 @@ exports[`UrlFormatEditor should render normally 1`] = ` @@ -237,7 +237,7 @@ exports[`UrlFormatEditor should render normally 1`] = ` @@ -298,7 +298,7 @@ exports[`UrlFormatEditor should render normally 1`] = `
@@ -343,7 +343,9 @@ exports[`UrlFormatEditor should render normally 1`] = ` - + diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/__snapshots__/table.test.tsx.snap b/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/__snapshots__/table.test.tsx.snap index 2062e11dfd28b..ac6ab1172a535 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/__snapshots__/table.test.tsx.snap +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/__snapshots__/table.test.tsx.snap @@ -4,13 +4,11 @@ exports[`Table render conflict summary modal 1`] = ` -

- -

+
diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/table.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/table.tsx index ab6e82b301f01..a7b6cf621bb64 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/table.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/indexed_fields_table/components/table/table.tsx @@ -297,12 +297,10 @@ export const getConflictModalContent = ({ <> -

- -

+
diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx index 241fa39e86312..df7d12fc90f2f 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -185,6 +185,16 @@ export const DiscoverTopNav = ({ ] ); + const onEditDataView = async (editedDataView: DataView) => { + if (!editedDataView.isPersisted()) { + await updateAdHocDataViewId(editedDataView); + } else { + stateContainer.actions.setDataView(editedDataView); + } + stateContainer.actions.loadDataViewList(); + stateContainer.dataState.fetch(); + }; + const updateSavedQueryId = (newSavedQueryId: string | undefined) => { const { appState, setAppState } = stateContainer; if (newSavedQueryId) { @@ -220,6 +230,7 @@ export const DiscoverTopNav = ({ textBasedLanguages: supportedTextBasedLanguages as DataViewPickerProps['textBasedLanguages'], adHocDataViews, savedDataViews, + onEditDataView, }; const onTextBasedSavedAndExit = useCallback( diff --git a/src/plugins/discover/public/components/discover_grid/discover_grid_cell_actions.test.tsx b/src/plugins/discover/public/components/discover_grid/discover_grid_cell_actions.test.tsx index 66f1264a63e17..079a26c265d27 100644 --- a/src/plugins/discover/public/components/discover_grid/discover_grid_cell_actions.test.tsx +++ b/src/plugins/discover/public/components/discover_grid/discover_grid_cell_actions.test.tsx @@ -38,7 +38,21 @@ import { DataViewField } from '@kbn/data-views-plugin/public'; describe('Discover cell actions ', function () { it('should not show cell actions for unfilterable fields', async () => { - expect(buildCellActions({ name: 'foo', filterable: false } as DataViewField)).toBeUndefined(); + expect(buildCellActions({ name: 'foo', filterable: false } as DataViewField)).toEqual([ + CopyBtn, + ]); + }); + + it('should show filter actions for filterable fields', async () => { + expect(buildCellActions({ name: 'foo', filterable: true } as DataViewField, jest.fn())).toEqual( + [FilterInBtn, FilterOutBtn, CopyBtn] + ); + }); + + it('should show Copy action for _source field', async () => { + expect( + buildCellActions({ name: '_source', type: '_source', filterable: false } as DataViewField) + ).toEqual([CopyBtn]); }); it('triggers filter function when FilterInBtn is clicked', async () => { diff --git a/src/plugins/discover/public/components/discover_grid/discover_grid_cell_actions.tsx b/src/plugins/discover/public/components/discover_grid/discover_grid_cell_actions.tsx index 5c565a97df8dc..59cd130277f90 100644 --- a/src/plugins/discover/public/components/discover_grid/discover_grid_cell_actions.tsx +++ b/src/plugins/discover/public/components/discover_grid/discover_grid_cell_actions.tsx @@ -110,19 +110,13 @@ export const CopyBtn = ({ Component, rowIndex, columnId }: EuiDataGridColumnCell title={buttonTitle} data-test-subj="copyClipboardButton" > - {i18n.translate('discover.grid.copyClipboardButton', { - defaultMessage: 'Copy to clipboard', + {i18n.translate('discover.grid.copyCellValueButton', { + defaultMessage: 'Copy value', })} ); }; export function buildCellActions(field: DataViewField, onFilter?: DocViewFilterFn) { - if (field?.type === '_source') { - return [CopyBtn]; - } else if (!onFilter || !field.filterable) { - return undefined; - } - - return [FilterInBtn, FilterOutBtn]; + return [...(onFilter && field.filterable ? [FilterInBtn, FilterOutBtn] : []), CopyBtn]; } diff --git a/src/plugins/discover/public/components/discover_grid/discover_grid_columns.test.tsx b/src/plugins/discover/public/components/discover_grid/discover_grid_columns.test.tsx index 77e7c5b2a5e17..fd7122fccbd95 100644 --- a/src/plugins/discover/public/components/discover_grid/discover_grid_columns.test.tsx +++ b/src/plugins/discover/public/components/discover_grid/discover_grid_columns.test.tsx @@ -75,6 +75,7 @@ describe('Discover grid columns', function () { "cellActions": Array [ [Function], [Function], + [Function], ], "displayAsText": "extension", "id": "extension", @@ -120,7 +121,9 @@ describe('Discover grid columns', function () { "showMoveLeft": true, "showMoveRight": true, }, - "cellActions": undefined, + "cellActions": Array [ + [Function], + ], "displayAsText": "message", "id": "message", "isSortable": false, @@ -188,6 +191,7 @@ describe('Discover grid columns', function () { "cellActions": Array [ [Function], [Function], + [Function], ], "displayAsText": "extension", "id": "extension", @@ -230,7 +234,9 @@ describe('Discover grid columns', function () { "showMoveLeft": false, "showMoveRight": false, }, - "cellActions": undefined, + "cellActions": Array [ + [Function], + ], "displayAsText": "message", "id": "message", "isSortable": false, @@ -298,6 +304,7 @@ describe('Discover grid columns', function () { "cellActions": Array [ [Function], [Function], + [Function], ], "display":
- + {closeButton} diff --git a/src/plugins/discover/public/types.ts b/src/plugins/discover/public/types.ts index 2419f15b8a429..a0fe48fcc574b 100644 --- a/src/plugins/discover/public/types.ts +++ b/src/plugins/discover/public/types.ts @@ -12,7 +12,7 @@ import { type DatatableColumn } from '@kbn/expressions-plugin/common'; export type ValueToStringConverter = ( rowIndex: number, columnId: string, - options?: { disableMultiline?: boolean } + options?: { compatibleWithCSV?: boolean } ) => { formattedString: string; withFormula: boolean }; export interface EsHitRecord extends Omit { diff --git a/src/plugins/discover/public/utils/convert_value_to_string.test.tsx b/src/plugins/discover/public/utils/convert_value_to_string.test.tsx index a6881e222dd62..dd81ad621f182 100644 --- a/src/plugins/discover/public/utils/convert_value_to_string.test.tsx +++ b/src/plugins/discover/public/utils/convert_value_to_string.test.tsx @@ -19,7 +19,7 @@ describe('convertValueToString', () => { columnId: 'keyword_key', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -34,13 +34,28 @@ describe('convertValueToString', () => { columnId: 'text_message', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); expect(result.formattedString).toBe('"Hi there! I am a sample string."'); }); + it('should convert a text value to text (not for CSV)', () => { + const result = convertValueToString({ + rows: discoverGridContextComplexMock.rows, + dataView: discoverGridContextComplexMock.dataView, + fieldFormats: discoverServiceMock.fieldFormats, + columnId: 'text_message', + rowIndex: 0, + options: { + compatibleWithCSV: false, + }, + }); + + expect(result.formattedString).toBe('Hi there! I am a sample string.'); + }); + it('should convert a multiline text value to text', () => { const result = convertValueToString({ rows: discoverGridContextComplexMock.rows, @@ -49,7 +64,7 @@ describe('convertValueToString', () => { columnId: 'text_message', rowIndex: 1, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -65,7 +80,7 @@ describe('convertValueToString', () => { columnId: 'number_price', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -80,7 +95,7 @@ describe('convertValueToString', () => { columnId: 'date', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -95,13 +110,28 @@ describe('convertValueToString', () => { columnId: 'date_nanos', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); expect(result.formattedString).toBe('"2022-01-01T12:10:30.123456789Z"'); }); + it('should convert a date nanos value to text (not for CSV)', () => { + const result = convertValueToString({ + rows: discoverGridContextComplexMock.rows, + dataView: discoverGridContextComplexMock.dataView, + fieldFormats: discoverServiceMock.fieldFormats, + columnId: 'date_nanos', + rowIndex: 0, + options: { + compatibleWithCSV: false, + }, + }); + + expect(result.formattedString).toBe('2022-01-01T12:10:30.123456789Z'); + }); + it('should convert a boolean value to text', () => { const result = convertValueToString({ rows: discoverGridContextComplexMock.rows, @@ -110,7 +140,7 @@ describe('convertValueToString', () => { columnId: 'bool_enabled', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -125,13 +155,28 @@ describe('convertValueToString', () => { columnId: 'binary_blob', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); expect(result.formattedString).toBe('"U29tZSBiaW5hcnkgYmxvYg=="'); }); + it('should convert a binary value to text (not for CSV)', () => { + const result = convertValueToString({ + rows: discoverGridContextComplexMock.rows, + dataView: discoverGridContextComplexMock.dataView, + fieldFormats: discoverServiceMock.fieldFormats, + columnId: 'binary_blob', + rowIndex: 0, + options: { + compatibleWithCSV: false, + }, + }); + + expect(result.formattedString).toBe('U29tZSBiaW5hcnkgYmxvYg=='); + }); + it('should convert an object value to text', () => { const result = convertValueToString({ rows: discoverGridContextComplexMock.rows, @@ -140,7 +185,7 @@ describe('convertValueToString', () => { columnId: 'object_user.first', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -155,7 +200,7 @@ describe('convertValueToString', () => { columnId: 'nested_user', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -172,7 +217,7 @@ describe('convertValueToString', () => { columnId: 'flattened_labels', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -187,7 +232,7 @@ describe('convertValueToString', () => { columnId: 'range_time_frame', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -204,7 +249,7 @@ describe('convertValueToString', () => { columnId: 'rank_features', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -219,7 +264,7 @@ describe('convertValueToString', () => { columnId: 'histogram', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -234,13 +279,28 @@ describe('convertValueToString', () => { columnId: 'ip_addr', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); expect(result.formattedString).toBe('"192.168.1.1"'); }); + it('should convert a IP value to text (not for CSV)', () => { + const result = convertValueToString({ + rows: discoverGridContextComplexMock.rows, + dataView: discoverGridContextComplexMock.dataView, + fieldFormats: discoverServiceMock.fieldFormats, + columnId: 'ip_addr', + rowIndex: 0, + options: { + compatibleWithCSV: false, + }, + }); + + expect(result.formattedString).toBe('192.168.1.1'); + }); + it('should convert a version value to text', () => { const result = convertValueToString({ rows: discoverGridContextComplexMock.rows, @@ -249,13 +309,28 @@ describe('convertValueToString', () => { columnId: 'version', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); expect(result.formattedString).toBe('"1.2.3"'); }); + it('should convert a version value to text (not for CSV)', () => { + const result = convertValueToString({ + rows: discoverGridContextComplexMock.rows, + dataView: discoverGridContextComplexMock.dataView, + fieldFormats: discoverServiceMock.fieldFormats, + columnId: 'version', + rowIndex: 0, + options: { + compatibleWithCSV: false, + }, + }); + + expect(result.formattedString).toBe('1.2.3'); + }); + it('should convert a vector value to text', () => { const result = convertValueToString({ rows: discoverGridContextComplexMock.rows, @@ -264,7 +339,7 @@ describe('convertValueToString', () => { columnId: 'vector', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -279,7 +354,7 @@ describe('convertValueToString', () => { columnId: 'geo_point', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -294,7 +369,7 @@ describe('convertValueToString', () => { columnId: 'geo_point', rowIndex: 1, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -309,7 +384,7 @@ describe('convertValueToString', () => { columnId: 'array_tags', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -324,7 +399,7 @@ describe('convertValueToString', () => { columnId: 'geometry', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -341,7 +416,7 @@ describe('convertValueToString', () => { columnId: 'runtime_number', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -356,13 +431,28 @@ describe('convertValueToString', () => { columnId: 'scripted_string', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); expect(result.formattedString).toBe('"hi there"'); }); + it('should convert a scripted value to text (not for CSV)', () => { + const result = convertValueToString({ + rows: discoverGridContextComplexMock.rows, + dataView: discoverGridContextComplexMock.dataView, + fieldFormats: discoverServiceMock.fieldFormats, + columnId: 'scripted_string', + rowIndex: 0, + options: { + compatibleWithCSV: false, + }, + }); + + expect(result.formattedString).toBe('hi there'); + }); + it('should return an empty string and not fail', () => { const result = convertValueToString({ rows: discoverGridContextComplexMock.rows, @@ -371,7 +461,7 @@ describe('convertValueToString', () => { columnId: 'unknown', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -386,7 +476,7 @@ describe('convertValueToString', () => { columnId: 'unknown', rowIndex: -1, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -401,7 +491,7 @@ describe('convertValueToString', () => { columnId: '_source', rowIndex: 0, options: { - disableMultiline: false, + compatibleWithCSV: false, }, }); @@ -424,7 +514,7 @@ describe('convertValueToString', () => { columnId: '_source', rowIndex: 0, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -441,7 +531,7 @@ describe('convertValueToString', () => { columnId: 'array_tags', rowIndex: 1, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -455,7 +545,7 @@ describe('convertValueToString', () => { columnId: 'scripted_string', rowIndex: 1, options: { - disableMultiline: true, + compatibleWithCSV: true, }, }); @@ -463,6 +553,22 @@ describe('convertValueToString', () => { expect(result2.withFormula).toBe(true); }); + it('should not escape formulas when not for CSV', () => { + const result = convertValueToString({ + rows: discoverGridContextComplexMock.rows, + dataView: discoverGridContextComplexMock.dataView, + fieldFormats: discoverServiceMock.fieldFormats, + columnId: 'array_tags', + rowIndex: 1, + options: { + compatibleWithCSV: false, + }, + }); + + expect(result.formattedString).toBe('=1+2\'" ;,=1+2'); + expect(result.withFormula).toBe(true); + }); + it('should return a formatted name', () => { const result = convertNameToString('test'); diff --git a/src/plugins/discover/public/utils/convert_value_to_string.ts b/src/plugins/discover/public/utils/convert_value_to_string.ts index 1e98ca2b3d9fc..f67abe8d53dc2 100644 --- a/src/plugins/discover/public/utils/convert_value_to_string.ts +++ b/src/plugins/discover/public/utils/convert_value_to_string.ts @@ -31,7 +31,7 @@ export const convertValueToString = ({ dataView: DataView; fieldFormats: FieldFormatsStart; options?: { - disableMultiline?: boolean; + compatibleWithCSV?: boolean; // values as one-liner + escaping formulas + adding wrapping quotes }; }): ConvertedResult => { if (!rows[rowIndex]) { @@ -44,7 +44,8 @@ export const convertValueToString = ({ const value = rowFlattened?.[columnId]; const field = dataView.fields.getByName(columnId); const valuesArray = Array.isArray(value) ? value : [value]; - const disableMultiline = options?.disableMultiline ?? false; + const disableMultiline = options?.compatibleWithCSV ?? false; + const enableEscapingForValue = options?.compatibleWithCSV ?? false; if (field?.type === '_source') { return { @@ -71,7 +72,7 @@ export const convertValueToString = ({ if (typeof formattedValue === 'string') { withFormula = withFormula || cellHasFormulas(formattedValue); - return escapeFormattedValue(formattedValue); + return enableEscapingForValue ? escapeFormattedValue(formattedValue) : formattedValue; } return stringify(formattedValue, disableMultiline) || ''; diff --git a/src/plugins/discover/public/utils/copy_value_to_clipboard.ts b/src/plugins/discover/public/utils/copy_value_to_clipboard.ts index bcb9bbf115357..c700fa748f335 100644 --- a/src/plugins/discover/public/utils/copy_value_to_clipboard.ts +++ b/src/plugins/discover/public/utils/copy_value_to_clipboard.ts @@ -81,7 +81,7 @@ export const copyColumnValuesToClipboard = async ({ let withFormula = nameFormattedResult.withFormula; const valuesFormatted = [...Array(rowsCount)].map((_, rowIndex) => { - const result = valueToStringConverter(rowIndex, columnId, { disableMultiline: true }); + const result = valueToStringConverter(rowIndex, columnId, { compatibleWithCSV: true }); withFormula = withFormula || result.withFormula; return result.formattedString; }); diff --git a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_modal.tsx b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_modal.tsx index 16c216248a5da..4360f74310f9f 100644 --- a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_modal.tsx +++ b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_modal.tsx @@ -79,8 +79,12 @@ export class CustomizePanelModal extends Component { }} > - -

Customize panel

+ + Customize panel
diff --git a/src/plugins/ftr_apis/server/routes/kbn_client_so/clean.ts b/src/plugins/ftr_apis/server/routes/kbn_client_so/clean.ts new file mode 100644 index 0000000000000..e6b485526bad8 --- /dev/null +++ b/src/plugins/ftr_apis/server/routes/kbn_client_so/clean.ts @@ -0,0 +1,48 @@ +/* + * 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 { IRouter } from '@kbn/core/server'; +import { schema } from '@kbn/config-schema'; +import { KBN_CLIENT_API_PREFIX, listHiddenTypes, catchAndReturnBoomErrors } from './utils'; + +export const registerCleanRoute = (router: IRouter) => { + router.post( + { + path: `${KBN_CLIENT_API_PREFIX}/_clean`, + options: { + tags: ['access:ftrApis'], + }, + validate: { + body: schema.object({ + types: schema.arrayOf(schema.string()), + }), + }, + }, + catchAndReturnBoomErrors(async (ctx, req, res) => { + const { types } = req.body; + const { savedObjects } = await ctx.core; + const hiddenTypes = listHiddenTypes(savedObjects.typeRegistry); + const soClient = savedObjects.getClient({ includedHiddenTypes: hiddenTypes }); + + const finder = soClient.createPointInTimeFinder({ type: types, perPage: 100 }); + let deleted = 0; + + for await (const response of finder.find()) { + const objects = response.saved_objects.map(({ type, id }) => ({ type, id })); + const { statuses } = await soClient.bulkDelete(objects, { force: true }); + deleted += statuses.filter((status) => status.success).length; + } + + return res.ok({ + body: { + deleted, + }, + }); + }) + ); +}; diff --git a/src/plugins/ftr_apis/server/routes/kbn_client_so/index.ts b/src/plugins/ftr_apis/server/routes/kbn_client_so/index.ts index b22f234d8455b..33975dbaa4551 100644 --- a/src/plugins/ftr_apis/server/routes/kbn_client_so/index.ts +++ b/src/plugins/ftr_apis/server/routes/kbn_client_so/index.ts @@ -13,6 +13,7 @@ import { registerDeleteRoute } from './delete'; import { registerFindRoute } from './find'; import { registerGetRoute } from './get'; import { registerUpdateRoute } from './update'; +import { registerCleanRoute } from './clean'; export const registerKbnClientSoRoutes = (router: IRouter) => { registerBulkDeleteRoute(router); @@ -21,4 +22,5 @@ export const registerKbnClientSoRoutes = (router: IRouter) => { registerFindRoute(router); registerGetRoute(router); registerUpdateRoute(router); + registerCleanRoute(router); }; diff --git a/src/plugins/guided_onboarding/README.md b/src/plugins/guided_onboarding/README.md index 1b7e7465a53d8..8f9a428beb1fd 100755 --- a/src/plugins/guided_onboarding/README.md +++ b/src/plugins/guided_onboarding/README.md @@ -7,6 +7,27 @@ The guided onboarding plugin includes a client-side code for the UI and the serv The client-side code registers a button in the Kibana header that controls the guided onboarding panel (checklist) depending on the current state. There is also an API service exposed from the client-side start contract. The API service is intended for external use by other plugins. --- +## Current functionality + +The solution plugins register their config that specifies the title, the description and the steps of a guide. The config is fetched via an http request to a guided onboarding endpoint. This endpoint should only be used internally by the guided onboarding API service. The configs are basically just `js` objects that are loaded into the Kibana server memory on startup. Because configs are not expected to be changed by the user, we don’t need to use saved objects. + +The UI uses the guide config to display the guide: its title, description and steps. Each step has a title, a description and a url where the user will be redirected when they start this step. When a step is completed, the dropdown panel will automatically open and display the next step. When a guide is completed, the panel will automatically open and display a completion message with a button that (optionally) redirects the user to a specific solution page. + +A step is completed on the solution page code by calling a function in the guided onboarding API service when the user performs an expected action. A step can also be set to “manual completion” which means the dropdown will not automatically open and the user will only see a popover on the header button on step completion. That way, the UI allows the user to stay a little longer on the page after completing the expected action and explore. + +The plugin’s state keeps track of which guide has been started and its current progress. The state also includes the information if the user has started any guide, has completed any guide or if they skipped the guided onboarding, or if they quit the guide before completion. We also store the date when the user first looked at the landing page and if they haven't started any guide, the header button is displayed for the first 30 days. When clicked, the button redirects the user back to the landing page to start a guide. + +## Architecture description +The guided onboarding is currently implemented in a separate `guided_onboarding` plugin that contains the code for the header button ([link](https://github.com/elastic/kibana/blob/main/src/plugins/guided_onboarding/public/components/guide_button.tsx)), the dropdown panel ([link](https://github.com/elastic/kibana/blob/main/src/plugins/guided_onboarding/public/components/guide_panel.tsx)) and the API service ([link](https://github.com/elastic/kibana/blob/main/src/plugins/guided_onboarding/public/services/api.service.ts)) exposed out of the client side that can be used by other plugins to get/update the state of the guided onboarding. + +For example, when a user goes through the SIEM guide they are first taken to the integrations page where they follow some EUI tour steps and install the Elastic Agent and the Elastic Defend integration. The code on the integrations page uses the guided onboarding API service to check if a guide for the Elastic Defend integration is currently in progress. If yes, the page will display the EUI tour steps to guide the user. The page will also use the API service to update the guided onboarding state to the next step when the user completes the installation. + +There is also a server side in the guided onboarding plugin that creates several endpoints for plugin only internal use. The endpoints are for fetching the guide configs, the state of the guided onboarding and to update the state. +The server side also exposes a function ([link](https://github.com/elastic/kibana/blob/main/src/plugins/guided_onboarding/server/plugin.ts#L40)) that is used by consumers to register their guide configs. That way the config files are a part of the consumers code and the guided onboarding is only used as a framework. + +Another part of the guided onboarding code is in the home plugin where the code for the landing page ([link](https://github.com/elastic/kibana/tree/main/src/plugins/home/public/application/components/guided_onboarding)) is situated. The landing page can be found under `/app/home#/getting_started` and there is some logic ([link](https://github.com/elastic/kibana/blob/main/src/plugins/home/public/application/components/home.tsx#L200)) that redirects the user to the landing page when the deployment is new (i.e. there is no data in the deployment). Some of the static components for the landing page were extracted to the `kbn-guided-onboarding` package ([link](https://github.com/elastic/kibana/tree/main/packages/kbn-guided-onboarding)). + +When starting Kibana with `yarn start --run-examples` the `guided_onboarding_example` plugin ([link](https://github.com/elastic/kibana/tree/main/examples/guided_onboarding_example)) can be found under `/app/guidedOnboardingExample`. This page displays the current state of the guided onboarding and allows setting the state to any point in the guide. Otherwise, it can be difficult and time consuming to reach a specific step in a production guide during dev work. The example plugin also registers a config for a test guide that can be completed on the pages of the example plugin. The test guide is also used for unit and functional tests of the guided onboarding plugin. ## Development diff --git a/src/plugins/guided_onboarding/assets/well_done_animated.gif b/src/plugins/guided_onboarding/assets/well_done_animated.gif new file mode 100644 index 0000000000000..5af6564cd170a Binary files /dev/null and b/src/plugins/guided_onboarding/assets/well_done_animated.gif differ diff --git a/src/plugins/guided_onboarding/assets/well_done_animated_dark.gif b/src/plugins/guided_onboarding/assets/well_done_animated_dark.gif new file mode 100644 index 0000000000000..533d8515400c9 Binary files /dev/null and b/src/plugins/guided_onboarding/assets/well_done_animated_dark.gif differ diff --git a/src/plugins/guided_onboarding/public/components/guide_panel.styles.ts b/src/plugins/guided_onboarding/public/components/guide_panel.styles.ts index 3636626ac1f38..121bafb23e8ee 100644 --- a/src/plugins/guided_onboarding/public/components/guide_panel.styles.ts +++ b/src/plugins/guided_onboarding/public/components/guide_panel.styles.ts @@ -30,6 +30,9 @@ export const getGuidePanelStyles = ({ setupButton: css` margin-right: ${euiTheme.size.m}; `, + wellDoneAnimatedPrompt: css` + text-align: left; + `, flyoutOverrides: { flyoutHeader: css` background: url(${isDarkTheme ? panelBgTopDark : panelBgTop}) top right no-repeat; diff --git a/src/plugins/guided_onboarding/public/components/guide_panel.tsx b/src/plugins/guided_onboarding/public/components/guide_panel.tsx index c04ba2e9e35be..e450eaedd85cd 100644 --- a/src/plugins/guided_onboarding/public/components/guide_panel.tsx +++ b/src/plugins/guided_onboarding/public/components/guide_panel.tsx @@ -25,6 +25,7 @@ import { EuiFlexItem, useEuiTheme, EuiEmptyPrompt, + EuiImage, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -42,6 +43,9 @@ import { QuitGuideModal } from './quit_guide_modal'; import { getGuidePanelStyles } from './guide_panel.styles'; import { GuideButton } from './guide_button'; +import wellDoneAnimatedGif from '../../assets/well_done_animated.gif'; +import wellDoneAnimatedDarkGif from '../../assets/well_done_animated_dark.gif'; + interface GuidePanelProps { api: GuidedOnboardingApi; application: ApplicationStart; @@ -220,6 +224,9 @@ export const GuidePanel = ({ api, application, notifications, uiSettings }: Guid const stepsCompleted = getProgress(pluginState?.activeGuide); const isGuideReadyToComplete = pluginState?.activeGuide?.status === 'ready_to_complete'; + const getImageUrl = () => { + return isDarkTheme ? wellDoneAnimatedDarkGif : wellDoneAnimatedGif; + }; const backToGuidesButton = (
+ {isGuideReadyToComplete && ( + <> + + + + + )} +

{isGuideReadyToComplete ? i18n.translate( 'guidedOnboarding.dropdownPanel.completeGuideFlyoutDescription', { - defaultMessage: `You've completed the Elastic {guideName} guide.`, + defaultMessage: `You've completed the Elastic {guideName} guide. Feel free to come back to the Guides for more onboarding help or a refresher.`, values: { guideName: guideConfig.guideName, }, @@ -295,7 +316,7 @@ export const GuidePanel = ({ api, application, notifications, uiSettings }: Guid {guideConfig.docs && ( <> - + {guideConfig.docs.text} diff --git a/src/plugins/kibana_react/public/markdown/markdown.test.tsx b/src/plugins/kibana_react/public/markdown/markdown.test.tsx index c1329540596fe..1657fa5e3ba58 100644 --- a/src/plugins/kibana_react/public/markdown/markdown.test.tsx +++ b/src/plugins/kibana_react/public/markdown/markdown.test.tsx @@ -32,7 +32,7 @@ test('should render links with parentheses correctly', () => { ); }); -test('should add `noreferrer` and `nooopener` to unknown links in new tabs', () => { +test('should add `noreferrer` and `nooopener` to all links in new tabs', () => { const component = shallow( { - const component = shallow( - - ); - expect(component.render().find('a').prop('rel')).toBe('noopener'); -}); - describe('props', () => { const markdown = 'I am *some* [content](https://en.wikipedia.org/wiki/Content) with `markdown`'; diff --git a/src/plugins/saved_objects/public/save_modal/__snapshots__/saved_object_save_modal.test.tsx.snap b/src/plugins/saved_objects/public/save_modal/__snapshots__/saved_object_save_modal.test.tsx.snap index 1c4864ab139e5..0f2367910cefd 100644 --- a/src/plugins/saved_objects/public/save_modal/__snapshots__/saved_object_save_modal.test.tsx.snap +++ b/src/plugins/saved_objects/public/save_modal/__snapshots__/saved_object_save_modal.test.tsx.snap @@ -8,17 +8,15 @@ exports[`SavedObjectSaveModal should render matching snapshot 1`] = ` > -

- -

+ } + /> @@ -109,17 +107,15 @@ exports[`SavedObjectSaveModal should render matching snapshot when custom isVali > -

- -

+ } + />
@@ -210,17 +206,15 @@ exports[`SavedObjectSaveModal should render matching snapshot when custom isVali > -

- -

+ } + />
@@ -311,17 +305,15 @@ exports[`SavedObjectSaveModal should render matching snapshot when given options > -

- -

+ } + />
diff --git a/src/plugins/saved_objects/public/save_modal/saved_object_save_modal.tsx b/src/plugins/saved_objects/public/save_modal/saved_object_save_modal.tsx index d4fc8faa126c2..68dc426d234d4 100644 --- a/src/plugins/saved_objects/public/save_modal/saved_object_save_modal.tsx +++ b/src/plugins/saved_objects/public/save_modal/saved_object_save_modal.tsx @@ -135,13 +135,11 @@ export class SavedObjectSaveModal extends React.Component > -

- -

+
diff --git a/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap index 3ea072d0499c4..0155059029f4e 100644 --- a/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap @@ -27,7 +27,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern type 1`] = aria-label="Saved objects APIs" class="euiLink emotion-euiLink-primary" href="https://www.elastic.co/guide/en/kibana/mocked-test-branch/saved-objects-api.html#saved-objects-api" - rel="noopener" + rel="noopener noreferrer" target="_blank" > Saved objects APIs @@ -76,7 +76,7 @@ exports[`NotFoundErrors component renders correctly for index-pattern-field type aria-label="Saved objects APIs" class="euiLink emotion-euiLink-primary" href="https://www.elastic.co/guide/en/kibana/mocked-test-branch/saved-objects-api.html#saved-objects-api" - rel="noopener" + rel="noopener noreferrer" target="_blank" > Saved objects APIs @@ -125,7 +125,7 @@ exports[`NotFoundErrors component renders correctly for search type 1`] = ` aria-label="Saved objects APIs" class="euiLink emotion-euiLink-primary" href="https://www.elastic.co/guide/en/kibana/mocked-test-branch/saved-objects-api.html#saved-objects-api" - rel="noopener" + rel="noopener noreferrer" target="_blank" > Saved objects APIs @@ -172,7 +172,7 @@ exports[`NotFoundErrors component renders correctly for unknown type 1`] = ` aria-label="Saved objects APIs" class="euiLink emotion-euiLink-primary" href="https://www.elastic.co/guide/en/kibana/mocked-test-branch/saved-objects-api.html#saved-objects-api" - rel="noopener" + rel="noopener noreferrer" target="_blank" > Saved objects APIs diff --git a/src/plugins/unified_field_list/public/utils/field_types/field_types.ts b/src/plugins/unified_field_list/public/utils/field_types/field_types.ts index 612c3b43c4baa..0851d6dc1e412 100644 --- a/src/plugins/unified_field_list/public/utils/field_types/field_types.ts +++ b/src/plugins/unified_field_list/public/utils/field_types/field_types.ts @@ -14,21 +14,28 @@ import { FieldTypeKnown } from '../../types'; */ export enum KNOWN_FIELD_TYPES { DOCUMENT = 'document', // "Records" on Lens page + BINARY = 'binary', BOOLEAN = 'boolean', CONFLICT = 'conflict', COUNTER = 'counter', DATE = 'date', DATE_RANGE = 'date_range', + DENSE_VECTOR = 'dense_vector', GAUGE = 'gauge', GEO_POINT = 'geo_point', GEO_SHAPE = 'geo_shape', HISTOGRAM = 'histogram', IP = 'ip', IP_RANGE = 'ip_range', + FLATTENED = 'flattened', KEYWORD = 'keyword', MURMUR3 = 'murmur3', NUMBER = 'number', NESTED = 'nested', + RANK_FEATURE = 'rank_feature', + RANK_FEATURES = 'rank_features', + POINT = 'point', + SHAPE = 'shape', STRING = 'string', TEXT = 'text', VERSION = 'version', diff --git a/src/plugins/unified_field_list/public/utils/field_types/get_field_icon_type.ts b/src/plugins/unified_field_list/public/utils/field_types/get_field_icon_type.ts index e548d4bf1744b..13ba84121085f 100644 --- a/src/plugins/unified_field_list/public/utils/field_types/get_field_icon_type.ts +++ b/src/plugins/unified_field_list/public/utils/field_types/get_field_icon_type.ts @@ -9,6 +9,7 @@ import { type DataViewField } from '@kbn/data-views-plugin/common'; import type { FieldListItem, GetCustomFieldType } from '../../types'; import { getFieldType } from './get_field_type'; +import { isKnownFieldType } from './field_types'; /** * Returns an icon type for a field @@ -25,5 +26,8 @@ export function getFieldIconType( if (esType && ['_id', '_index'].includes(esType) && type === 'string') { return 'keyword'; } + if (type === 'unknown' && esType && isKnownFieldType(esType)) { + return esType; + } return type === 'string' && esType ? esType : type; } diff --git a/src/plugins/unified_field_list/public/utils/field_types/get_field_type_description.ts b/src/plugins/unified_field_list/public/utils/field_types/get_field_type_description.ts index 8b7ab22b93ad5..cadb07e59eeb4 100644 --- a/src/plugins/unified_field_list/public/utils/field_types/get_field_type_description.ts +++ b/src/plugins/unified_field_list/public/utils/field_types/get_field_type_description.ts @@ -36,6 +36,10 @@ export function getFieldTypeDescription(type?: string) { return i18n.translate('unifiedFieldList.fieldNameDescription.recordField', { defaultMessage: 'Count of records.', }); + case KNOWN_FIELD_TYPES.BINARY: + return i18n.translate('unifiedFieldList.fieldNameDescription.binaryField', { + defaultMessage: 'Binary value encoded as a Base64 string.', + }); case KNOWN_FIELD_TYPES.BOOLEAN: return i18n.translate('unifiedFieldList.fieldNameDescription.booleanField', { defaultMessage: 'True and false values.', @@ -57,6 +61,10 @@ export function getFieldTypeDescription(type?: string) { return i18n.translate('unifiedFieldList.fieldNameDescription.dateRangeField', { defaultMessage: 'Range of date values.', }); + case KNOWN_FIELD_TYPES.DENSE_VECTOR: + return i18n.translate('unifiedFieldList.fieldNameDescription.denseVectorField', { + defaultMessage: 'Records dense vectors of float values.', + }); case KNOWN_FIELD_TYPES.GAUGE: return i18n.translate('unifiedFieldList.fieldNameDescription.gaugeField', { defaultMessage: @@ -82,6 +90,10 @@ export function getFieldTypeDescription(type?: string) { return i18n.translate('unifiedFieldList.fieldNameDescription.ipAddressRangeField', { defaultMessage: 'Range of ip values supporting either IPv4 or IPv6 (or mixed) addresses.', }); + case KNOWN_FIELD_TYPES.FLATTENED: + return i18n.translate('unifiedFieldList.fieldNameDescription.flattenedField', { + defaultMessage: 'An entire JSON object as a single field value.', + }); case KNOWN_FIELD_TYPES.MURMUR3: return i18n.translate('unifiedFieldList.fieldNameDescription.murmur3Field', { defaultMessage: 'Field that computes and stores hashes of values.', @@ -90,6 +102,22 @@ export function getFieldTypeDescription(type?: string) { return i18n.translate('unifiedFieldList.fieldNameDescription.numberField', { defaultMessage: 'Long, integer, short, byte, double, and float values.', }); + case KNOWN_FIELD_TYPES.RANK_FEATURE: + return i18n.translate('unifiedFieldList.fieldNameDescription.rankFeatureField', { + defaultMessage: 'Records a numeric feature to boost hits at query time.', + }); + case KNOWN_FIELD_TYPES.RANK_FEATURES: + return i18n.translate('unifiedFieldList.fieldNameDescription.rankFeaturesField', { + defaultMessage: 'Records numeric features to boost hits at query time.', + }); + case KNOWN_FIELD_TYPES.POINT: + return i18n.translate('unifiedFieldList.fieldNameDescription.pointField', { + defaultMessage: 'Arbitrary cartesian points.', + }); + case KNOWN_FIELD_TYPES.SHAPE: + return i18n.translate('unifiedFieldList.fieldNameDescription.shapeField', { + defaultMessage: 'Arbitrary cartesian geometries.', + }); case KNOWN_FIELD_TYPES.STRING: return i18n.translate('unifiedFieldList.fieldNameDescription.stringField', { defaultMessage: 'Full text such as the body of an email or a product description.', diff --git a/src/plugins/unified_field_list/public/utils/field_types/get_field_type_name.ts b/src/plugins/unified_field_list/public/utils/field_types/get_field_type_name.ts index 3b93b9847dfdd..3da6905a9bdaa 100644 --- a/src/plugins/unified_field_list/public/utils/field_types/get_field_type_name.ts +++ b/src/plugins/unified_field_list/public/utils/field_types/get_field_type_name.ts @@ -41,7 +41,11 @@ export function getFieldTypeName(type?: string) { switch (knownType) { case KNOWN_FIELD_TYPES.DOCUMENT: return i18n.translate('unifiedFieldList.fieldNameIcons.recordAriaLabel', { - defaultMessage: 'Records', // TODO: check if we need to rename it + defaultMessage: 'Records', + }); + case KNOWN_FIELD_TYPES.BINARY: + return i18n.translate('unifiedFieldList.fieldNameIcons.binaryAriaLabel', { + defaultMessage: 'Binary', }); case KNOWN_FIELD_TYPES.BOOLEAN: return i18n.translate('unifiedFieldList.fieldNameIcons.booleanAriaLabel', { @@ -63,6 +67,10 @@ export function getFieldTypeName(type?: string) { return i18n.translate('unifiedFieldList.fieldNameIcons.dateRangeFieldAriaLabel', { defaultMessage: 'Date range', }); + case KNOWN_FIELD_TYPES.DENSE_VECTOR: + return i18n.translate('unifiedFieldList.fieldNameIcons.denseVectorFieldAriaLabel', { + defaultMessage: 'Dense vector', + }); case KNOWN_FIELD_TYPES.GAUGE: return i18n.translate('unifiedFieldList.fieldNameIcons.gaugeFieldAriaLabel', { defaultMessage: 'Gauge metric', @@ -87,6 +95,10 @@ export function getFieldTypeName(type?: string) { return i18n.translate('unifiedFieldList.fieldNameIcons.ipRangeFieldAriaLabel', { defaultMessage: 'IP range', }); + case KNOWN_FIELD_TYPES.FLATTENED: + return i18n.translate('unifiedFieldList.fieldNameIcons.flattenedFieldAriaLabel', { + defaultMessage: 'Flattened', + }); case KNOWN_FIELD_TYPES.MURMUR3: return i18n.translate('unifiedFieldList.fieldNameIcons.murmur3FieldAriaLabel', { defaultMessage: 'Murmur3', @@ -95,6 +107,22 @@ export function getFieldTypeName(type?: string) { return i18n.translate('unifiedFieldList.fieldNameIcons.numberFieldAriaLabel', { defaultMessage: 'Number', }); + case KNOWN_FIELD_TYPES.RANK_FEATURE: + return i18n.translate('unifiedFieldList.fieldNameIcons.rankFeatureFieldAriaLabel', { + defaultMessage: 'Rank feature', + }); + case KNOWN_FIELD_TYPES.RANK_FEATURES: + return i18n.translate('unifiedFieldList.fieldNameIcons.rankFeaturesFieldAriaLabel', { + defaultMessage: 'Rank features', + }); + case KNOWN_FIELD_TYPES.POINT: + return i18n.translate('unifiedFieldList.fieldNameIcons.pointFieldAriaLabel', { + defaultMessage: 'Point', + }); + case KNOWN_FIELD_TYPES.SHAPE: + return i18n.translate('unifiedFieldList.fieldNameIcons.shapeFieldAriaLabel', { + defaultMessage: 'Shape', + }); case KNOWN_FIELD_TYPES.STRING: return i18n.translate('unifiedFieldList.fieldNameIcons.stringFieldAriaLabel', { defaultMessage: 'String', diff --git a/src/plugins/unified_search/public/apply_filters/apply_filter_popover_content.tsx b/src/plugins/unified_search/public/apply_filters/apply_filter_popover_content.tsx index cb61703fed5ac..492db78fbabc7 100644 --- a/src/plugins/unified_search/public/apply_filters/apply_filter_popover_content.tsx +++ b/src/plugins/unified_search/public/apply_filters/apply_filter_popover_content.tsx @@ -87,12 +87,10 @@ export default class ApplyFiltersPopoverContent extends Component -

- -

+
diff --git a/src/plugins/unified_search/public/dataview_picker/text_languages_transition_modal.tsx b/src/plugins/unified_search/public/dataview_picker/text_languages_transition_modal.tsx index f7e8b11671556..f7eb0c4a74a22 100644 --- a/src/plugins/unified_search/public/dataview_picker/text_languages_transition_modal.tsx +++ b/src/plugins/unified_search/public/dataview_picker/text_languages_transition_modal.tsx @@ -41,14 +41,12 @@ export default function TextBasedLanguagesTransitionModal({ setIsTextLangTransitionModalVisible(false)} style={{ width: 700 }}> -

- {i18n.translate( - 'unifiedSearch.query.queryBar.indexPattern.textBasedLanguagesTransitionModalTitle', - { - defaultMessage: 'Your query will be removed', - } - )} -

+ {i18n.translate( + 'unifiedSearch.query.queryBar.indexPattern.textBasedLanguagesTransitionModalTitle', + { + defaultMessage: 'Your query will be removed', + } + )}
diff --git a/src/plugins/visualizations/public/wizard/agg_based_selection/agg_based_selection.tsx b/src/plugins/visualizations/public/wizard/agg_based_selection/agg_based_selection.tsx index 8ee63361321ef..d4d2c1505bf8a 100644 --- a/src/plugins/visualizations/public/wizard/agg_based_selection/agg_based_selection.tsx +++ b/src/plugins/visualizations/public/wizard/agg_based_selection/agg_based_selection.tsx @@ -57,12 +57,10 @@ class AggBasedSelection extends React.Component -

- -

+
diff --git a/src/plugins/visualizations/public/wizard/group_selection/group_selection.tsx b/src/plugins/visualizations/public/wizard/group_selection/group_selection.tsx index 908c1a621ebc8..6bc982a824de1 100644 --- a/src/plugins/visualizations/public/wizard/group_selection/group_selection.tsx +++ b/src/plugins/visualizations/public/wizard/group_selection/group_selection.tsx @@ -67,12 +67,10 @@ function GroupSelection(props: GroupSelectionProps) { <> -

- -

+
diff --git a/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx b/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx index 89814c0a474a1..5771747794273 100644 --- a/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx +++ b/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx @@ -33,18 +33,16 @@ export class SearchSelection extends React.Component { -

- {' '} - /{' '} - -

+ {' '} + /{' '} +
diff --git a/test/accessibility/apps/discover.ts b/test/accessibility/apps/discover.ts index ef389d1b622fc..b2fa7946817e8 100644 --- a/test/accessibility/apps/discover.ts +++ b/test/accessibility/apps/discover.ts @@ -20,8 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const retry = getService('retry'); - // Failing: See https://github.com/elastic/kibana/issues/147186 - describe.skip('Discover a11y tests', () => { + describe('Discover a11y tests', () => { before(async () => { await PageObjects.common.navigateToApp('discover'); await PageObjects.timePicker.setCommonlyUsedTime('Last_7 days'); @@ -139,6 +138,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await retry.try(async () => { await testSubjects.click('euiFlyoutCloseButton'); + }); + + await retry.try(async () => { await toasts.dismissAllToasts(); }); diff --git a/test/functional/apps/discover/group2/_data_view_edit.ts b/test/functional/apps/discover/group2/_data_view_edit.ts new file mode 100644 index 0000000000000..8e83546ff9e37 --- /dev/null +++ b/test/functional/apps/discover/group2/_data_view_edit.ts @@ -0,0 +1,89 @@ +/* + * 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 expect from '@kbn/expect'; +import { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const security = getService('security'); + const es = getService('es'); + const retry = getService('retry'); + const PageObjects = getPageObjects([ + 'common', + 'unifiedSearch', + 'discover', + 'timePicker', + 'dashboard', + ]); + + describe('data view flyout', function () { + before(async () => { + await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + + await PageObjects.timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await PageObjects.common.navigateToApp('discover'); + await PageObjects.timePicker.setCommonlyUsedTime('This_week'); + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await esArchiver.unload('x-pack/test/functional/es_archives/logstash_functional'); + await es.transport.request({ + path: '/my-index-000001', + method: 'DELETE', + }); + await es.transport.request({ + path: '/my-index-000002', + method: 'DELETE', + }); + }); + + it('create data view', async function () { + const initialPattern = 'my-index-'; + await es.transport.request({ + path: '/my-index-000001/_doc', + method: 'POST', + body: { + '@timestamp': new Date().toISOString(), + a: 'GET /search HTTP/1.1 200 1070000', + }, + }); + + await es.transport.request({ + path: '/my-index-000002/_doc', + method: 'POST', + body: { + '@timestamp': new Date().toISOString(), + b: 'GET /search HTTP/1.1 200 1070000', + }, + }); + + await PageObjects.discover.createAdHocDataView(initialPattern, true); + expect(await PageObjects.discover.getCurrentlySelectedDataView()).to.be(`${initialPattern}*`); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + + expect(await PageObjects.discover.getHitCountInt()).to.be(2); + expect((await PageObjects.discover.getAllFieldNames()).length).to.be(3); + }); + + it('update data view', async function () { + const updatedPattern = 'my-index-000001'; + await PageObjects.discover.clickIndexPatternActions(); + await PageObjects.unifiedSearch.editDataView(updatedPattern); + + await retry.try(async () => { + expect(await PageObjects.discover.getHitCountInt()).to.be(1); + }); + expect((await PageObjects.discover.getAllFieldNames()).length).to.be(2); + }); + }); +} diff --git a/test/functional/apps/discover/group2/index.ts b/test/functional/apps/discover/group2/index.ts index a7486b5619af6..76e07fb6e6395 100644 --- a/test/functional/apps/discover/group2/index.ts +++ b/test/functional/apps/discover/group2/index.ts @@ -40,5 +40,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./_chart_hidden')); loadTestFile(require.resolve('./_context_encoded_url_params')); loadTestFile(require.resolve('./_hide_announcements')); + loadTestFile(require.resolve('./_data_view_edit')); }); } diff --git a/test/functional/page_objects/unified_search_page.ts b/test/functional/page_objects/unified_search_page.ts index 64f1aa666c738..deea5d105f5f5 100644 --- a/test/functional/page_objects/unified_search_page.ts +++ b/test/functional/page_objects/unified_search_page.ts @@ -60,9 +60,24 @@ export class UnifiedSearchPageObject extends FtrService { await (await this.find.byClassName('indexPatternEditor__form')).click(); } - public async createNewDataView(dataViewName: string, adHoc = false, hasTimeField = false) { + public async clickEditDataView() { + await this.retry.waitForWithTimeout('data create new to be visible', 15000, async () => { + return await this.testSubjects.isDisplayed('indexPattern-manage-field'); + }); + await this.testSubjects.click('indexPattern-manage-field'); + await this.retry.waitForWithTimeout( + 'index pattern editor form to be visible', + 15000, + async () => { + return await (await this.find.byClassName('indexPatternEditor__form')).isDisplayed(); + } + ); + await (await this.find.byClassName('indexPatternEditor__form')).click(); + } + + public async createNewDataView(dataViewPattern: string, adHoc = false, hasTimeField = false) { await this.clickCreateNewDataView(); - await this.testSubjects.setValue('createIndexPatternTitleInput', dataViewName, { + await this.testSubjects.setValue('createIndexPatternTitleInput', dataViewPattern, { clearWithKeyboard: true, typeCharByChar: true, }); @@ -75,6 +90,15 @@ export class UnifiedSearchPageObject extends FtrService { await this.testSubjects.click(adHoc ? 'exploreIndexPatternButton' : 'saveIndexPatternButton'); } + public async editDataView(newPattern: string) { + await this.clickCreateNewDataView(); + await this.testSubjects.setValue('createIndexPatternTitleInput', newPattern, { + clearWithKeyboard: true, + typeCharByChar: true, + }); + await this.testSubjects.click('saveIndexPatternButton'); + } + public async isAdHocDataView() { const dataViewSwitcher = await this.testSubjects.find('discover-dataView-switch-link'); const dataViewName = await dataViewSwitcher.getVisibleText(); diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index a13d19e5246eb..3a15129dcd2d6 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -164,7 +164,6 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.apm.serviceMapEnabled (boolean)', 'xpack.apm.ui.enabled (boolean)', 'xpack.apm.ui.maxTraceItems (number)', - 'xpack.apm.ui.transactionGroupBucketSize (number)', 'xpack.cases.markdownPlugins.lens (boolean)', 'xpack.ccr.ui.enabled (boolean)', 'xpack.cloud.base_url (string)', diff --git a/tsconfig.base.json b/tsconfig.base.json index fd9ea4a507cc5..526af85558a9e 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -140,6 +140,8 @@ "@kbn/console-plugin/*": ["src/plugins/console/*"], "@kbn/content-management-content-editor": ["packages/content-management/content_editor"], "@kbn/content-management-content-editor/*": ["packages/content-management/content_editor/*"], + "@kbn/content-management-plugin": ["src/plugins/content_management"], + "@kbn/content-management-plugin/*": ["src/plugins/content_management/*"], "@kbn/content-management-table-list": ["packages/content-management/table_list"], "@kbn/content-management-table-list/*": ["packages/content-management/table_list/*"], "@kbn/controls-example-plugin": ["examples/controls_example"], diff --git a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts index 5f634b168763a..b8efe43c7075b 100644 --- a/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts +++ b/x-pack/plugins/alerting/server/authorization/alerting_authorization.ts @@ -71,6 +71,7 @@ interface HasPrivileges { type AuthorizedConsumers = Record; export interface RegistryAlertTypeWithAuth extends RegistryRuleType { authorizedConsumers: AuthorizedConsumers; + hasGetSummarizedAlerts?: boolean; } type IsAuthorizedAtProducerLevel = boolean; diff --git a/x-pack/plugins/alerting/server/routes/rule_types.test.ts b/x-pack/plugins/alerting/server/routes/rule_types.test.ts index 4eb4d1f713d5e..85d85d59ca05d 100644 --- a/x-pack/plugins/alerting/server/routes/rule_types.test.ts +++ b/x-pack/plugins/alerting/server/routes/rule_types.test.ts @@ -60,6 +60,7 @@ describe('ruleTypesRoute', () => { enabledInLicense: true, defaultScheduleInterval: '10m', doesSetRecoveryContext: false, + hasGetSummarizedAlerts: true, } as RegistryAlertTypeWithAuth, ]; const expectedResult: Array> = [ @@ -86,6 +87,7 @@ describe('ruleTypesRoute', () => { }, producer: 'test', enabled_in_license: true, + has_get_summarized_alerts: true, }, ]; rulesClient.listAlertTypes.mockResolvedValueOnce(new Set(listTypes)); @@ -111,6 +113,7 @@ describe('ruleTypesRoute', () => { "default_schedule_interval": "10m", "does_set_recovery_context": false, "enabled_in_license": true, + "has_get_summarized_alerts": true, "id": "1", "is_exportable": true, "minimum_license_required": "basic", diff --git a/x-pack/plugins/alerting/server/routes/rule_types.ts b/x-pack/plugins/alerting/server/routes/rule_types.ts index 5d6c9e9a3f0f4..b3f1cab18ce43 100644 --- a/x-pack/plugins/alerting/server/routes/rule_types.ts +++ b/x-pack/plugins/alerting/server/routes/rule_types.ts @@ -25,6 +25,7 @@ const rewriteBodyRes: RewriteResponseCase = (result authorizedConsumers, defaultScheduleInterval, doesSetRecoveryContext, + hasGetSummarizedAlerts, ...rest }) => ({ ...rest, @@ -39,6 +40,7 @@ const rewriteBodyRes: RewriteResponseCase = (result authorized_consumers: authorizedConsumers, default_schedule_interval: defaultScheduleInterval, does_set_recovery_context: doesSetRecoveryContext, + has_get_summarized_alerts: !!hasGetSummarizedAlerts, }) ); }; diff --git a/x-pack/plugins/alerting/server/rule_type_registry.test.ts b/x-pack/plugins/alerting/server/rule_type_registry.test.ts index bb15ef287e408..7ce33e2649d71 100644 --- a/x-pack/plugins/alerting/server/rule_type_registry.test.ts +++ b/x-pack/plugins/alerting/server/rule_type_registry.test.ts @@ -287,17 +287,17 @@ describe('Create Lifecycle', () => { const registry = new RuleTypeRegistry(ruleTypeRegistryParams); registry.register(ruleType); expect(registry.get('test').actionGroups).toMatchInlineSnapshot(` - Array [ - Object { - "id": "default", - "name": "Default", - }, - Object { - "id": "backToAwesome", - "name": "Back To Awesome", - }, - ] - `); + Array [ + Object { + "id": "default", + "name": "Default", + }, + Object { + "id": "backToAwesome", + "name": "Back To Awesome", + }, + ] + `); }); test('allows an RuleType to specify a custom rule task timeout', () => { @@ -384,16 +384,16 @@ describe('Create Lifecycle', () => { registry.register(ruleType); expect(taskManager.registerTaskDefinitions).toHaveBeenCalledTimes(1); expect(taskManager.registerTaskDefinitions.mock.calls[0]).toMatchInlineSnapshot(` - Array [ - Object { - "alerting:test": Object { - "createTaskRunner": [Function], - "timeout": "20m", - "title": "Test", - }, - }, - ] - `); + Array [ + Object { + "alerting:test": Object { + "createTaskRunner": [Function], + "timeout": "20m", + "title": "Test", + }, + }, + ] + `); }); test('shallow clones the given rule type', () => { @@ -524,35 +524,35 @@ describe('Create Lifecycle', () => { }); const ruleType = registry.get('test'); expect(ruleType).toMatchInlineSnapshot(` - Object { - "actionGroups": Array [ - Object { - "id": "default", - "name": "Default", - }, - Object { - "id": "recovered", - "name": "Recovered", - }, - ], - "actionVariables": Object { - "context": Array [], - "params": Array [], - "state": Array [], - }, - "defaultActionGroupId": "default", - "executor": [MockFunction], - "id": "test", - "isExportable": true, - "minimumLicenseRequired": "basic", - "name": "Test", - "producer": "alerts", - "recoveryActionGroup": Object { - "id": "recovered", - "name": "Recovered", - }, - } - `); + Object { + "actionGroups": Array [ + Object { + "id": "default", + "name": "Default", + }, + Object { + "id": "recovered", + "name": "Recovered", + }, + ], + "actionVariables": Object { + "context": Array [], + "params": Array [], + "state": Array [], + }, + "defaultActionGroupId": "default", + "executor": [MockFunction], + "id": "test", + "isExportable": true, + "minimumLicenseRequired": "basic", + "name": "Test", + "producer": "alerts", + "recoveryActionGroup": Object { + "id": "recovered", + "name": "Recovered", + }, + } + `); }); test(`should throw an error if type isn't registered`, () => { @@ -591,40 +591,41 @@ describe('Create Lifecycle', () => { }); const result = registry.list(); expect(result).toMatchInlineSnapshot(` - Set { - Object { - "actionGroups": Array [ - Object { - "id": "testActionGroup", - "name": "Test Action Group", + Set { + Object { + "actionGroups": Array [ + Object { + "id": "testActionGroup", + "name": "Test Action Group", + }, + Object { + "id": "recovered", + "name": "Recovered", + }, + ], + "actionVariables": Object { + "context": Array [], + "params": Array [], + "state": Array [], }, - Object { + "defaultActionGroupId": "testActionGroup", + "defaultScheduleInterval": undefined, + "doesSetRecoveryContext": false, + "enabledInLicense": false, + "hasGetSummarizedAlerts": false, + "id": "test", + "isExportable": true, + "minimumLicenseRequired": "basic", + "name": "Test", + "producer": "alerts", + "recoveryActionGroup": Object { "id": "recovered", "name": "Recovered", }, - ], - "actionVariables": Object { - "context": Array [], - "params": Array [], - "state": Array [], - }, - "defaultActionGroupId": "testActionGroup", - "defaultScheduleInterval": undefined, - "doesSetRecoveryContext": false, - "enabledInLicense": false, - "id": "test", - "isExportable": true, - "minimumLicenseRequired": "basic", - "name": "Test", - "producer": "alerts", - "recoveryActionGroup": Object { - "id": "recovered", - "name": "Recovered", + "ruleTaskTimeout": "20m", }, - "ruleTaskTimeout": "20m", - }, - } - `); + } + `); }); test('should return action variables state and empty context', () => { diff --git a/x-pack/plugins/alerting/server/rule_type_registry.ts b/x-pack/plugins/alerting/server/rule_type_registry.ts index b4be0957f11af..23bfe0d25097c 100644 --- a/x-pack/plugins/alerting/server/rule_type_registry.ts +++ b/x-pack/plugins/alerting/server/rule_type_registry.ts @@ -358,6 +358,7 @@ export class RuleTypeRegistry { ruleTaskTimeout, defaultScheduleInterval, doesSetRecoveryContext, + getSummarizedAlerts, }, ]: [string, UntypedNormalizedRuleType]) => ({ id, @@ -377,6 +378,7 @@ export class RuleTypeRegistry { name, minimumLicenseRequired ).isValid, + hasGetSummarizedAlerts: !!getSummarizedAlerts, }) ) ); diff --git a/x-pack/plugins/apm/common/environment_filter_values.ts b/x-pack/plugins/apm/common/environment_filter_values.ts index 5b6354880cce5..ebc106a609e9f 100644 --- a/x-pack/plugins/apm/common/environment_filter_values.ts +++ b/x-pack/plugins/apm/common/environment_filter_values.ts @@ -46,14 +46,14 @@ export const ENVIRONMENT_NOT_DEFINED = { function isEnvironmentDefined(environment: string) { return ( - !environment || - environment === ENVIRONMENT_NOT_DEFINED_VALUE || - environment === ENVIRONMENT_ALL_VALUE + environment && + environment !== ENVIRONMENT_NOT_DEFINED_VALUE && + environment !== ENVIRONMENT_ALL_VALUE ); } export function getEnvironmentEsField(environment: string) { - if (isEnvironmentDefined(environment)) { + if (!isEnvironmentDefined(environment)) { return {}; } @@ -61,7 +61,7 @@ export function getEnvironmentEsField(environment: string) { } export function getEnvironmentKuery(environment: string) { - if (isEnvironmentDefined(environment)) { + if (!isEnvironmentDefined(environment)) { return null; } diff --git a/x-pack/plugins/apm/common/es_fields/__snapshots__/es_fields.test.ts.snap b/x-pack/plugins/apm/common/es_fields/__snapshots__/es_fields.test.ts.snap index 10c8daa6e8565..e89a25cbfb1aa 100644 --- a/x-pack/plugins/apm/common/es_fields/__snapshots__/es_fields.test.ts.snap +++ b/x-pack/plugins/apm/common/es_fields/__snapshots__/es_fields.test.ts.snap @@ -172,6 +172,8 @@ exports[`Error METRIC_SYSTEM_FREE_MEMORY 1`] = `undefined`; exports[`Error METRIC_SYSTEM_TOTAL_MEMORY 1`] = `undefined`; +exports[`Error METRICSET_INTERVAL 1`] = `undefined`; + exports[`Error METRICSET_NAME 1`] = `undefined`; exports[`Error NETWORK_CONNECTION_TYPE 1`] = `undefined`; @@ -270,6 +272,8 @@ exports[`Error TRANSACTION_ID 1`] = `"transaction id"`; exports[`Error TRANSACTION_NAME 1`] = `undefined`; +exports[`Error TRANSACTION_OVERFLOW_COUNT 1`] = `undefined`; + exports[`Error TRANSACTION_PAGE_URL 1`] = `undefined`; exports[`Error TRANSACTION_RESULT 1`] = `undefined`; @@ -449,6 +453,8 @@ exports[`Span METRIC_SYSTEM_FREE_MEMORY 1`] = `undefined`; exports[`Span METRIC_SYSTEM_TOTAL_MEMORY 1`] = `undefined`; +exports[`Span METRICSET_INTERVAL 1`] = `undefined`; + exports[`Span METRICSET_NAME 1`] = `undefined`; exports[`Span NETWORK_CONNECTION_TYPE 1`] = `undefined`; @@ -543,6 +549,8 @@ exports[`Span TRANSACTION_ID 1`] = `"transaction id"`; exports[`Span TRANSACTION_NAME 1`] = `undefined`; +exports[`Span TRANSACTION_OVERFLOW_COUNT 1`] = `undefined`; + exports[`Span TRANSACTION_PAGE_URL 1`] = `undefined`; exports[`Span TRANSACTION_RESULT 1`] = `undefined`; @@ -736,6 +744,8 @@ exports[`Transaction METRIC_SYSTEM_FREE_MEMORY 1`] = `undefined`; exports[`Transaction METRIC_SYSTEM_TOTAL_MEMORY 1`] = `undefined`; +exports[`Transaction METRICSET_INTERVAL 1`] = `undefined`; + exports[`Transaction METRICSET_NAME 1`] = `undefined`; exports[`Transaction NETWORK_CONNECTION_TYPE 1`] = `undefined`; @@ -834,6 +844,8 @@ exports[`Transaction TRANSACTION_ID 1`] = `"transaction id"`; exports[`Transaction TRANSACTION_NAME 1`] = `"transaction name"`; +exports[`Transaction TRANSACTION_OVERFLOW_COUNT 1`] = `undefined`; + exports[`Transaction TRANSACTION_PAGE_URL 1`] = `undefined`; exports[`Transaction TRANSACTION_RESULT 1`] = `"transaction result"`; diff --git a/x-pack/plugins/apm/common/es_fields/apm.ts b/x-pack/plugins/apm/common/es_fields/apm.ts index c20b70e0add76..fc188c04ec761 100644 --- a/x-pack/plugins/apm/common/es_fields/apm.ts +++ b/x-pack/plugins/apm/common/es_fields/apm.ts @@ -56,6 +56,8 @@ export const TRANSACTION_SAMPLED = 'transaction.sampled'; export const TRANSACTION_PAGE_URL = 'transaction.page.url'; export const TRANSACTION_FAILURE_COUNT = 'transaction.failure_count'; export const TRANSACTION_SUCCESS_COUNT = 'transaction.success_count'; +export const TRANSACTION_OVERFLOW_COUNT = + 'transaction.aggregation.overflow_count'; // for transaction metrics export const TRANSACTION_ROOT = 'transaction.root'; @@ -125,6 +127,7 @@ export const METRIC_JAVA_GC_COUNT = 'jvm.gc.count'; export const METRIC_JAVA_GC_TIME = 'jvm.gc.time'; export const METRICSET_NAME = 'metricset.name'; +export const METRICSET_INTERVAL = 'metricset.interval'; export const LABEL_NAME = 'labels.name'; diff --git a/x-pack/plugins/apm/public/components/alerting/rule_types/error_count_rule_type/index.tsx b/x-pack/plugins/apm/public/components/alerting/rule_types/error_count_rule_type/index.tsx index 8868cd6ccce88..09ca441cd26e9 100644 --- a/x-pack/plugins/apm/public/components/alerting/rule_types/error_count_rule_type/index.tsx +++ b/x-pack/plugins/apm/public/components/alerting/rule_types/error_count_rule_type/index.tsx @@ -94,11 +94,17 @@ export function ErrorCountRuleType(props: Props) { const fields = [ setRuleParams('serviceName', value)} + onChange={(value) => { + if (value !== params.serviceName) { + setRuleParams('serviceName', value); + setRuleParams('environment', ENVIRONMENT_ALL.value); + } + }} />, setRuleParams('environment', value)} + serviceName={params.serviceName} />, setRuleParams('serviceName', value)} + onChange={(value) => { + if (value !== params.serviceName) { + setRuleParams('serviceName', value); + setRuleParams('transactionType', ''); + setRuleParams('environment', ENVIRONMENT_ALL.value); + } + }} />, setRuleParams('transactionType', value)} + serviceName={params.serviceName} />, setRuleParams('environment', value)} + serviceName={params.serviceName} />, } diff --git a/x-pack/plugins/apm/public/components/alerting/rule_types/transaction_duration_rule_type/index.tsx b/x-pack/plugins/apm/public/components/alerting/rule_types/transaction_duration_rule_type/index.tsx index c2423741a4e9e..1045eff2cc6c5 100644 --- a/x-pack/plugins/apm/public/components/alerting/rule_types/transaction_duration_rule_type/index.tsx +++ b/x-pack/plugins/apm/public/components/alerting/rule_types/transaction_duration_rule_type/index.tsx @@ -146,15 +146,23 @@ export function TransactionDurationRuleType(props: Props) { setRuleParams('serviceName', value)} + onChange={(value) => { + if (value !== params.serviceName) { + setRuleParams('serviceName', value); + setRuleParams('transactionType', ''); + setRuleParams('environment', ENVIRONMENT_ALL.value); + } + }} />, setRuleParams('transactionType', value)} + serviceName={params.serviceName} />, setRuleParams('environment', value)} + serviceName={params.serviceName} />, setRuleParams('serviceName', value)} + onChange={(value) => { + if (value !== params.serviceName) { + setRuleParams('serviceName', value); + setRuleParams('transactionType', ''); + setRuleParams('environment', ENVIRONMENT_ALL.value); + } + }} />, setRuleParams('transactionType', value)} + serviceName={params.serviceName} />, setRuleParams('environment', value)} + serviceName={params.serviceName} />, void; + serviceName?: string; }) { return ( ); @@ -98,9 +101,11 @@ export function EnvironmentField({ export function TransactionTypeField({ currentValue, onChange, + serviceName, }: { currentValue?: string; onChange: (value?: string) => void; + serviceName?: string; }) { const label = i18n.translate('xpack.apm.alerting.fields.type', { defaultMessage: 'Type', @@ -126,6 +131,7 @@ export function TransactionTypeField({ )} start={moment().subtract(24, 'h').toISOString()} end={moment().toISOString()} + serviceName={serviceName} /> ); diff --git a/x-pack/plugins/apm/public/components/app/mobile/transaction_overview/index.tsx b/x-pack/plugins/apm/public/components/app/mobile/transaction_overview/index.tsx index ecebbeab50986..4d1ae6372668a 100644 --- a/x-pack/plugins/apm/public/components/app/mobile/transaction_overview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/mobile/transaction_overview/index.tsx @@ -78,7 +78,7 @@ export function MobileTransactionOverview() { -

- {isEdit - ? i18n.translate( - 'xpack.apm.serviceGroups.groupDetailsForm.edit.title', - { defaultMessage: 'Edit group' } - ) - : i18n.translate( - 'xpack.apm.serviceGroups.groupDetailsForm.create.title', - { defaultMessage: 'Create group' } - )} -

+ {isEdit + ? i18n.translate( + 'xpack.apm.serviceGroups.groupDetailsForm.edit.title', + { defaultMessage: 'Edit group' } + ) + : i18n.translate( + 'xpack.apm.serviceGroups.groupDetailsForm.create.title', + { defaultMessage: 'Create group' } + )}
diff --git a/x-pack/plugins/apm/public/components/app/service_groups/service_group_save/select_services.tsx b/x-pack/plugins/apm/public/components/app/service_groups/service_group_save/select_services.tsx index 96b0b47a38a1b..ce60f7c461b61 100644 --- a/x-pack/plugins/apm/public/components/app/service_groups/service_group_save/select_services.tsx +++ b/x-pack/plugins/apm/public/components/app/service_groups/service_group_save/select_services.tsx @@ -113,13 +113,15 @@ export function SelectServices({ return ( - -

+
+ {i18n.translate( 'xpack.apm.serviceGroups.selectServicesForm.title', - { defaultMessage: 'Select services' } + { + defaultMessage: 'Select services', + } )} -

+
{i18n.translate( @@ -135,6 +137,7 @@ export function SelectServices({ {kueryValidationMessage} )} + )} - +
- {children} - - ); -} - -describe('TransactionDetailLink', () => { - function getHref(container: HTMLElement) { - return ((container as HTMLDivElement).children[0] as HTMLAnchorElement) - .href; - } - describe('With comparison in the url', () => { - it('returns comparison defined in the url', () => { - const { container } = render( - - - Transaction - - - ); - expect(getHref(container)).toEqual( - 'http://localhost/basepath/app/apm/services/foo/transactions/view?traceId=baz&transactionId=123&transactionName=bar&transactionType=request&comparisonEnabled=true&offset=1w' - ); - }); - }); - - describe('use default comparison', () => { - it('returns default comparison', () => { - const { container } = render( - - - Transaction - - - ); - expect(getHref(container)).toEqual( - 'http://localhost/basepath/app/apm/services/foo/transactions/view?traceId=baz&transactionId=123&transactionName=bar&transactionType=request&comparisonEnabled=true&offset=1d' - ); - }); - }); -}); diff --git a/x-pack/plugins/apm/public/components/shared/links/apm/transaction_detail_link.tsx b/x-pack/plugins/apm/public/components/shared/links/apm/transaction_detail_link.tsx deleted file mode 100644 index b11ec23586caf..0000000000000 --- a/x-pack/plugins/apm/public/components/shared/links/apm/transaction_detail_link.tsx +++ /dev/null @@ -1,72 +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 React from 'react'; -import { useLocation } from 'react-router-dom'; -import { EuiLink } from '@elastic/eui'; -import { pickBy, identity } from 'lodash'; -import { getLegacyApmHref, APMLinkExtendProps } from './apm_link'; -import { useLegacyUrlParams } from '../../../../context/url_params_context/use_url_params'; -import { pickKeys } from '../../../../../common/utils/pick_keys'; -import { APMQueryParams } from '../url_helpers'; -import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; -import { getComparisonEnabled } from '../../time_comparison/get_comparison_enabled'; - -interface Props extends APMLinkExtendProps { - serviceName: string; - traceId?: string; - transactionId?: string; - transactionName: string; - transactionType: string; - latencyAggregationType?: string; - environment?: string; - comparisonEnabled?: boolean; - offset?: string; -} - -const persistedFilters: Array = [ - 'transactionResult', - 'serviceVersion', -]; - -export function TransactionDetailLink({ - serviceName, - traceId, - transactionId, - transactionName, - transactionType, - latencyAggregationType, - environment, - comparisonEnabled, - offset = '1d', - ...rest -}: Props) { - const { urlParams } = useLegacyUrlParams(); - const { core } = useApmPluginContext(); - const defaultComparisonEnabled = getComparisonEnabled({ - core, - urlComparisonEnabled: comparisonEnabled, - }); - const location = useLocation(); - const href = getLegacyApmHref({ - basePath: core.http.basePath, - path: `/services/${serviceName}/transactions/view`, - query: { - traceId, - transactionId, - transactionName, - transactionType, - comparisonEnabled: defaultComparisonEnabled, - offset, - ...pickKeys(urlParams as APMQueryParams, ...persistedFilters), - ...pickBy({ latencyAggregationType, environment }, identity), - }, - search: location.search, - }); - - return ; -} diff --git a/x-pack/plugins/apm/public/components/shared/links/apm/transaction_detail_link/index.test.tsx b/x-pack/plugins/apm/public/components/shared/links/apm/transaction_detail_link/index.test.tsx new file mode 100644 index 0000000000000..bbd4f162fe361 --- /dev/null +++ b/x-pack/plugins/apm/public/components/shared/links/apm/transaction_detail_link/index.test.tsx @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { Location } from 'history'; +import React from 'react'; +import { getRenderedHref } from '../../../../../utils/test_helpers'; +import { TransactionDetailLink } from '.'; + +describe('TransactionDetailLink', () => { + describe('With comparison in the url', () => { + it('returns comparison defined in the url', async () => { + const href = await getRenderedHref( + () => ( + + Transaction + + ), + {} as Location + ); + + expect(href).toMatchInlineSnapshot( + '"/basepath/app/apm/services/foo/transactions/view?traceId=baz&transactionId=123&transactionName=bar&transactionType=request&comparisonEnabled=true&offset=1w"' + ); + }); + }); + + describe('use default comparison', () => { + it('returns default comparison', async () => { + const href = await getRenderedHref( + () => ( + + Transaction + + ), + {} as Location + ); + + expect(href).toMatchInlineSnapshot( + '"/basepath/app/apm/services/foo/transactions/view?traceId=baz&transactionId=123&transactionName=bar&transactionType=request&comparisonEnabled=true&offset=1d"' + ); + }); + }); +}); diff --git a/x-pack/plugins/apm/public/components/shared/links/apm/transaction_detail_link/index.tsx b/x-pack/plugins/apm/public/components/shared/links/apm/transaction_detail_link/index.tsx new file mode 100644 index 0000000000000..de1a6cc8f5498 --- /dev/null +++ b/x-pack/plugins/apm/public/components/shared/links/apm/transaction_detail_link/index.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { identity, pickBy } from 'lodash'; +import React from 'react'; +import { useLocation } from 'react-router-dom'; +import { pickKeys } from '../../../../../../common/utils/pick_keys'; +import { useApmPluginContext } from '../../../../../context/apm_plugin/use_apm_plugin_context'; +import { useLegacyUrlParams } from '../../../../../context/url_params_context/use_url_params'; +import { unit } from '../../../../../utils/style'; +import { PopoverTooltip } from '../../../popover_tooltip'; +import { getComparisonEnabled } from '../../../time_comparison/get_comparison_enabled'; +import { TruncateWithTooltip } from '../../../truncate_with_tooltip'; +import { APMQueryParams } from '../../url_helpers'; +import { APMLinkExtendProps, getLegacyApmHref } from '../apm_link'; + +export const txGroupsDroppedBucketName = '_other'; + +interface Props extends APMLinkExtendProps { + serviceName: string; + traceId?: string; + transactionId?: string; + transactionName: string; + transactionType: string; + latencyAggregationType?: string; + environment?: string; + comparisonEnabled?: boolean; + offset?: string; + overflowCount?: number; +} + +const persistedFilters: Array = [ + 'transactionResult', + 'serviceVersion', +]; + +export function TransactionDetailLink({ + serviceName, + traceId, + transactionId, + transactionName, + transactionType, + latencyAggregationType, + environment, + comparisonEnabled, + offset = '1d', + overflowCount = 0, + ...rest +}: Props) { + const { urlParams } = useLegacyUrlParams(); + const { core } = useApmPluginContext(); + const defaultComparisonEnabled = getComparisonEnabled({ + core, + urlComparisonEnabled: comparisonEnabled, + }); + const location = useLocation(); + const href = getLegacyApmHref({ + basePath: core.http.basePath, + path: `/services/${serviceName}/transactions/view`, + query: { + traceId, + transactionId, + transactionName, + transactionType, + comparisonEnabled: defaultComparisonEnabled, + offset, + ...pickKeys(urlParams as APMQueryParams, ...persistedFilters), + ...pickBy({ latencyAggregationType, environment }, identity), + }, + search: location.search, + }); + + if (transactionName !== txGroupsDroppedBucketName) { + return ( + } + /> + ); + } + + return ( + + + {i18n.translate('xpack.apm.transactionDetail.remainingServices', { + defaultMessage: 'Remaining Transactions', + })} + + + + + + + + + + ); +} diff --git a/x-pack/plugins/apm/public/components/shared/popover_tooltip/index.tsx b/x-pack/plugins/apm/public/components/shared/popover_tooltip/index.tsx index a34c3d7bf124f..70b10d25d5b0b 100644 --- a/x-pack/plugins/apm/public/components/shared/popover_tooltip/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/popover_tooltip/index.tsx @@ -11,9 +11,14 @@ import React, { useState } from 'react'; interface PopoverTooltipProps { ariaLabel?: string; children: React.ReactNode; + iconType?: string; } -export function PopoverTooltip({ ariaLabel, children }: PopoverTooltipProps) { +export function PopoverTooltip({ + ariaLabel, + iconType, + children, +}: PopoverTooltipProps) { const [isPopoverOpen, setIsPopoverOpen] = useState(false); return ( @@ -30,7 +35,7 @@ export function PopoverTooltip({ ariaLabel, children }: PopoverTooltipProps) { }} size="xs" color="primary" - iconType="questionInCircle" + iconType={iconType ?? 'questionInCircle'} style={{ height: 'auto' }} /> } diff --git a/x-pack/plugins/apm/public/components/shared/suggestions_select/index.tsx b/x-pack/plugins/apm/public/components/shared/suggestions_select/index.tsx index 66c8980bf00c6..13b530e0d760f 100644 --- a/x-pack/plugins/apm/public/components/shared/suggestions_select/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/suggestions_select/index.tsx @@ -23,6 +23,7 @@ interface SuggestionsSelectProps { placeholder: string; dataTestSubj?: string; prepend?: string; + serviceName?: string; } export function SuggestionsSelect({ @@ -38,6 +39,7 @@ export function SuggestionsSelect({ dataTestSubj, isClearable = true, prepend, + serviceName, }: SuggestionsSelectProps) { let defaultOption: EuiComboBoxOptionOption | undefined; @@ -59,11 +61,12 @@ export function SuggestionsSelect({ fieldValue: searchValue, start, end, + serviceName, }, }, }); }, - [fieldName, searchValue, start, end], + [fieldName, searchValue, start, end, serviceName], { preservePreviousData: false } ); diff --git a/x-pack/plugins/apm/public/components/shared/transactions_table/get_columns.tsx b/x-pack/plugins/apm/public/components/shared/transactions_table/get_columns.tsx index dd68dc94a2c1a..a71ff3eb2643e 100644 --- a/x-pack/plugins/apm/public/components/shared/transactions_table/get_columns.tsx +++ b/x-pack/plugins/apm/public/components/shared/transactions_table/get_columns.tsx @@ -16,7 +16,6 @@ import { import { i18n } from '@kbn/i18n'; import React from 'react'; import { ValuesType } from 'utility-types'; -import { isTimeComparison } from '../time_comparison/get_comparison_options'; import { LatencyAggregationType } from '../../../../common/latency_aggregation_types'; import { asMillisecondDuration, @@ -31,13 +30,13 @@ import { import { ImpactBar } from '../impact_bar'; import { TransactionDetailLink } from '../links/apm/transaction_detail_link'; import { ListMetric } from '../list_metric'; -import { TruncateWithTooltip } from '../truncate_with_tooltip'; +import { isTimeComparison } from '../time_comparison/get_comparison_options'; import { getLatencyColumnLabel } from './get_latency_column_label'; type TransactionGroupMainStatistics = APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics'>; -type ServiceTransactionGroupItem = ValuesType< +export type ServiceTransactionGroupItem = ValuesType< TransactionGroupMainStatistics['transactionGroups'] >; type TransactionGroupDetailedStatistics = @@ -51,6 +50,7 @@ export function getColumns({ comparisonEnabled, shouldShowSparkPlots = true, offset, + transactionOverflowCount, }: { serviceName: string; latencyAggregationType?: LatencyAggregationType; @@ -59,6 +59,7 @@ export function getColumns({ comparisonEnabled?: boolean; shouldShowSparkPlots?: boolean; offset?: string; + transactionOverflowCount: number; }): Array> { return [ { @@ -71,21 +72,17 @@ export function getColumns({ width: '30%', render: (_, { name, transactionType: type }) => { return ( - - {name} - - } - /> + + {name} + ); }, }, diff --git a/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx b/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx index 686842de935c9..4d80fff82c4fe 100644 --- a/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx +++ b/x-pack/plugins/apm/public/components/shared/transactions_table/index.tsx @@ -7,34 +7,33 @@ import { EuiBasicTable, + EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiTitle, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { orderBy } from 'lodash'; import React, { useMemo, useState } from 'react'; -import { v4 as uuidv4 } from 'uuid'; -import { EuiCallOut } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiCode } from '@elastic/eui'; import { useHistory } from 'react-router-dom'; -import { APIReturnType } from '../../../services/rest/create_call_apm_api'; +import { v4 as uuidv4 } from 'uuid'; +import { LatencyAggregationType } from '../../../../common/latency_aggregation_types'; import { useApmServiceContext } from '../../../context/apm_service/use_apm_service_context'; +import { useAnyOfApmParams } from '../../../hooks/use_apm_params'; +import { useBreakpoints } from '../../../hooks/use_breakpoints'; import { FETCH_STATUS, isPending, useFetcher, } from '../../../hooks/use_fetcher'; +import { APIReturnType } from '../../../services/rest/create_call_apm_api'; +import { txGroupsDroppedBucketName } from '../links/apm/transaction_detail_link'; import { TransactionOverviewLink } from '../links/apm/transaction_overview_link'; -import { OverviewTableContainer } from '../overview_table_container'; -import { getColumns } from './get_columns'; -import { ElasticDocsLink } from '../links/elastic_docs_link'; -import { useBreakpoints } from '../../../hooks/use_breakpoints'; -import { useAnyOfApmParams } from '../../../hooks/use_apm_params'; -import { LatencyAggregationType } from '../../../../common/latency_aggregation_types'; import { fromQuery, toQuery } from '../links/url_helpers'; +import { OverviewTableContainer } from '../overview_table_container'; import { isTimeComparison } from '../time_comparison/get_comparison_options'; +import { getColumns } from './get_columns'; type ApiResponse = APIReturnType<'GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics'>; @@ -50,8 +49,8 @@ const INITIAL_STATE: InitialState = { requestId: '', mainStatisticsData: { transactionGroups: [], - isAggregationAccurate: true, - bucketSize: 0, + maxTransactionGroupsExceeded: true, + transactionOverflowCount: 0, transactionGroupsTotalItems: 0, }, }; @@ -68,7 +67,7 @@ interface Props { isSingleColumn?: boolean; numberOfTransactionsPerPage?: number; showPerPageOptions?: boolean; - showAggregationAccurateCallout?: boolean; + showMaxTransactionGroupsExceededWarning?: boolean; environment: string; fixedHeight?: boolean; kuery: string; @@ -83,7 +82,7 @@ export function TransactionsTable({ isSingleColumn = true, numberOfTransactionsPerPage = 5, showPerPageOptions = true, - showAggregationAccurateCallout = false, + showMaxTransactionGroupsExceededWarning = false, environment, kuery, start, @@ -154,8 +153,12 @@ export function TransactionsTable({ ).then((response) => { const currentPageTransactionGroups = orderBy( response.transactionGroups, - field, - direction + [ + (transactionItem) => + transactionItem.name === txGroupsDroppedBucketName ? -1 : 0, + field, + ], + ['asc', direction] ).slice(index * size, (index + 1) * size); return { @@ -193,8 +196,8 @@ export function TransactionsTable({ requestId, mainStatisticsData: { transactionGroups, - isAggregationAccurate, - bucketSize, + maxTransactionGroupsExceeded, + transactionOverflowCount, transactionGroupsTotalItems, }, } = data; @@ -254,6 +257,7 @@ export function TransactionsTable({ comparisonEnabled, shouldShowSparkPlots, offset, + transactionOverflowCount, }); const isLoading = status === FETCH_STATUS.LOADING; @@ -306,40 +310,24 @@ export function TransactionsTable({ )}
- {showAggregationAccurateCallout && !isAggregationAccurate && ( + {showMaxTransactionGroupsExceededWarning && maxTransactionGroupsExceeded && (

xpack.apm.ui.transactionGroupBucketSize - ), - }} + id="xpack.apm.transactionsCallout.transactionGroupLimit.exceeded" + defaultMessage="The maximum number of transaction groups displayed in Kibana has been reached. Try narrowing down results by using the query bar." /> - - - {i18n.translate( - 'xpack.apm.transactionsTable.cardinalityWarning.docsLink', - { defaultMessage: 'Learn more in the docs' } - )} -

diff --git a/x-pack/plugins/apm/server/index.ts b/x-pack/plugins/apm/server/index.ts index 9d630a75ea24b..74eea568788b5 100644 --- a/x-pack/plugins/apm/server/index.ts +++ b/x-pack/plugins/apm/server/index.ts @@ -28,7 +28,6 @@ const configSchema = schema.object({ serviceMapMaxTracesPerRequest: schema.number({ defaultValue: 50 }), ui: schema.object({ enabled: schema.boolean({ defaultValue: true }), - transactionGroupBucketSize: schema.number({ defaultValue: 1000 }), maxTraceItems: schema.number({ defaultValue: 5000 }), }), searchAggregatedTransactions: schema.oneOf( @@ -66,6 +65,9 @@ export const config: PluginConfigDescriptor = { unusedFromRoot, }) => [ unused('indices.sourcemap', { level: 'warning' }), + unused('ui.transactionGroupBucketSize', { + level: 'warning', + }), rename('autocreateApmIndexPattern', 'autoCreateApmDataView', { level: 'warning', }), diff --git a/x-pack/plugins/apm/server/lib/connections/get_connection_stats/get_stats.ts b/x-pack/plugins/apm/server/lib/connections/get_connection_stats/get_stats.ts index 6f432f72e307e..e79b9a87e7276 100644 --- a/x-pack/plugins/apm/server/lib/connections/get_connection_stats/get_stats.ts +++ b/x-pack/plugins/apm/server/lib/connections/get_connection_stats/get_stats.ts @@ -30,6 +30,7 @@ import { EventOutcome } from '../../../../common/event_outcome'; import { NodeType } from '../../../../common/connections'; import { excludeRumExitSpansQuery } from '../exclude_rum_exit_spans_query'; import { APMEventClient } from '../../helpers/create_es_client/create_apm_event_client'; +import { getDocumentTypeFilterForServiceDestinationStatistics } from '../../helpers/spans/get_is_using_service_destination_metrics'; export const getStats = async ({ apmEventClient, @@ -63,11 +64,7 @@ export const getStats = async ({ bool: { filter: [ ...filter, - { - exists: { - field: SPAN_DESTINATION_SERVICE_RESPONSE_TIME_COUNT, - }, - }, + ...getDocumentTypeFilterForServiceDestinationStatistics(true), ...rangeQuery(startWithOffset, endWithOffset), ...excludeRumExitSpansQuery(), ], diff --git a/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_apm_event_client/index.ts b/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_apm_event_client/index.ts index 870a7971c2e9e..cd67034b52281 100644 --- a/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_apm_event_client/index.ts +++ b/x-pack/plugins/apm/server/lib/helpers/create_es_client/create_apm_event_client/index.ts @@ -160,6 +160,7 @@ export class APMEventClient { ...(this.includeFrozen ? { ignore_throttled: false } : {}), ignore_unavailable: true, preference: 'any', + expand_wildcards: ['open' as const, 'hidden' as const], ...(forceSyntheticSourceForThisRequest ? { force_synthetic_source: true } : {}), diff --git a/x-pack/plugins/apm/server/lib/helpers/service_metrics/index.ts b/x-pack/plugins/apm/server/lib/helpers/service_metrics/index.ts index ce50557e44ada..a9d8e48be5f2f 100644 --- a/x-pack/plugins/apm/server/lib/helpers/service_metrics/index.ts +++ b/x-pack/plugins/apm/server/lib/helpers/service_metrics/index.ts @@ -76,7 +76,7 @@ export function getDocumentTypeFilterForServiceMetrics() { return [ { term: { - [METRICSET_NAME]: 'service', + [METRICSET_NAME]: 'service_transaction', }, }, ]; diff --git a/x-pack/plugins/apm/server/lib/helpers/spans/get_is_using_service_destination_metrics.ts b/x-pack/plugins/apm/server/lib/helpers/spans/get_is_using_service_destination_metrics.ts index 0632f5a0b4d61..c8fbf5503452b 100644 --- a/x-pack/plugins/apm/server/lib/helpers/spans/get_is_using_service_destination_metrics.ts +++ b/x-pack/plugins/apm/server/lib/helpers/spans/get_is_using_service_destination_metrics.ts @@ -14,6 +14,7 @@ import { import { ProcessorEvent } from '@kbn/observability-plugin/common'; import { METRICSET_NAME, + METRICSET_INTERVAL, SPAN_DESTINATION_SERVICE_RESPONSE_TIME_COUNT, SPAN_DESTINATION_SERVICE_RESPONSE_TIME_SUM, SPAN_DURATION, @@ -33,7 +34,18 @@ export function getDocumentTypeFilterForServiceDestinationStatistics( searchServiceDestinationMetrics: boolean ) { return searchServiceDestinationMetrics - ? termQuery(METRICSET_NAME, 'service_destination') + ? [ + { + bool: { + filter: termQuery(METRICSET_NAME, 'service_destination'), + must_not: { + terms: { + [METRICSET_INTERVAL]: ['10m', '60m'], + }, + }, + }, + }, + ] : []; } diff --git a/x-pack/plugins/apm/server/lib/helpers/transactions/index.ts b/x-pack/plugins/apm/server/lib/helpers/transactions/index.ts index 534d9af012fe9..fa0c57b7551ad 100644 --- a/x-pack/plugins/apm/server/lib/helpers/transactions/index.ts +++ b/x-pack/plugins/apm/server/lib/helpers/transactions/index.ts @@ -13,6 +13,8 @@ import { TRANSACTION_DURATION_HISTOGRAM, TRANSACTION_ROOT, PARENT_ID, + METRICSET_INTERVAL, + METRICSET_NAME, } from '../../../../common/es_fields/apm'; import { APMConfig } from '../../..'; import { APMEventClient } from '../create_es_client/create_apm_event_client'; @@ -98,7 +100,17 @@ export function getDocumentTypeFilterForTransactions( searchAggregatedTransactions: boolean ) { return searchAggregatedTransactions - ? [{ exists: { field: TRANSACTION_DURATION_HISTOGRAM } }] + ? [ + { + bool: { + filter: [{ exists: { field: TRANSACTION_DURATION_HISTOGRAM } }], + must_not: [ + { terms: { [METRICSET_INTERVAL]: ['10m', '60m'] } }, + { term: { [METRICSET_NAME]: 'service_transaction' } }, + ], + }, + }, + ] : []; } diff --git a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_histogram_range_steps.ts b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_histogram_range_steps.ts index 7e86fc70bad79..7a08697d7e76a 100644 --- a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_histogram_range_steps.ts +++ b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_histogram_range_steps.ts @@ -13,6 +13,7 @@ import { LatencyDistributionChartType } from '../../../../common/latency_distrib import { getCommonCorrelationsQuery } from './get_common_correlations_query'; import { getDurationField, getEventType } from '../utils'; import { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm_event_client'; +import { getDocumentTypeFilterForTransactions } from '../../../lib/helpers/transactions'; const getHistogramRangeSteps = (min: number, max: number, steps: number) => { // A d3 based scale function as a helper to get equally distributed bins on a log scale. @@ -63,7 +64,11 @@ export const fetchDurationHistogramRangeSteps = async ({ // when using metrics data, ensure we filter by docs with the appropriate duration field const filteredQuery = searchMetrics - ? { bool: { filter: [query, { exists: { field: durationField } }] } } + ? { + bool: { + filter: [query, ...getDocumentTypeFilterForTransactions(true)], + }, + } : query; const resp = await apmEventClient.search( diff --git a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_percentiles.ts b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_percentiles.ts index d303777b08c79..588111901a7eb 100644 --- a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_percentiles.ts +++ b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_percentiles.ts @@ -11,6 +11,7 @@ import { getCommonCorrelationsQuery } from './get_common_correlations_query'; import { CommonCorrelationsQueryParams } from '../../../../common/correlations/types'; import { getDurationField, getEventType } from '../utils'; import { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm_event_client'; +import { getDocumentTypeFilterForTransactions } from '../../../lib/helpers/transactions'; export const fetchDurationPercentiles = async ({ chartType, @@ -31,11 +32,13 @@ export const fetchDurationPercentiles = async ({ totalDocs: number; percentiles: Record; }> => { - const durationField = getDurationField(chartType, searchMetrics); - // when using metrics data, ensure we filter by docs with the appropriate duration field const filteredQuery = searchMetrics - ? { bool: { filter: [query, { exists: { field: durationField } }] } } + ? { + bool: { + filter: [query, ...getDocumentTypeFilterForTransactions(true)], + }, + } : query; const params = { diff --git a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_ranges.ts b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_ranges.ts index c8f2aae2e9372..af7caa207d92a 100644 --- a/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_ranges.ts +++ b/x-pack/plugins/apm/server/routes/correlations/queries/fetch_duration_ranges.ts @@ -12,6 +12,7 @@ import { getCommonCorrelationsQuery } from './get_common_correlations_query'; import { Environment } from '../../../../common/environment_rt'; import { getDurationField, getEventType } from '../utils'; import { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm_event_client'; +import { getDocumentTypeFilterForTransactions } from '../../../lib/helpers/transactions'; export const fetchDurationRanges = async ({ rangeSteps, @@ -37,11 +38,13 @@ export const fetchDurationRanges = async ({ totalDocCount: number; durationRanges: Array<{ key: number; doc_count: number }>; }> => { - const durationField = getDurationField(chartType, searchMetrics); - // when using metrics data, ensure we filter by docs with the appropriate duration field const filteredQuery = searchMetrics - ? { bool: { filter: [query, { exists: { field: durationField } }] } } + ? { + bool: { + filter: [query, ...getDocumentTypeFilterForTransactions(true)], + }, + } : query; const ranges = rangeSteps.reduce( diff --git a/x-pack/plugins/apm/server/routes/service_map/get_service_map_dependency_node_info.ts b/x-pack/plugins/apm/server/routes/service_map/get_service_map_dependency_node_info.ts index c373fcea49071..3caa46b62bb6c 100644 --- a/x-pack/plugins/apm/server/routes/service_map/get_service_map_dependency_node_info.ts +++ b/x-pack/plugins/apm/server/routes/service_map/get_service_map_dependency_node_info.ts @@ -22,6 +22,7 @@ import { getFailedTransactionRateTimeSeries } from '../../lib/helpers/transactio import { NodeStats } from '../../../common/service_map'; import { getOffsetInMs } from '../../../common/utils/get_offset_in_ms'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; +import { getDocumentTypeFilterForServiceDestinationStatistics } from '../../lib/helpers/spans/get_is_using_service_destination_metrics'; interface Options { apmEventClient: APMEventClient; @@ -77,6 +78,7 @@ export function getServiceMapDependencyNodeInfo({ query: { bool: { filter: [ + ...getDocumentTypeFilterForServiceDestinationStatistics(true), { term: { [SPAN_DESTINATION_SERVICE_RESOURCE]: dependencyName }, }, diff --git a/x-pack/plugins/apm/server/routes/services/get_service_transaction_groups.ts b/x-pack/plugins/apm/server/routes/services/get_service_transaction_groups.ts index 67b601c8426d0..a890809c7122c 100644 --- a/x-pack/plugins/apm/server/routes/services/get_service_transaction_groups.ts +++ b/x-pack/plugins/apm/server/routes/services/get_service_transaction_groups.ts @@ -10,6 +10,7 @@ import { EVENT_OUTCOME, SERVICE_NAME, TRANSACTION_NAME, + TRANSACTION_OVERFLOW_COUNT, TRANSACTION_TYPE, } from '../../../common/es_fields/apm'; import { EventOutcome } from '../../../common/event_outcome'; @@ -29,6 +30,8 @@ import { calculateFailedTransactionRate } from '../../lib/helpers/transaction_er import { APMConfig } from '../..'; import { APMEventClient } from '../../lib/helpers/create_es_client/create_apm_event_client'; +const txGroupsDroppedBucketName = '_other'; + export type ServiceOverviewTransactionGroupSortField = | 'name' | 'latency' @@ -59,8 +62,6 @@ export async function getServiceTransactionGroups({ start: number; end: number; }) { - const bucketSize = config.ui.transactionGroupBucketSize; - const field = getDurationFieldForTransactions(searchAggregatedTransactions); const response = await apmEventClient.search( @@ -78,7 +79,14 @@ export async function getServiceTransactionGroups({ bool: { filter: [ { term: { [SERVICE_NAME]: serviceName } }, - { term: { [TRANSACTION_TYPE]: transactionType } }, + { + bool: { + should: [ + { term: { [TRANSACTION_NAME]: txGroupsDroppedBucketName } }, + { term: { [TRANSACTION_TYPE]: transactionType } }, + ], + }, + }, ...getDocumentTypeFilterForTransactions( searchAggregatedTransactions ), @@ -90,10 +98,15 @@ export async function getServiceTransactionGroups({ }, aggs: { total_duration: { sum: { field } }, + transaction_overflow_count: { + sum: { + field: TRANSACTION_OVERFLOW_COUNT, + }, + }, transaction_groups: { terms: { field: TRANSACTION_NAME, - size: bucketSize, + size: 1000, order: { _count: 'desc' }, }, aggs: { @@ -146,9 +159,9 @@ export async function getServiceTransactionGroups({ ...transactionGroup, transactionType, })), - isAggregationAccurate: - (response.aggregations?.transaction_groups.sum_other_doc_count ?? 0) === - 0, - bucketSize, + maxTransactionGroupsExceeded: + (response.aggregations?.transaction_groups.sum_other_doc_count ?? 0) > 0, + transactionOverflowCount: + response.aggregations?.transaction_overflow_count.value ?? 0, }; } diff --git a/x-pack/plugins/apm/server/routes/transactions/route.ts b/x-pack/plugins/apm/server/routes/transactions/route.ts index 4a3ecfe5794ca..1385ad72351c7 100644 --- a/x-pack/plugins/apm/server/routes/transactions/route.ts +++ b/x-pack/plugins/apm/server/routes/transactions/route.ts @@ -53,8 +53,8 @@ const transactionGroupsMainStatisticsRoute = createApmServerRoute({ errorRate: number; impact: number; }>; - isAggregationAccurate: boolean; - bucketSize: number; + transactionOverflowCount: number; + maxTransactionGroupsExceeded: boolean; }> => { const { params, config } = resources; const apmEventClient = await getApmEventClient(resources); diff --git a/x-pack/plugins/apm/server/utils/test_helpers.tsx b/x-pack/plugins/apm/server/utils/test_helpers.tsx index ab1b63e058d04..c4349ce920e30 100644 --- a/x-pack/plugins/apm/server/utils/test_helpers.tsx +++ b/x-pack/plugins/apm/server/utils/test_helpers.tsx @@ -78,7 +78,6 @@ export async function inspectSearchParams( case 'ui': return { enabled: true, - transactionGroupBucketSize: 1000, maxTraceItems: 5000, }; case 'metricsInterval': diff --git a/x-pack/plugins/canvas/public/components/custom_element_modal/custom_element_modal.tsx b/x-pack/plugins/canvas/public/components/custom_element_modal/custom_element_modal.tsx index c59299fd0e777..1c7e7d3088745 100644 --- a/x-pack/plugins/canvas/public/components/custom_element_modal/custom_element_modal.tsx +++ b/x-pack/plugins/canvas/public/components/custom_element_modal/custom_element_modal.tsx @@ -160,9 +160,7 @@ export class CustomElementModal extends PureComponent { initialFocus=".canvasCustomElementForm__name" > - -

{title}

-
+ {title}
diff --git a/x-pack/plugins/canvas/shareable_runtime/api/__snapshots__/shareable.test.tsx.snap b/x-pack/plugins/canvas/shareable_runtime/api/__snapshots__/shareable.test.tsx.snap index 381b9ce329d00..b8d7412279336 100644 --- a/x-pack/plugins/canvas/shareable_runtime/api/__snapshots__/shareable.test.tsx.snap +++ b/x-pack/plugins/canvas/shareable_runtime/api/__snapshots__/shareable.test.tsx.snap @@ -141,7 +141,7 @@ exports[`Canvas Shareable Workpad API Placed successfully with default propertie
= T & rt.TypeOf; -export type UserActionWithResponse = T & rt.TypeOf; - -/** - * This should be used for all user action types going forward it will be renamed to CaseUserActionSavedObjectIdsRt - * Once the UI is switched to using the new user actions _find API - */ export const CaseUserActionInjectedIdsRt = rt.type({ comment_id: rt.union([rt.string, rt.null]), }); -/** - * Temporary type until CaseUserActionInjectedIdsRt replaces CaseUserActionSavedObjectIdsRt - */ -export type UserActionWithResponseInjection = T & rt.TypeOf; +export type UserActionWithAttributes = T & rt.TypeOf; +export type UserActionWithResponse = T & { id: string; version: string } & rt.TypeOf< + typeof CaseUserActionInjectedIdsRt + >; +export type UserActionWithDeprecatedResponse = T & + rt.TypeOf; diff --git a/x-pack/plugins/cases/common/api/cases/user_actions/operations/find.ts b/x-pack/plugins/cases/common/api/cases/user_actions/operations/find.ts index 062fce38978d7..dc4524e2bf3e9 100644 --- a/x-pack/plugins/cases/common/api/cases/user_actions/operations/find.ts +++ b/x-pack/plugins/cases/common/api/cases/user_actions/operations/find.ts @@ -6,7 +6,7 @@ */ import * as rt from 'io-ts'; -import { CaseUserActionsResponseWithoutActionIdRt } from '../response'; +import { CaseUserActionsResponseRt } from '../response'; import { ActionTypes } from '../common'; import { NumberFromString } from '../../../saved_object'; @@ -36,7 +36,7 @@ export const UserActionFindRequestRt = rt.partial({ export type UserActionFindRequest = rt.TypeOf; export const UserActionFindResponseRt = rt.type({ - userActions: CaseUserActionsResponseWithoutActionIdRt, + userActions: CaseUserActionsResponseRt, page: rt.number, perPage: rt.number, total: rt.number, diff --git a/x-pack/plugins/cases/common/api/cases/user_actions/response.ts b/x-pack/plugins/cases/common/api/cases/user_actions/response.ts index 4d0a0ae3d34a4..b36cc7104001c 100644 --- a/x-pack/plugins/cases/common/api/cases/user_actions/response.ts +++ b/x-pack/plugins/cases/common/api/cases/user_actions/response.ts @@ -10,7 +10,7 @@ import * as rt from 'io-ts'; import type { ActionsRt, ActionTypeValues } from './common'; import { CaseUserActionInjectedIdsRt, - CaseUserActionSavedObjectIdsRt, + CaseUserActionInjectedDeprecatedIdsRt, UserActionCommonAttributesRt, } from './common'; import { CreateCaseUserActionRt } from './create_case'; @@ -59,24 +59,21 @@ const CaseUserActionBasicWithoutConnectorIdRt = rt.intersection([ UserActionCommonAttributesRt, ]); -const CaseUserActionResponseRt = rt.intersection([ +const CaseUserActionDeprecatedResponseRt = rt.intersection([ CaseUserActionBasicRt, - CaseUserActionSavedObjectIdsRt, + CaseUserActionInjectedDeprecatedIdsRt, ]); /** * This includes the comment_id but not the action_id or case_id */ -const CaseUserActionInjectedAttributesWithoutActionIdRt = rt.intersection([ +const CaseUserActionInjectedAttributesRt = rt.intersection([ CaseUserActionBasicRt, CaseUserActionInjectedIdsRt, ]); -/** - * Rename to CaseUserActionResponseRt when the UI is switching to the new user action _find API - */ -const CaseUserActionResponseWithoutActionIdRt = rt.intersection([ - CaseUserActionInjectedAttributesWithoutActionIdRt, +const CaseUserActionResponseRt = rt.intersection([ + CaseUserActionInjectedAttributesRt, rt.type({ id: rt.string, version: rt.string, @@ -85,9 +82,7 @@ const CaseUserActionResponseWithoutActionIdRt = rt.intersection([ export const CaseUserActionAttributesRt = CaseUserActionBasicRt; export const CaseUserActionsResponseRt = rt.array(CaseUserActionResponseRt); -export const CaseUserActionsResponseWithoutActionIdRt = rt.array( - CaseUserActionResponseWithoutActionIdRt -); +export const CaseUserActionsDeprecatedResponseRt = rt.array(CaseUserActionDeprecatedResponseRt); export type CaseUserActionAttributes = rt.TypeOf; export type CaseUserActionAttributesWithoutConnectorId = rt.TypeOf< @@ -95,12 +90,11 @@ export type CaseUserActionAttributesWithoutConnectorId = rt.TypeOf< >; export type CaseUserActionsResponse = rt.TypeOf; export type CaseUserActionResponse = rt.TypeOf; -export type CaseUserActionInjectedAttributesWithoutActionId = rt.TypeOf< - typeof CaseUserActionInjectedAttributesWithoutActionIdRt ->; -export type CaseUserActionsResponseWithoutActionId = rt.TypeOf< - typeof CaseUserActionsResponseWithoutActionIdRt +export type CaseUserActionsDeprecatedResponse = rt.TypeOf< + typeof CaseUserActionsDeprecatedResponseRt >; +export type CaseUserActionDeprecatedResponse = rt.TypeOf; +export type CaseUserActionInjectedAttributes = rt.TypeOf; export type UserAction = rt.TypeOf; export type UserActionTypes = ActionTypeValues; diff --git a/x-pack/plugins/cases/common/ui/types.ts b/x-pack/plugins/cases/common/ui/types.ts index f1193a2a49112..8231dd945bf9e 100644 --- a/x-pack/plugins/cases/common/ui/types.ts +++ b/x-pack/plugins/cases/common/ui/types.ts @@ -22,6 +22,7 @@ import type { SingleCaseMetricsResponse, CommentResponse, CaseResponse, + UserActionFindResponse, CommentResponseAlertsType, CasesFindResponse, CasesStatusResponse, @@ -77,6 +78,9 @@ export type AlertComment = SnakeToCamelCase; export type ExternalReferenceComment = SnakeToCamelCase; export type PersistableComment = SnakeToCamelCase; export type CaseUserActions = SnakeToCamelCase; +export type FindCaseUserActions = Omit, 'userActions'> & { + userActions: CaseUserActions[]; +}; export type CaseExternalService = SnakeToCamelCase; export type Case = Omit, 'comments'> & { comments: Comment[] }; export type Cases = Omit, 'cases'> & { cases: Case[] }; diff --git a/x-pack/plugins/cases/public/components/case_action_bar/actions.tsx b/x-pack/plugins/cases/public/components/case_action_bar/actions.tsx index bb6e323d433a0..b0697f9c962e7 100644 --- a/x-pack/plugins/cases/public/components/case_action_bar/actions.tsx +++ b/x-pack/plugins/cases/public/components/case_action_bar/actions.tsx @@ -13,7 +13,7 @@ import { useDeleteCases } from '../../containers/use_delete_cases'; import { ConfirmDeleteCaseModal } from '../confirm_delete_case'; import { PropertyActions } from '../property_actions'; import type { Case } from '../../../common/ui/types'; -import type { CaseService } from '../../containers/use_get_case_user_actions'; +import type { CaseService } from '../../containers/use_find_case_user_actions'; import { useAllCasesNavigation } from '../../common/navigation'; import { useCasesContext } from '../cases_context/use_cases_context'; import { useCasesToast } from '../../common/use_cases_toast'; diff --git a/x-pack/plugins/cases/public/components/case_action_bar/index.test.tsx b/x-pack/plugins/cases/public/components/case_action_bar/index.test.tsx index e458961db3424..81560f99e5427 100644 --- a/x-pack/plugins/cases/public/components/case_action_bar/index.test.tsx +++ b/x-pack/plugins/cases/public/components/case_action_bar/index.test.tsx @@ -19,14 +19,14 @@ import { noUpdateCasesPermissions, TestProviders, } from '../../common/mock'; -import { useGetCaseUserActions } from '../../containers/use_get_case_user_actions'; +import { useFindCaseUserActions } from '../../containers/use_find_case_user_actions'; import { useRefreshCaseViewPage } from '../case_view/use_on_refresh_case_view_page'; -jest.mock('../../containers/use_get_case_user_actions'); +jest.mock('../../containers/use_find_case_user_actions'); jest.mock('../case_view/use_on_refresh_case_view_page'); -const useGetCaseUserActionsMock = useGetCaseUserActions as jest.Mock; -const defaultUseGetCaseUserActions = { +const useFindCaseUserActionsMock = useFindCaseUserActions as jest.Mock; +const defaultUseFindCaseUserActions = { data: { caseUserActions: [...caseUserActions, getAlertUserAction()], caseServices: {}, @@ -54,7 +54,7 @@ describe('CaseActionBar', () => { beforeEach(() => { jest.clearAllMocks(); - useGetCaseUserActionsMock.mockReturnValue(defaultUseGetCaseUserActions); + useFindCaseUserActionsMock.mockReturnValue(defaultUseFindCaseUserActions); }); it('renders', () => { @@ -75,7 +75,7 @@ describe('CaseActionBar', () => { }); it('shows a loading bar when user actions are loaded', async () => { - useGetCaseUserActionsMock.mockReturnValue({ + useFindCaseUserActionsMock.mockReturnValue({ data: undefined, isLoading: true, }); diff --git a/x-pack/plugins/cases/public/components/case_action_bar/index.tsx b/x-pack/plugins/cases/public/components/case_action_bar/index.tsx index 3d68fcaa4d56d..d21427d579893 100644 --- a/x-pack/plugins/cases/public/components/case_action_bar/index.tsx +++ b/x-pack/plugins/cases/public/components/case_action_bar/index.tsx @@ -21,7 +21,7 @@ import type { Case } from '../../../common/ui/types'; import type { CaseStatuses } from '../../../common/api'; import * as i18n from '../case_view/translations'; import { Actions } from './actions'; -import { useGetCaseUserActions } from '../../containers/use_get_case_user_actions'; +import { useFindCaseUserActions } from '../../containers/use_find_case_user_actions'; import { StatusContextMenu } from './status_context_menu'; import { SyncAlertsSwitch } from '../case_settings/sync_alerts_switch'; import type { OnUpdateFields } from '../case_view/types'; @@ -68,7 +68,7 @@ const CaseActionBarComponent: React.FC = ({ [onUpdateField] ); - const { data: userActionsData, isLoading: isLoadingUserActions } = useGetCaseUserActions( + const { data: userActionsData, isLoading: isLoadingUserActions } = useFindCaseUserActions( caseData.id, caseData.connector.id ); diff --git a/x-pack/plugins/cases/public/components/case_view/case_view_page.test.tsx b/x-pack/plugins/cases/public/components/case_view/case_view_page.test.tsx index aff92e15c3f29..1dc62eeba4d97 100644 --- a/x-pack/plugins/cases/public/components/case_view/case_view_page.test.tsx +++ b/x-pack/plugins/cases/public/components/case_view/case_view_page.test.tsx @@ -19,7 +19,7 @@ import { basicCaseClosed, connectorsMock } from '../../containers/mock'; import type { UseGetCase } from '../../containers/use_get_case'; import { useGetCase } from '../../containers/use_get_case'; import { useGetCaseMetrics } from '../../containers/use_get_case_metrics'; -import { useGetCaseUserActions } from '../../containers/use_get_case_user_actions'; +import { useFindCaseUserActions } from '../../containers/use_find_case_user_actions'; import { useGetTags } from '../../containers/use_get_tags'; import { usePostPushToService } from '../../containers/use_post_push_to_service'; import { useUpdateCase } from '../../containers/use_update_case'; @@ -31,7 +31,7 @@ import { defaultGetCase, defaultGetCaseMetrics, defaultUpdateCaseState, - defaultUseGetCaseUserActions, + defaultUseFindCaseUserActions, } from './mocks'; import type { CaseViewPageProps } from './types'; import { userProfiles } from '../../containers/user_profiles/api.mock'; @@ -41,7 +41,7 @@ import { CASE_VIEW_PAGE_TABS } from '../../../common/types'; jest.mock('../../containers/use_get_action_license'); jest.mock('../../containers/use_update_case'); jest.mock('../../containers/use_get_case_metrics'); -jest.mock('../../containers/use_get_case_user_actions'); +jest.mock('../../containers/use_find_case_user_actions'); jest.mock('../../containers/use_get_tags'); jest.mock('../../containers/use_get_case'); jest.mock('../../containers/configure/use_connectors'); @@ -58,7 +58,7 @@ const useFetchCaseMock = useGetCase as jest.Mock; const useUrlParamsMock = useUrlParams as jest.Mock; const useCaseViewNavigationMock = useCaseViewNavigation as jest.Mock; const useUpdateCaseMock = useUpdateCase as jest.Mock; -const useGetCaseUserActionsMock = useGetCaseUserActions as jest.Mock; +const useFindCaseUserActionsMock = useFindCaseUserActions as jest.Mock; const useGetConnectorsMock = useGetConnectors as jest.Mock; const usePostPushToServiceMock = usePostPushToService as jest.Mock; const useGetCaseMetricsMock = useGetCaseMetrics as jest.Mock; @@ -100,7 +100,7 @@ describe('CaseViewPage', () => { jest.clearAllMocks(); useUpdateCaseMock.mockReturnValue(defaultUpdateCaseState); useGetCaseMetricsMock.mockReturnValue(defaultGetCaseMetrics); - useGetCaseUserActionsMock.mockReturnValue(defaultUseGetCaseUserActions); + useFindCaseUserActionsMock.mockReturnValue(defaultUseFindCaseUserActions); usePostPushToServiceMock.mockReturnValue({ isLoading: false, pushCaseToExternalService }); useGetConnectorsMock.mockReturnValue({ data: connectorsMock, isLoading: false }); useGetTagsMock.mockReturnValue({ data: [], isLoading: false }); @@ -249,10 +249,10 @@ describe('CaseViewPage', () => { }); it('should push updates on button click', async () => { - useGetCaseUserActionsMock.mockImplementation(() => ({ - ...defaultUseGetCaseUserActions, + useFindCaseUserActionsMock.mockImplementation(() => ({ + ...defaultUseFindCaseUserActions, data: { - ...defaultUseGetCaseUserActions.data, + ...defaultUseFindCaseUserActions.data, hasDataToPush: true, }, })); @@ -337,7 +337,7 @@ describe('CaseViewPage', () => { it('should show loading content when loading user actions', async () => { const useFetchAlertData = jest.fn().mockReturnValue([true]); - useGetCaseUserActionsMock.mockReturnValue({ + useFindCaseUserActionsMock.mockReturnValue({ data: undefined, isError: false, isLoading: true, @@ -391,10 +391,10 @@ describe('CaseViewPage', () => { it('should show the correct connector name on the push button', async () => { useGetConnectorsMock.mockImplementation(() => ({ data: connectorsMock, isLoading: false })); - useGetCaseUserActionsMock.mockImplementation(() => ({ - ...defaultUseGetCaseUserActions, + useFindCaseUserActionsMock.mockImplementation(() => ({ + ...defaultUseFindCaseUserActions, data: { - ...defaultUseGetCaseUserActions.data, + ...defaultUseFindCaseUserActions.data, hasDataToPush: true, }, })); diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx index 78afb00693423..bc6b1d7c0dc81 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.test.tsx @@ -19,7 +19,7 @@ import { CaseViewActivity } from './case_view_activity'; import { ConnectorTypes } from '../../../../common/api/connectors'; import type { Case } from '../../../../common'; import type { CaseViewProps } from '../types'; -import { useGetCaseUserActions } from '../../../containers/use_get_case_user_actions'; +import { useFindCaseUserActions } from '../../../containers/use_find_case_user_actions'; import { usePostPushToService } from '../../../containers/use_post_push_to_service'; import { useGetConnectors } from '../../../containers/configure/use_connectors'; import { useGetTags } from '../../../containers/use_get_tags'; @@ -27,7 +27,7 @@ import { useBulkGetUserProfiles } from '../../../containers/user_profiles/use_bu import { licensingMock } from '@kbn/licensing-plugin/public/mocks'; import { waitForComponentToUpdate } from '../../../common/test_utils'; -jest.mock('../../../containers/use_get_case_user_actions'); +jest.mock('../../../containers/use_find_case_user_actions'); jest.mock('../../../containers/configure/use_connectors'); jest.mock('../../../containers/use_post_push_to_service'); jest.mock('../../user_actions/timestamp', () => ({ @@ -73,7 +73,7 @@ const caseViewProps: CaseViewProps = { const fetchCaseUserActions = jest.fn(); const pushCaseToExternalService = jest.fn(); -const defaultUseGetCaseUserActions = { +const defaultUseFindCaseUserActions = { data: { caseUserActions: [...caseUserActions, getAlertUserAction()], caseServices: {}, @@ -91,14 +91,14 @@ export const caseProps = { fetchCaseMetrics: jest.fn(), }; -const useGetCaseUserActionsMock = useGetCaseUserActions as jest.Mock; +const useFindCaseUserActionsMock = useFindCaseUserActions as jest.Mock; const useGetConnectorsMock = useGetConnectors as jest.Mock; const usePostPushToServiceMock = usePostPushToService as jest.Mock; const useBulkGetUserProfilesMock = useBulkGetUserProfiles as jest.Mock; describe('Case View Page activity tab', () => { beforeAll(() => { - useGetCaseUserActionsMock.mockReturnValue(defaultUseGetCaseUserActions); + useFindCaseUserActionsMock.mockReturnValue(defaultUseFindCaseUserActions); useGetConnectorsMock.mockReturnValue({ data: connectorsMock, isLoading: false }); usePostPushToServiceMock.mockReturnValue({ isLoading: false, pushCaseToExternalService }); useBulkGetUserProfilesMock.mockReturnValue({ isLoading: false, data: new Map() }); @@ -126,7 +126,7 @@ describe('Case View Page activity tab', () => { expect(result.getByTestId('case-tags')).toBeTruthy(); expect(result.getByTestId('connector-edit-header')).toBeTruthy(); expect(result.getByTestId('case-view-status-action-button')).toBeTruthy(); - expect(useGetCaseUserActionsMock).toHaveBeenCalledWith(caseData.id, caseData.connector.id); + expect(useFindCaseUserActionsMock).toHaveBeenCalledWith(caseData.id, caseData.connector.id); await waitForComponentToUpdate(); }); @@ -143,7 +143,7 @@ describe('Case View Page activity tab', () => { expect(result.getByTestId('case-tags')).toBeTruthy(); expect(result.getByTestId('connector-edit-header')).toBeTruthy(); expect(result.queryByTestId('case-view-status-action-button')).not.toBeInTheDocument(); - expect(useGetCaseUserActionsMock).toHaveBeenCalledWith(caseData.id, caseData.connector.id); + expect(useFindCaseUserActionsMock).toHaveBeenCalledWith(caseData.id, caseData.connector.id); await waitForComponentToUpdate(); }); @@ -160,21 +160,21 @@ describe('Case View Page activity tab', () => { expect(result.getByTestId('case-tags')).toBeTruthy(); expect(result.getByTestId('connector-edit-header')).toBeTruthy(); expect(result.getByTestId('case-severity-selection')).toBeDisabled(); - expect(useGetCaseUserActionsMock).toHaveBeenCalledWith(caseData.id, caseData.connector.id); + expect(useFindCaseUserActionsMock).toHaveBeenCalledWith(caseData.id, caseData.connector.id); await waitForComponentToUpdate(); }); it('should show a loading when is fetching data is true and hide the user actions activity', () => { - useGetCaseUserActionsMock.mockReturnValue({ - ...defaultUseGetCaseUserActions, + useFindCaseUserActionsMock.mockReturnValue({ + ...defaultUseFindCaseUserActions, isFetching: true, isLoading: true, }); const result = appMockRender.render(); expect(result.getByTestId('case-view-loading-content')).toBeTruthy(); expect(result.queryByTestId('case-view-activity')).toBeFalsy(); - expect(useGetCaseUserActionsMock).toHaveBeenCalledWith(caseData.id, caseData.connector.id); + expect(useFindCaseUserActionsMock).toHaveBeenCalledWith(caseData.id, caseData.connector.id); }); it('should not render the assignees on basic license', () => { diff --git a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx index dc1db2651f5bf..6218c152e5c85 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/case_view_activity.tsx @@ -5,8 +5,6 @@ * 2.0. */ -/* eslint-disable complexity */ - import { EuiFlexGroup, EuiFlexItem, EuiLoadingContent } from '@elastic/eui'; import React, { useCallback, useMemo } from 'react'; import { isEqual, uniq } from 'lodash'; @@ -30,7 +28,7 @@ import * as i18n from '../translations'; import { getNoneConnector, normalizeActionConnector } from '../../configure_cases/utils'; import { getConnectorById } from '../../utils'; import { SeveritySidebarSelector } from '../../severity/sidebar_selector'; -import { useGetCaseUserActions } from '../../../containers/use_get_case_user_actions'; +import { useFindCaseUserActions } from '../../../containers/use_find_case_user_actions'; import { AssignUsers } from './assign_users'; import type { Assignee } from '../../user_profiles/types'; @@ -51,7 +49,7 @@ export const CaseViewActivity = ({ const { getCaseViewUrl } = useCaseViewNavigation(); const { caseAssignmentAuthorized, pushToServiceAuthorized } = useCasesFeatures(); - const { data: userActionsData, isLoading: isLoadingUserActions } = useGetCaseUserActions( + const { data: userActionsData, isLoading: isLoadingUserActions } = useFindCaseUserActions( caseData.id, caseData.connector.id ); diff --git a/x-pack/plugins/cases/public/components/case_view/index.test.tsx b/x-pack/plugins/cases/public/components/case_view/index.test.tsx index c745cd9d01c74..369947fcc2b87 100644 --- a/x-pack/plugins/cases/public/components/case_view/index.test.tsx +++ b/x-pack/plugins/cases/public/components/case_view/index.test.tsx @@ -25,7 +25,7 @@ import { useGetCaseMetrics } from '../../containers/use_get_case_metrics'; import { usePostPushToService } from '../../containers/use_post_push_to_service'; import { useKibana } from '../../common/lib/kibana'; -import { useGetCaseUserActions } from '../../containers/use_get_case_user_actions'; +import { useFindCaseUserActions } from '../../containers/use_find_case_user_actions'; import { useGetConnectors } from '../../containers/configure/use_connectors'; import type { AppMockRenderer } from '../../common/mock'; import { createAppMockRenderer } from '../../common/mock'; @@ -39,14 +39,14 @@ import { defaultGetCase, defaultGetCaseMetrics, defaultUpdateCaseState, - defaultUseGetCaseUserActions, + defaultUseFindCaseUserActions, } from './mocks'; import userEvent from '@testing-library/user-event'; jest.mock('../../containers/use_get_action_license'); jest.mock('../../containers/use_update_case'); jest.mock('../../containers/use_get_tags'); -jest.mock('../../containers/use_get_case_user_actions'); +jest.mock('../../containers/use_find_case_user_actions'); jest.mock('../../containers/use_get_case'); jest.mock('../../containers/use_get_case_metrics'); jest.mock('../../containers/configure/use_connectors'); @@ -61,7 +61,7 @@ jest.mock('../../containers/api'); const useFetchCaseMock = useGetCase as jest.Mock; const useGetCaseMetricsMock = useGetCaseMetrics as jest.Mock; const useUpdateCaseMock = useUpdateCase as jest.Mock; -const useGetCaseUserActionsMock = useGetCaseUserActions as jest.Mock; +const useFindCaseUserActionsMock = useFindCaseUserActions as jest.Mock; const useGetConnectorsMock = useGetConnectors as jest.Mock; const usePostPushToServiceMock = usePostPushToService as jest.Mock; const useKibanaMock = useKibana as jest.MockedFunction; @@ -93,7 +93,7 @@ describe('CaseView', () => { mockGetCase(); useGetCaseMetricsMock.mockReturnValue(defaultGetCaseMetrics); useUpdateCaseMock.mockReturnValue(defaultUpdateCaseState); - useGetCaseUserActionsMock.mockReturnValue(defaultUseGetCaseUserActions); + useFindCaseUserActionsMock.mockReturnValue(defaultUseFindCaseUserActions); usePostPushToServiceMock.mockReturnValue({ isLoading: false, pushCaseToExternalService: jest.fn(), diff --git a/x-pack/plugins/cases/public/components/case_view/mocks.ts b/x-pack/plugins/cases/public/components/case_view/mocks.ts index 1df9907d7f2e2..88069fe79cfe5 100644 --- a/x-pack/plugins/cases/public/components/case_view/mocks.ts +++ b/x-pack/plugins/cases/public/components/case_view/mocks.ts @@ -99,7 +99,7 @@ export const defaultUpdateCaseState = { updateCaseProperty: jest.fn(), }; -export const defaultUseGetCaseUserActions = { +export const defaultUseFindCaseUserActions = { data: { caseUserActions: [...caseUserActions, getAlertUserAction()], caseServices: {}, diff --git a/x-pack/plugins/cases/public/components/edit_connector/helpers.test.ts b/x-pack/plugins/cases/public/components/edit_connector/helpers.test.ts index 12503b6d223fc..a3c13c1213e64 100644 --- a/x-pack/plugins/cases/public/components/edit_connector/helpers.test.ts +++ b/x-pack/plugins/cases/public/components/edit_connector/helpers.test.ts @@ -78,8 +78,7 @@ function createConnectorUserAction(attributes: Partial = {} createdBy: { username: 'user', fullName: null, email: null }, createdAt: '2021-12-08T11:28:32.623Z', type: 'connector', - actionId: '', - caseId: '', + id: '', commentId: '', payload: { connector: { id: 'a', name: 'test', fields: defaultJiraFields, type: ConnectorTypes.jira }, diff --git a/x-pack/plugins/cases/public/components/edit_connector/index.tsx b/x-pack/plugins/cases/public/components/edit_connector/index.tsx index ec856672f23e4..25fc2a69ac4dc 100644 --- a/x-pack/plugins/cases/public/components/edit_connector/index.tsx +++ b/x-pack/plugins/cases/public/components/edit_connector/index.tsx @@ -32,7 +32,7 @@ import { getConnectorFieldsFromUserActions } from './helpers'; import * as i18n from './translations'; import { getConnectorById, getConnectorsFormValidators } from '../utils'; import { usePushToService } from '../use_push_to_service'; -import type { CaseServices } from '../../containers/use_get_case_user_actions'; +import type { CaseServices } from '../../containers/use_find_case_user_actions'; import { useApplicationCapabilities } from '../../common/lib/kibana'; import { useCasesContext } from '../cases_context/use_cases_context'; diff --git a/x-pack/plugins/cases/public/components/markdown_editor/plugins/lens/plugin.tsx b/x-pack/plugins/cases/public/components/markdown_editor/plugins/lens/plugin.tsx index eca83f9e45801..71750bbc2a515 100644 --- a/x-pack/plugins/cases/public/components/markdown_editor/plugins/lens/plugin.tsx +++ b/x-pack/plugins/cases/public/components/markdown_editor/plugins/lens/plugin.tsx @@ -321,32 +321,32 @@ const LensEditorComponent: LensEuiMarkdownEditorUiPlugin['editor'] = ({ return ( - - - + + + - - - - - - - - + + + + + + + + ), - 'data-test-subj': `user-action-alert-${userAction.type}-${userAction.action}-action-${userAction.actionId}`, + 'data-test-subj': `user-action-alert-${userAction.type}-${userAction.action}-action-${userAction.id}`, timestamp: , timelineAvatar: 'bell', actions: ( ), - 'data-test-subj': `user-action-alert-${userAction.type}-${userAction.action}-action-${userAction.actionId}`, + 'data-test-subj': `user-action-alert-${userAction.type}-${userAction.action}-action-${userAction.id}`, timestamp: , timelineAvatar: 'bell', actions: ( diff --git a/x-pack/plugins/cases/public/components/user_actions/common.tsx b/x-pack/plugins/cases/public/components/user_actions/common.tsx index c5d86a9ba5ad0..4d04f118bebe4 100644 --- a/x-pack/plugins/cases/public/components/user_actions/common.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/common.tsx @@ -28,7 +28,7 @@ const showMoveToReference = (action: UserAction, commentId: string | null): comm const CommentListActions: React.FC = React.memo(({ userAction, handleOutlineComment }) => ( - + {showMoveToReference(userAction.action, userAction.commentId) && ( @@ -69,13 +69,13 @@ export const createCommonUpdateUserActionBuilder = ({ /> ), event: label, - 'data-test-subj': `${userAction.type}-${userAction.action}-action-${userAction.actionId}`, + 'data-test-subj': `${userAction.type}-${userAction.action}-action-${userAction.id}`, timestamp: , timelineAvatar: icon, actions: ( - + {showMoveToReference(userAction.action, userAction.commentId) && ( diff --git a/x-pack/plugins/cases/public/components/user_actions/index.test.tsx b/x-pack/plugins/cases/public/components/user_actions/index.test.tsx index 3ff81914fecc1..4ba2143254065 100644 --- a/x-pack/plugins/cases/public/components/user_actions/index.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/index.test.tsx @@ -174,7 +174,7 @@ describe(`UserActions`, () => { wrapper .find( - `[data-test-subj="comment-update-action-${ourActions[1].actionId}"] [data-test-subj="move-to-link-${props.data.comments[0].id}"]` + `[data-test-subj="comment-update-action-${ourActions[1].id}"] [data-test-subj="move-to-link-${props.data.comments[0].id}"]` ) .first() .simulate('click'); diff --git a/x-pack/plugins/cases/public/components/user_actions/pushed.tsx b/x-pack/plugins/cases/public/components/user_actions/pushed.tsx index fd16b13b3f62d..e0352d7d96ccb 100644 --- a/x-pack/plugins/cases/public/components/user_actions/pushed.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/pushed.tsx @@ -14,7 +14,7 @@ import { Actions, NONE_CONNECTOR_ID } from '../../../common/api'; import type { UserActionBuilder, UserActionResponse } from './types'; import { createCommonUpdateUserActionBuilder } from './common'; import * as i18n from './translations'; -import type { CaseServices } from '../../containers/use_get_case_user_actions'; +import type { CaseServices } from '../../containers/use_find_case_user_actions'; import type { CaseExternalService } from '../../containers/types'; const getPushInfo = ( diff --git a/x-pack/plugins/cases/public/components/user_actions/severity.tsx b/x-pack/plugins/cases/public/components/user_actions/severity.tsx index 3878e046adb61..18760b18d6f05 100644 --- a/x-pack/plugins/cases/public/components/user_actions/severity.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/severity.tsx @@ -23,11 +23,11 @@ const getLabelTitle = (userAction: UserActionResponse) => { {SET_SEVERITY_TO} - + {severityData.label} diff --git a/x-pack/plugins/cases/public/components/user_actions/status.test.tsx b/x-pack/plugins/cases/public/components/user_actions/status.test.tsx index 037a2e1756419..9ccf28223af31 100644 --- a/x-pack/plugins/cases/public/components/user_actions/status.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/status.test.tsx @@ -44,6 +44,7 @@ describe('createStatusUserActionBuilder ', () => { ); + expect(screen.getByTestId('status-update-user-action-status-title')).toBeInTheDocument(); expect(screen.getByText('marked case as')).toBeInTheDocument(); expect(screen.getByText(label)).toBeInTheDocument(); }); diff --git a/x-pack/plugins/cases/public/components/user_actions/status.tsx b/x-pack/plugins/cases/public/components/user_actions/status.tsx index a1c8e2210b322..936999fbffe31 100644 --- a/x-pack/plugins/cases/public/components/user_actions/status.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/status.tsx @@ -24,7 +24,7 @@ const getLabelTitle = (userAction: UserActionResponse) => { {i18n.MARKED_CASE_AS} diff --git a/x-pack/plugins/cases/public/components/user_actions/types.ts b/x-pack/plugins/cases/public/components/user_actions/types.ts index 9f8fdd65ff6a7..9bf750437d29d 100644 --- a/x-pack/plugins/cases/public/components/user_actions/types.ts +++ b/x-pack/plugins/cases/public/components/user_actions/types.ts @@ -10,7 +10,7 @@ import type { UserProfileWithAvatar } from '@kbn/user-profile-components'; import type { SnakeToCamelCase } from '../../../common/types'; import type { ActionTypes, UserActionWithResponse } from '../../../common/api'; import type { Case, CaseUserActions, Comment, UseFetchAlertData } from '../../containers/types'; -import type { CaseServices } from '../../containers/use_get_case_user_actions'; +import type { CaseServices } from '../../containers/use_find_case_user_actions'; import type { AddCommentRefObject } from '../add_comment'; import type { UserActionMarkdownRefObject } from './markdown_form'; import type { CasesNavigation } from '../links'; diff --git a/x-pack/plugins/cases/public/containers/__mocks__/api.ts b/x-pack/plugins/cases/public/containers/__mocks__/api.ts index f16c0260533a7..431ce6626e2ea 100644 --- a/x-pack/plugins/cases/public/containers/__mocks__/api.ts +++ b/x-pack/plugins/cases/public/containers/__mocks__/api.ts @@ -10,8 +10,8 @@ import type { Cases, Case, CasesStatus, - CaseUserActions, FetchCasesProps, + FindCaseUserActions, } from '../types'; import { SortFieldCase } from '../types'; import { @@ -23,9 +23,9 @@ import { basicCasePost, basicResolvedCase, casesStatus, - caseUserActions, pushedCase, tags, + findCaseUserActionsResponse, } from '../mock'; import type { CaseUpdateRequest, ResolvedCase } from '../../../common/ui/types'; import { SeverityAll } from '../../../common/ui/types'; @@ -64,10 +64,10 @@ export const getTags = async (signal: AbortSignal): Promise => Promise export const findAssignees = async (): Promise => userProfiles; -export const getCaseUserActions = async ( +export const findCaseUserActions = async ( caseId: string, signal: AbortSignal -): Promise => Promise.resolve(caseUserActions); +): Promise => Promise.resolve(findCaseUserActionsResponse); export const getCases = async ({ filterOptions = { diff --git a/x-pack/plugins/cases/public/containers/api.test.tsx b/x-pack/plugins/cases/public/containers/api.test.tsx index b06befcc54929..c744fc36335cc 100644 --- a/x-pack/plugins/cases/public/containers/api.test.tsx +++ b/x-pack/plugins/cases/public/containers/api.test.tsx @@ -14,6 +14,7 @@ import { CASES_URL, INTERNAL_BULK_CREATE_ATTACHMENTS_URL, SECURITY_SOLUTION_OWNER, + MAX_DOCS_PER_PAGE, } from '../../common/constants'; import { @@ -22,7 +23,7 @@ import { getActionLicense, getCase, getCases, - getCaseUserActions, + findCaseUserActions, getTags, patchCase, updateCases, @@ -45,15 +46,13 @@ import { casesStatus, casesSnake, cases, - caseUserActions, pushedCase, tags, - caseUserActionsSnake, + findCaseUserActionsResponse, casesStatusSnake, basicCaseId, caseWithRegisteredAttachmentsSnake, caseWithRegisteredAttachments, - caseUserActionsWithRegisteredAttachments, caseUserActionsWithRegisteredAttachmentsSnake, } from './mock'; @@ -457,29 +456,39 @@ describe('Cases API', () => { }); }); - describe('getCaseUserActions', () => { + describe('findCaseUserActions', () => { + const findCaseUserActionsSnake = { + page: 1, + perPage: 1000, + total: 20, + userActions: [...caseUserActionsWithRegisteredAttachmentsSnake], + }; + beforeEach(() => { fetchMock.mockClear(); - fetchMock.mockResolvedValue(caseUserActionsSnake); + fetchMock.mockResolvedValue(findCaseUserActionsSnake); }); it('should be called with correct check url, method, signal', async () => { - await getCaseUserActions(basicCase.id, abortCtrl.signal); - expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/user_actions`, { + await findCaseUserActions(basicCase.id, abortCtrl.signal); + expect(fetchMock).toHaveBeenCalledWith(`${CASES_URL}/${basicCase.id}/user_actions/_find`, { method: 'GET', signal: abortCtrl.signal, + query: { + perPage: MAX_DOCS_PER_PAGE, + }, }); }); it('should return correct response', async () => { - const resp = await getCaseUserActions(basicCase.id, abortCtrl.signal); - expect(resp).toEqual(caseUserActions); + const resp = await findCaseUserActions(basicCase.id, abortCtrl.signal); + expect(resp).toEqual(findCaseUserActionsResponse); }); it('should not covert to camel case registered attachments', async () => { - fetchMock.mockResolvedValue(caseUserActionsWithRegisteredAttachmentsSnake); - const resp = await getCaseUserActions(basicCase.id, abortCtrl.signal); - expect(resp).toEqual(caseUserActionsWithRegisteredAttachments); + fetchMock.mockResolvedValue(findCaseUserActionsSnake); + const resp = await findCaseUserActions(basicCase.id, abortCtrl.signal); + expect(resp).toEqual(findCaseUserActionsResponse); }); }); diff --git a/x-pack/plugins/cases/public/containers/api.ts b/x-pack/plugins/cases/public/containers/api.ts index b31bc0e65446c..9c4f1a07ee62f 100644 --- a/x-pack/plugins/cases/public/containers/api.ts +++ b/x-pack/plugins/cases/public/containers/api.ts @@ -12,6 +12,7 @@ import type { CaseUpdateRequest, FetchCasesProps, ResolvedCase, + FindCaseUserActions, } from '../../common/ui/types'; import { SeverityAll, SortFieldCase, StatusAll } from '../../common/ui/types'; import type { @@ -21,7 +22,7 @@ import type { CaseResponse, CaseResolveResponse, CasesResponse, - CaseUserActionsResponse, + UserActionFindResponse, CommentRequest, User, SingleCaseMetricsResponse, @@ -33,7 +34,7 @@ import { getCaseDetailsUrl, getCaseDetailsMetricsUrl, getCasePushUrl, - getCaseUserActionUrl, + getCaseFindUserActionsUrl, getCaseCommentDeleteUrl, } from '../../common/api'; import { @@ -41,6 +42,7 @@ import { CASE_TAGS_URL, CASES_URL, INTERNAL_BULK_CREATE_ATTACHMENTS_URL, + MAX_DOCS_PER_PAGE, } from '../../common/constants'; import { getAllConnectorTypesUrl } from '../../common/utils/connectors_api'; @@ -144,21 +146,27 @@ export const getSingleCaseMetrics = async ( ); }; -export const getCaseUserActions = async ( +export const findCaseUserActions = async ( caseId: string, signal: AbortSignal -): Promise => { - const response = await KibanaServices.get().http.fetch( - getCaseUserActionUrl(caseId), +): Promise => { + const response = await KibanaServices.get().http.fetch( + getCaseFindUserActionsUrl(caseId), { method: 'GET', signal, + query: { + perPage: MAX_DOCS_PER_PAGE, + }, } ); - return convertUserActionsToCamelCase( - decodeCaseUserActionsResponse(response) - ) as CaseUserActions[]; + return { + ...response, + userActions: convertUserActionsToCamelCase( + decodeCaseUserActionsResponse(response.userActions) + ) as CaseUserActions[], + }; }; export const getCases = async ({ diff --git a/x-pack/plugins/cases/public/containers/mock.ts b/x-pack/plugins/cases/public/containers/mock.ts index cdaa9d56aea96..5cadec4818457 100644 --- a/x-pack/plugins/cases/public/containers/mock.ts +++ b/x-pack/plugins/cases/public/containers/mock.ts @@ -15,6 +15,7 @@ import type { CasesMetrics, ExternalReferenceComment, PersistableComment, + FindCaseUserActions, } from '../../common/ui/types'; import type { CaseConnector, @@ -597,7 +598,8 @@ export const getUserAction = ( ): CaseUserActions => { const commonProperties = { ...basicAction, - actionId: `${type}-${action}`, + id: `${type}-${action}`, + version: 'WzQ3LDFc', action, }; @@ -742,24 +744,24 @@ export const caseUserActionsWithRegisteredAttachmentsSnake: CaseUserActionsRespo { created_at: basicCreatedAt, created_by: elasticUserSnake, - case_id: 'case-with-registered-attachment', comment_id: null, owner: SECURITY_SOLUTION_OWNER, type: 'comment', action: 'create', - action_id: 'create-comment-id', + id: 'create-comment-id', payload: { comment: externalReferenceAttachmentSnake }, + version: 'WzQ3LDFc', }, { created_at: basicCreatedAt, created_by: elasticUserSnake, - case_id: 'case-with-registered-attachment', comment_id: null, owner: SECURITY_SOLUTION_OWNER, type: 'comment', action: 'create', - action_id: 'create-comment-id', + id: 'create-comment-id', payload: { comment: persistableStateAttachmentSnake }, + version: 'WzQ3LDFc', }, ]; @@ -779,7 +781,7 @@ export const getAlertUserAction = ( overrides?: Record ): SnakeToCamelCase> => ({ ...getUserAction(ActionTypes.comment, Actions.create), - actionId: 'alert-action-id', + id: 'alert-action-id', commentId: 'alert-comment-id', type: ActionTypes.comment, payload: { @@ -801,7 +803,7 @@ export const getMultipleAlertsUserAction = ( overrides?: Record ): SnakeToCamelCase> => ({ ...getUserAction(ActionTypes.comment, Actions.create), - actionId: 'alert-action-id', + id: 'alert-action-id', commentId: 'alert-comment-id', type: ActionTypes.comment, payload: { @@ -823,7 +825,7 @@ export const getHostIsolationUserAction = ( overrides?: Record ): SnakeToCamelCase> => ({ ...getUserAction(ActionTypes.comment, Actions.create), - actionId: 'isolate-action-id', + id: 'isolate-action-id', type: ActionTypes.comment, commentId: 'isolate-comment-id', payload: { @@ -848,27 +850,34 @@ export const caseUserActionsWithRegisteredAttachments: CaseUserActions[] = [ { createdAt: basicCreatedAt, createdBy: elasticUser, - caseId: 'case-with-registered-attachment', commentId: null, owner: SECURITY_SOLUTION_OWNER, type: 'comment', action: 'create', - actionId: 'create-comment-id', + id: 'create-comment-id', payload: { comment: externalReferenceAttachment }, + version: 'WzQ3LDFc', }, { createdAt: basicCreatedAt, createdBy: elasticUser, - caseId: 'case-with-registered-attachment', commentId: null, owner: SECURITY_SOLUTION_OWNER, type: 'comment', action: 'create', - actionId: 'create-comment-id', + id: 'create-comment-id', payload: { comment: persistableStateAttachment }, + version: 'WzQ3LDFc', }, ]; +export const findCaseUserActionsResponse: FindCaseUserActions = { + page: 1, + perPage: 1000, + total: 20, + userActions: [...caseUserActionsWithRegisteredAttachments], +}; + // components tests export const useGetCasesMockState = { data: allCases, @@ -887,7 +896,7 @@ export const getExternalReferenceUserAction = ( overrides?: Record ): SnakeToCamelCase> => ({ ...getUserAction(ActionTypes.comment, Actions.create), - actionId: 'external-reference-action-id', + id: 'external-reference-action-id', type: ActionTypes.comment, commentId: 'external-reference-comment-id', payload: { @@ -920,7 +929,7 @@ export const getPersistableStateUserAction = ( overrides?: Record ): SnakeToCamelCase> => ({ ...getUserAction(ActionTypes.comment, Actions.create), - actionId: 'persistable-state-action-id', + id: 'persistable-state-action-id', type: ActionTypes.comment, commentId: 'persistable-state-comment-id', payload: { diff --git a/x-pack/plugins/cases/public/containers/use_get_case_user_actions.test.tsx b/x-pack/plugins/cases/public/containers/use_find_case_user_actions.test.tsx similarity index 87% rename from x-pack/plugins/cases/public/containers/use_get_case_user_actions.test.tsx rename to x-pack/plugins/cases/public/containers/use_find_case_user_actions.test.tsx index 45e92fac48bfe..5b98b71468c6f 100644 --- a/x-pack/plugins/cases/public/containers/use_get_case_user_actions.test.tsx +++ b/x-pack/plugins/cases/public/containers/use_find_case_user_actions.test.tsx @@ -6,8 +6,8 @@ */ import { renderHook, act } from '@testing-library/react-hooks'; -import type { UseGetCaseUserActions } from './use_get_case_user_actions'; -import { getPushedInfo, useGetCaseUserActions } from './use_get_case_user_actions'; +import type { UseFindCaseUserActions } from './use_find_case_user_actions'; +import { getPushedInfo, useFindCaseUserActions } from './use_find_case_user_actions'; import { basicCase, basicPush, @@ -16,6 +16,7 @@ import { getJiraConnector, getUserAction, jiraFields, + findCaseUserActionsResponse, } from './mock'; import { Actions } from '../../common/api'; import React from 'react'; @@ -38,16 +39,16 @@ const wrapper: React.FC = ({ children }) => ( {children} ); -describe('useGetCaseUserActions', () => { +describe('useFindCaseUserActions', () => { beforeEach(() => { jest.clearAllMocks(); jest.restoreAllMocks(); }); - it('returns proper state on getCaseUserActions', async () => { + it('returns proper state on findCaseUserActions', async () => { await act(async () => { - const { result } = renderHook( - () => useGetCaseUserActions(basicCase.id, basicCase.connector.id), + const { result } = renderHook( + () => useFindCaseUserActions(basicCase.id, basicCase.connector.id), { wrapper } ); await waitFor(() => { @@ -55,8 +56,8 @@ describe('useGetCaseUserActions', () => { expect.objectContaining({ ...initialData, data: { - caseUserActions, caseServices: {}, + caseUserActions: [...findCaseUserActionsResponse.userActions], hasDataToPush: true, participants: [elasticUser], profileUids: new Set(), @@ -71,13 +72,13 @@ describe('useGetCaseUserActions', () => { }); it('shows a toast error when the API returns an error', async () => { - const spy = jest.spyOn(api, 'getCaseUserActions').mockRejectedValue(new Error("C'est la vie")); + const spy = jest.spyOn(api, 'findCaseUserActions').mockRejectedValue(new Error("C'est la vie")); const addError = jest.fn(); (useToasts as jest.Mock).mockReturnValue({ addError }); - const { waitForNextUpdate } = renderHook( - () => useGetCaseUserActions(basicCase.id, basicCase.connector.id), + const { waitForNextUpdate } = renderHook( + () => useFindCaseUserActions(basicCase.id, basicCase.connector.id), { wrapper } ); await waitForNextUpdate(); @@ -87,17 +88,18 @@ describe('useGetCaseUserActions', () => { describe('getProfileUids', () => { it('aggregates the uids from the createdBy field of a user action', async () => { - jest - .spyOn(api, 'getCaseUserActions') - .mockReturnValue( - Promise.resolve([ - getUserAction('pushed', Actions.add, { createdBy: { profileUid: '456' } }), - ]) - ); + jest.spyOn(api, 'findCaseUserActions').mockReturnValue( + Promise.resolve({ + page: 1, + perPage: 1000, + total: 20, + userActions: [getUserAction('pushed', Actions.add, { createdBy: { profileUid: '456' } })], + }) + ); await act(async () => { - const { result } = renderHook( - () => useGetCaseUserActions(basicCase.id, basicCase.connector.id), + const { result } = renderHook( + () => useFindCaseUserActions(basicCase.id, basicCase.connector.id), { wrapper } ); @@ -112,17 +114,22 @@ describe('useGetCaseUserActions', () => { }); it('aggregates the uids from a push', async () => { - jest.spyOn(api, 'getCaseUserActions').mockReturnValue( - Promise.resolve([ - getUserAction('pushed', Actions.add, { - payload: { externalService: { pushedBy: { profileUid: '123' } } }, - }), - ]) + jest.spyOn(api, 'findCaseUserActions').mockReturnValue( + Promise.resolve({ + page: 1, + perPage: 1000, + total: 20, + userActions: [ + getUserAction('pushed', Actions.add, { + payload: { externalService: { pushedBy: { profileUid: '123' } } }, + }), + ], + }) ); await act(async () => { - const { result } = renderHook( - () => useGetCaseUserActions(basicCase.id, basicCase.connector.id), + const { result } = renderHook( + () => useFindCaseUserActions(basicCase.id, basicCase.connector.id), { wrapper } ); @@ -137,15 +144,18 @@ describe('useGetCaseUserActions', () => { }); it('aggregates the uids from an assignment add user action', async () => { - jest - .spyOn(api, 'getCaseUserActions') - .mockReturnValue( - Promise.resolve([...caseUserActions, getUserAction('assignees', Actions.add)]) - ); + jest.spyOn(api, 'findCaseUserActions').mockReturnValue( + Promise.resolve({ + page: 1, + perPage: 1000, + total: 20, + userActions: [...caseUserActions, getUserAction('assignees', Actions.add)], + }) + ); await act(async () => { - const { result } = renderHook( - () => useGetCaseUserActions(basicCase.id, basicCase.connector.id), + const { result } = renderHook( + () => useFindCaseUserActions(basicCase.id, basicCase.connector.id), { wrapper } ); @@ -161,19 +171,22 @@ describe('useGetCaseUserActions', () => { }); it('ignores duplicate uids', async () => { - jest - .spyOn(api, 'getCaseUserActions') - .mockReturnValue( - Promise.resolve([ + jest.spyOn(api, 'findCaseUserActions').mockReturnValue( + Promise.resolve({ + page: 1, + perPage: 1000, + total: 20, + userActions: [ ...caseUserActions, getUserAction('assignees', Actions.add), getUserAction('assignees', Actions.add), - ]) - ); + ], + }) + ); await act(async () => { - const { result } = renderHook( - () => useGetCaseUserActions(basicCase.id, basicCase.connector.id), + const { result } = renderHook( + () => useFindCaseUserActions(basicCase.id, basicCase.connector.id), { wrapper } ); @@ -189,15 +202,18 @@ describe('useGetCaseUserActions', () => { }); it('aggregates the uids from an assignment delete user action', async () => { - jest - .spyOn(api, 'getCaseUserActions') - .mockReturnValue( - Promise.resolve([...caseUserActions, getUserAction('assignees', Actions.delete)]) - ); + jest.spyOn(api, 'findCaseUserActions').mockReturnValue( + Promise.resolve({ + page: 1, + perPage: 1000, + total: 20, + userActions: [...caseUserActions, getUserAction('assignees', Actions.delete)], + }) + ); await act(async () => { - const { result } = renderHook( - () => useGetCaseUserActions(basicCase.id, basicCase.connector.id), + const { result } = renderHook( + () => useFindCaseUserActions(basicCase.id, basicCase.connector.id), { wrapper } ); diff --git a/x-pack/plugins/cases/public/containers/use_get_case_user_actions.tsx b/x-pack/plugins/cases/public/containers/use_find_case_user_actions.tsx similarity index 93% rename from x-pack/plugins/cases/public/containers/use_get_case_user_actions.tsx rename to x-pack/plugins/cases/public/containers/use_find_case_user_actions.tsx index 2714e7ef3e9b1..46236ed36be3d 100644 --- a/x-pack/plugins/cases/public/containers/use_get_case_user_actions.tsx +++ b/x-pack/plugins/cases/public/containers/use_find_case_user_actions.tsx @@ -12,7 +12,7 @@ import { useQuery } from '@tanstack/react-query'; import type { CaseUserActions, CaseExternalService } from '../../common/ui/types'; import type { CaseConnector } from '../../common/api'; import { ActionTypes, NONE_CONNECTOR_ID } from '../../common/api'; -import { getCaseUserActions } from './api'; +import { findCaseUserActions } from './api'; import { isPushedUserAction, isConnectorUserAction, @@ -235,18 +235,21 @@ export const getProfileUids = (userActions: CaseUserActions[]) => { return uids; }; -export const useGetCaseUserActions = (caseId: string, caseConnectorId: string) => { +export const useFindCaseUserActions = (caseId: string, caseConnectorId: string) => { const toasts = useToasts(); const abortCtrlRef = new AbortController(); + return useQuery( casesQueriesKeys.userActions(caseId, caseConnectorId), async () => { - const response = await getCaseUserActions(caseId, abortCtrlRef.signal); - const participants = !isEmpty(response) - ? uniqBy('createdBy.username', response).map((cau) => cau.createdBy) + const response = await findCaseUserActions(caseId, abortCtrlRef.signal); + const participants = !isEmpty(response.userActions) + ? uniqBy('createdBy.username', response.userActions).map((cau) => cau.createdBy) : []; - const caseUserActions = !isEmpty(response) ? response : []; + const caseUserActions: CaseUserActions[] = !isEmpty(response.userActions) + ? response.userActions + : []; const pushedInfo = getPushedInfo(caseUserActions, caseConnectorId); const profileUids = getProfileUids(caseUserActions); @@ -270,4 +273,4 @@ export const useGetCaseUserActions = (caseId: string, caseConnectorId: string) = ); }; -export type UseGetCaseUserActions = ReturnType; +export type UseFindCaseUserActions = ReturnType; diff --git a/x-pack/plugins/cases/server/client/cases/mock.ts b/x-pack/plugins/cases/server/client/cases/mock.ts index 3d10e459eae8a..48ece730f3ead 100644 --- a/x-pack/plugins/cases/server/client/cases/mock.ts +++ b/x-pack/plugins/cases/server/client/cases/mock.ts @@ -7,9 +7,9 @@ import type { CommentResponse, - CaseUserActionsResponse, CommentResponseAlertsType, ConnectorMappingsAttributes, + CaseUserActionsDeprecatedResponse, } from '../../../common/api'; import { CommentType, @@ -260,7 +260,7 @@ export const mappings: ConnectorMappingsAttributes[] = [ }, ]; -export const userActions: CaseUserActionsResponse = [ +export const userActions: CaseUserActionsDeprecatedResponse = [ { action: Actions.create, type: 'create_case', diff --git a/x-pack/plugins/cases/server/client/cases/utils.ts b/x-pack/plugins/cases/server/client/cases/utils.ts index 954b48cb2d1da..06d2f1da63629 100644 --- a/x-pack/plugins/cases/server/client/cases/utils.ts +++ b/x-pack/plugins/cases/server/client/cases/utils.ts @@ -14,7 +14,6 @@ import type { ActionConnector, CaseFullExternalService, CaseResponse, - CaseUserActionsResponse, CommentResponse, User, CaseAttributes, @@ -22,6 +21,7 @@ import type { ConnectorMappingsAttributes, CaseField, ThirdPartyField, + CaseUserActionsDeprecatedResponse, } from '../../../common/api'; import { CommentType, ActionTypes, CaseStatuses } from '../../../common/api'; import type { CasesClientGetAlertsResponse } from '../alerts/types'; @@ -33,7 +33,7 @@ import * as i18n from './translations'; interface CreateIncidentArgs { theCase: CaseResponse; - userActions: CaseUserActionsResponse; + userActions: CaseUserActionsDeprecatedResponse; connector: ActionConnector; alerts: CasesClientGetAlertsResponse; casesConnectors: CasesConnectorsMap; @@ -54,7 +54,7 @@ type LatestPushInfo = { index: number; pushedInfo: CaseFullExternalService } | n export const getLatestPushInfo = ( connectorId: string, - userActions: CaseUserActionsResponse + userActions: CaseUserActionsDeprecatedResponse ): LatestPushInfo => { for (const [index, action] of [...userActions].reverse().entries()) { if (isPushedUserAction(action) && connectorId === action.payload.externalService.connector_id) { @@ -238,7 +238,7 @@ export const formatComments = ({ }: { theCase: CaseResponse; latestPushInfo: LatestPushInfo; - userActions: CaseUserActionsResponse; + userActions: CaseUserActionsDeprecatedResponse; spaceId: string; userProfiles?: Map; publicBaseUrl?: IBasePath['publicBaseUrl']; diff --git a/x-pack/plugins/cases/server/client/metrics/lifespan.test.ts b/x-pack/plugins/cases/server/client/metrics/lifespan.test.ts index 1488a09e5350e..808b6f334e15f 100644 --- a/x-pack/plugins/cases/server/client/metrics/lifespan.test.ts +++ b/x-pack/plugins/cases/server/client/metrics/lifespan.test.ts @@ -6,7 +6,7 @@ */ import type { SavedObject } from '@kbn/core/server'; -import type { CaseUserActionInjectedAttributesWithoutActionId } from '../../../common/api'; +import type { CaseUserActionInjectedAttributes } from '../../../common/api'; import { CaseStatuses } from '../../../common/api'; import { getStatusInfo } from './lifespan'; import { createStatusChangeSavedObject } from './test_utils/lifespan'; @@ -120,7 +120,7 @@ describe('lifespan', () => { [ { attributes: { payload: { hello: 1, status: CaseStatuses.closed }, type: 'status' }, - } as unknown as SavedObject, + } as unknown as SavedObject, ], new Date(0) ); @@ -133,7 +133,7 @@ describe('lifespan', () => { [ { attributes: { payload: { status: CaseStatuses.closed }, type: 'awesome' }, - } as unknown as SavedObject, + } as unknown as SavedObject, ], new Date(0) ); @@ -149,7 +149,7 @@ describe('lifespan', () => { payload: { status: CaseStatuses.closed, created_at: 'blah' }, type: 'status', }, - } as unknown as SavedObject, + } as unknown as SavedObject, ], new Date(0) ); diff --git a/x-pack/plugins/cases/server/client/metrics/lifespan.ts b/x-pack/plugins/cases/server/client/metrics/lifespan.ts index 1577a59d29490..a78e5397b7a13 100644 --- a/x-pack/plugins/cases/server/client/metrics/lifespan.ts +++ b/x-pack/plugins/cases/server/client/metrics/lifespan.ts @@ -7,7 +7,7 @@ import type { SavedObject } from '@kbn/core/server'; import type { - CaseUserActionInjectedAttributesWithoutActionId, + CaseUserActionInjectedAttributes, SingleCaseMetricsResponse, StatusInfo, StatusUserAction, @@ -83,7 +83,7 @@ interface StatusCalculations { } export function getStatusInfo( - statusUserActions: Array>, + statusUserActions: Array>, caseOpenTimestamp: Date ): StatusInfo { const accStatusInfo = statusUserActions.reduce( @@ -138,7 +138,7 @@ export function getStatusInfo( } function isValidStatusChangeUserAction( - attributes: CaseUserActionInjectedAttributesWithoutActionId, + attributes: CaseUserActionInjectedAttributes, newStatusChangeTimestamp: Date ): attributes is UserActionWithResponse { return StatusUserActionRt.is(attributes) && isDateValid(newStatusChangeTimestamp); diff --git a/x-pack/plugins/cases/server/client/metrics/test_utils/lifespan.ts b/x-pack/plugins/cases/server/client/metrics/test_utils/lifespan.ts index 810e157403101..62593e39e7d5c 100644 --- a/x-pack/plugins/cases/server/client/metrics/test_utils/lifespan.ts +++ b/x-pack/plugins/cases/server/client/metrics/test_utils/lifespan.ts @@ -6,15 +6,12 @@ */ import type { SavedObject } from '@kbn/core/server'; -import type { - CaseStatuses, - CaseUserActionInjectedAttributesWithoutActionId, -} from '../../../../common/api'; +import type { CaseStatuses, CaseUserActionInjectedAttributes } from '../../../../common/api'; export function createStatusChangeSavedObject( status: CaseStatuses, createdAt: Date -): SavedObject { +): SavedObject { return { references: [], id: '', diff --git a/x-pack/plugins/cases/server/client/user_actions/client.ts b/x-pack/plugins/cases/server/client/user_actions/client.ts index 00879c3b62b82..7a091cb43a0d2 100644 --- a/x-pack/plugins/cases/server/client/user_actions/client.ts +++ b/x-pack/plugins/cases/server/client/user_actions/client.ts @@ -7,8 +7,8 @@ import type { GetCaseConnectorsResponse, - CaseUserActionsResponse, UserActionFindResponse, + CaseUserActionsDeprecatedResponse, } from '../../../common/api'; import type { CasesClientArgs } from '../types'; import { get } from './get'; @@ -25,7 +25,7 @@ export interface UserActionsSubClient { /** * Retrieves all user actions for a particular case. */ - getAll(params: UserActionGet): Promise; + getAll(params: UserActionGet): Promise; /** * Retrieves all the connectors used within a given case */ diff --git a/x-pack/plugins/cases/server/client/user_actions/connectors.ts b/x-pack/plugins/cases/server/client/user_actions/connectors.ts index 0102aac887bf1..d3079d466e662 100644 --- a/x-pack/plugins/cases/server/client/user_actions/connectors.ts +++ b/x-pack/plugins/cases/server/client/user_actions/connectors.ts @@ -13,7 +13,7 @@ import type { SavedObject } from '@kbn/core-saved-objects-common/src/server_type import type { GetCaseConnectorsResponse, CaseConnector, - CaseUserActionInjectedAttributesWithoutActionId, + CaseUserActionInjectedAttributes, CaseExternalServiceBasic, } from '../../../common/api'; import { GetCaseConnectorsResponseRt } from '../../../common/api'; @@ -73,7 +73,7 @@ const checkConnectorsAuthorization = async ({ authorization, }: { connectors: CaseConnectorActivity[]; - latestUserAction?: SavedObject; + latestUserAction?: SavedObject; authorization: PublicMethodsOf; }) => { const entities: OwnerEntity[] = latestUserAction @@ -124,7 +124,7 @@ const getConnectorsInfo = async ({ }: { caseId: string; connectors: CaseConnectorActivity[]; - latestUserAction?: SavedObject; + latestUserAction?: SavedObject; actionsClient: PublicMethodsOf; userActionService: CaseUserActionService; }): Promise => { @@ -206,7 +206,7 @@ const getPushDetails = (activity: CaseConnectorActivity[]) => { }; const getExternalServiceFromSavedObject = ( - savedObject: SavedObject | undefined + savedObject: SavedObject | undefined ): CaseExternalServiceBasic | undefined => { if (savedObject != null && isPushedUserAction(savedObject.attributes)) { return savedObject.attributes.payload.externalService; @@ -230,7 +230,7 @@ const isDateValid = (date: Date): boolean => { }; const getConnectorInfoFromSavedObject = ( - savedObject: SavedObject | undefined + savedObject: SavedObject | undefined ): CaseConnector | undefined => { if ( savedObject != null && @@ -250,7 +250,7 @@ const createConnectorInfoResult = ({ actionConnectors: ActionResult[]; connectors: CaseConnectorActivity[]; pushInfo: Map; - latestUserAction?: SavedObject; + latestUserAction?: SavedObject; }) => { const results: GetCaseConnectorsResponse = {}; diff --git a/x-pack/plugins/cases/server/client/user_actions/get.ts b/x-pack/plugins/cases/server/client/user_actions/get.ts index b7cec9167450c..5e298342a31cd 100644 --- a/x-pack/plugins/cases/server/client/user_actions/get.ts +++ b/x-pack/plugins/cases/server/client/user_actions/get.ts @@ -5,8 +5,8 @@ * 2.0. */ -import type { CaseUserActionsResponse } from '../../../common/api'; -import { CaseUserActionsResponseRt } from '../../../common/api'; +import type { CaseUserActionsDeprecatedResponse } from '../../../common/api'; +import { CaseUserActionsDeprecatedResponseRt } from '../../../common/api'; import { createCaseError } from '../../common/error'; import type { CasesClientArgs } from '..'; import { Operations } from '../../authorization'; @@ -16,7 +16,7 @@ import { extractAttributes } from './utils'; export const get = async ( { caseId }: UserActionGet, clientArgs: CasesClientArgs -): Promise => { +): Promise => { const { services: { userActionService }, logger, @@ -36,7 +36,7 @@ export const get = async ( const resultsToEncode = extractAttributes(userActions); - return CaseUserActionsResponseRt.encode(resultsToEncode); + return CaseUserActionsDeprecatedResponseRt.encode(resultsToEncode); } catch (error) { throw createCaseError({ message: `Failed to retrieve user actions case id: ${caseId}: ${error}`, diff --git a/x-pack/plugins/cases/server/client/user_actions/utils.ts b/x-pack/plugins/cases/server/client/user_actions/utils.ts index a5237e9f45ca0..98df79b6e94ab 100644 --- a/x-pack/plugins/cases/server/client/user_actions/utils.ts +++ b/x-pack/plugins/cases/server/client/user_actions/utils.ts @@ -7,19 +7,19 @@ import type { SavedObjectsFindResponse } from '@kbn/core-saved-objects-api-server'; import type { - CaseUserActionResponse, - CaseUserActionInjectedAttributesWithoutActionId, + CaseUserActionInjectedAttributes, CaseUserActionsResponse, - CaseUserActionsResponseWithoutActionId, + CaseUserActionsDeprecatedResponse, + CaseUserActionDeprecatedResponse, } from '../../../common/api'; export const extractAttributes = ( - userActions: SavedObjectsFindResponse -): CaseUserActionsResponse => { + userActions: SavedObjectsFindResponse +): CaseUserActionsDeprecatedResponse => { return userActions.saved_objects.map((so) => so.attributes); }; export const formatSavedObjects = ( - response: SavedObjectsFindResponse -): CaseUserActionsResponseWithoutActionId => + response: SavedObjectsFindResponse +): CaseUserActionsResponse => response.saved_objects.map((so) => ({ id: so.id, version: so.version ?? '', ...so.attributes })); diff --git a/x-pack/plugins/cases/server/services/user_actions/index.ts b/x-pack/plugins/cases/server/services/user_actions/index.ts index 9db6c25c5e496..a96f113305444 100644 --- a/x-pack/plugins/cases/server/services/user_actions/index.ts +++ b/x-pack/plugins/cases/server/services/user_actions/index.ts @@ -16,8 +16,8 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { KueryNode } from '@kbn/es-query'; import type { CaseUserActionAttributesWithoutConnectorId, - CaseUserActionInjectedAttributesWithoutActionId, - CaseUserActionResponse, + CaseUserActionDeprecatedResponse, + CaseUserActionInjectedAttributes, } from '../../../common/api'; import { ActionTypes } from '../../../common/api'; import { @@ -270,7 +270,7 @@ export class CaseUserActionService { public async getMostRecentUserAction( caseId: string - ): Promise | undefined> { + ): Promise | undefined> { try { this.context.log.debug( `Attempting to retrieve the most recent user action for case id: ${caseId}` @@ -377,7 +377,7 @@ export class CaseUserActionService { rawFieldsDoc = createCase.mostRecent.hits.hits[0]; } - let fieldsDoc: SavedObject | undefined; + let fieldsDoc: SavedObject | undefined; if (rawFieldsDoc != null) { const doc = this.context.savedObjectsSerializer.rawToSavedObject( @@ -420,7 +420,7 @@ export class CaseUserActionService { private getTopHitsDoc( topHits: TopHits - ): SavedObject | undefined { + ): SavedObject | undefined { if (topHits.hits.hits.length > 0) { const rawPushDoc = topHits.hits.hits[0]; @@ -526,7 +526,9 @@ export class CaseUserActionService { }; } - public async getAll(caseId: string): Promise> { + public async getAll( + caseId: string + ): Promise> { try { const id = caseId; const type = CASE_SAVED_OBJECT; diff --git a/x-pack/plugins/cases/server/services/user_actions/operations/find.ts b/x-pack/plugins/cases/server/services/user_actions/operations/find.ts index 69cd8bd4b6fb6..b04cb76f3022c 100644 --- a/x-pack/plugins/cases/server/services/user_actions/operations/find.ts +++ b/x-pack/plugins/cases/server/services/user_actions/operations/find.ts @@ -16,7 +16,7 @@ import type { UserActionFindRequest, ActionTypeValues, FindTypeField, - CaseUserActionInjectedAttributesWithoutActionId, + CaseUserActionInjectedAttributes, } from '../../../../common/api'; import { Actions, ActionTypes, CommentType } from '../../../../common/api'; import { @@ -44,9 +44,7 @@ export class UserActionFinder { page, perPage, filter, - }: FindOptions): Promise< - SavedObjectsFindResponse - > { + }: FindOptions): Promise> { try { this.context.log.debug(`Attempting to find user actions for case id: ${caseId}`); @@ -178,7 +176,7 @@ export class UserActionFinder { }: { caseId: string; filter?: KueryNode; - }): Promise>> { + }): Promise>> { try { this.context.log.debug('Attempting to find status changes'); @@ -210,7 +208,7 @@ export class UserActionFinder { } ); - let userActions: Array> = []; + let userActions: Array> = []; for await (const findResults of finder.find()) { userActions = userActions.concat( findResults.saved_objects.map((so) => diff --git a/x-pack/plugins/cases/server/services/user_actions/transform.ts b/x-pack/plugins/cases/server/services/user_actions/transform.ts index 558a490afbe8b..4af9873c5cc5b 100644 --- a/x-pack/plugins/cases/server/services/user_actions/transform.ts +++ b/x-pack/plugins/cases/server/services/user_actions/transform.ts @@ -17,8 +17,8 @@ import { import type { CaseUserActionAttributes, CaseUserActionAttributesWithoutConnectorId, - CaseUserActionInjectedAttributesWithoutActionId, - CaseUserActionResponse, + CaseUserActionDeprecatedResponse, + CaseUserActionInjectedAttributes, } from '../../../common/api'; import { NONE_CONNECTOR_ID } from '../../../common/api'; import { CASE_SAVED_OBJECT, CASE_COMMENT_SAVED_OBJECT } from '../../../common/constants'; @@ -37,7 +37,7 @@ import { injectPersistableReferencesToSO } from '../../attachment_framework/so_r export function transformFindResponseToExternalModel( userActions: SavedObjectsFindResponse, persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry -): SavedObjectsFindResponse { +): SavedObjectsFindResponse { return { ...userActions, saved_objects: userActions.saved_objects.map((so) => ({ @@ -50,7 +50,7 @@ export function transformFindResponseToExternalModel( export function transformToExternalModel( userAction: SavedObject, persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry -): SavedObject { +): SavedObject { const { references } = userAction; const commentId = @@ -63,7 +63,7 @@ export function transformToExternalModel( ...userAction.attributes, comment_id: commentId, payload, - } as CaseUserActionInjectedAttributesWithoutActionId, + } as CaseUserActionInjectedAttributes, }; } @@ -76,7 +76,7 @@ export function transformToExternalModel( export function legacyTransformFindResponseToExternalModel( userActions: SavedObjectsFindResponse, persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry -): SavedObjectsFindResponse { +): SavedObjectsFindResponse { return { ...userActions, saved_objects: userActions.saved_objects.map((so) => ({ @@ -92,7 +92,7 @@ export function legacyTransformFindResponseToExternalModel( function legacyTransformToExternalModel( userAction: SavedObject, persistableStateAttachmentTypeRegistry: PersistableStateAttachmentTypeRegistry -): SavedObject { +): SavedObject { const { references } = userAction; const caseId = findReferenceId(CASE_REF_NAME, CASE_SAVED_OBJECT, references) ?? ''; @@ -108,7 +108,7 @@ function legacyTransformToExternalModel( case_id: caseId, comment_id: commentId, payload, - } as CaseUserActionResponse, + } as CaseUserActionDeprecatedResponse, }; } diff --git a/x-pack/plugins/cases/server/services/user_actions/types.ts b/x-pack/plugins/cases/server/services/user_actions/types.ts index 1e9e1f644b6d2..4d9813c42591d 100644 --- a/x-pack/plugins/cases/server/services/user_actions/types.ts +++ b/x-pack/plugins/cases/server/services/user_actions/types.ts @@ -19,7 +19,7 @@ import type { CaseSettings, CaseSeverity, CaseStatuses, - CaseUserActionInjectedAttributesWithoutActionId, + CaseUserActionInjectedAttributes, CommentUserAction, ConnectorUserAction, PushedUserAction, @@ -144,20 +144,17 @@ export interface ServiceContext { } export interface PushTimeFrameInfo { - mostRecent: SavedObject; - oldest: SavedObject; + mostRecent: SavedObject; + oldest: SavedObject; } export interface CaseConnectorActivity { connectorId: string; - fields: SavedObject; + fields: SavedObject; push?: PushTimeFrameInfo; } -export type CaseConnectorFields = Map< - string, - SavedObject ->; +export type CaseConnectorFields = Map>; export interface PushInfo { date: Date; diff --git a/x-pack/plugins/cloud_security_posture/common/schemas/csp_rule_template.ts b/x-pack/plugins/cloud_security_posture/common/schemas/csp_rule_template.ts index d2ccff064eb58..0ed56fb5d7e3b 100644 --- a/x-pack/plugins/cloud_security_posture/common/schemas/csp_rule_template.ts +++ b/x-pack/plugins/cloud_security_posture/common/schemas/csp_rule_template.ts @@ -5,7 +5,10 @@ * 2.0. */ import { schema as rt, TypeOf } from '@kbn/config-schema'; -import { cspRuleTemplateMetadataSchema } from './csp_rule_template_metadata'; +import { + cspRuleTemplateMetadataSchemaV840, + cspRuleTemplateMetadataSchemaV870, +} from './csp_rule_template_metadata'; export const cspRuleTemplateSchemaV830 = rt.object({ audit: rt.string(), @@ -29,12 +32,12 @@ export const cspRuleTemplateSchemaV830 = rt.object({ export const cspRuleTemplateSchemaV840 = rt.object({ enabled: rt.boolean(), - metadata: cspRuleTemplateMetadataSchema, + metadata: cspRuleTemplateMetadataSchemaV840, muted: rt.boolean(), }); export const cspRuleTemplateSchemaV870 = rt.object({ - metadata: cspRuleTemplateMetadataSchema, + metadata: cspRuleTemplateMetadataSchemaV870, }); export type CspRuleTemplateV830 = TypeOf; diff --git a/x-pack/plugins/cloud_security_posture/common/schemas/csp_rule_template_metadata.ts b/x-pack/plugins/cloud_security_posture/common/schemas/csp_rule_template_metadata.ts index aa6c8347b8215..0711bd371828a 100644 --- a/x-pack/plugins/cloud_security_posture/common/schemas/csp_rule_template_metadata.ts +++ b/x-pack/plugins/cloud_security_posture/common/schemas/csp_rule_template_metadata.ts @@ -6,7 +6,29 @@ */ import { schema as rt, TypeOf } from '@kbn/config-schema'; -export const cspRuleTemplateMetadataSchema = rt.object({ +export const cspRuleTemplateMetadataSchemaV840 = rt.object({ + audit: rt.string(), + benchmark: rt.object({ + name: rt.string(), + id: rt.string(), + version: rt.string(), + }), + default_value: rt.maybe(rt.string()), + description: rt.string(), + id: rt.string(), + impact: rt.maybe(rt.string()), + name: rt.string(), + profile_applicability: rt.string(), + rationale: rt.string(), + references: rt.maybe(rt.string()), + rego_rule_id: rt.string(), + remediation: rt.string(), + section: rt.string(), + tags: rt.arrayOf(rt.string()), + version: rt.string(), +}); + +export const cspRuleTemplateMetadataSchemaV870 = rt.object({ audit: rt.string(), benchmark: rt.object({ name: rt.string(), @@ -29,4 +51,6 @@ export const cspRuleTemplateMetadataSchema = rt.object({ version: rt.string(), }); -export type CspRuleTemplateMetadata = TypeOf; +export type CspRuleMetadataV840 = TypeOf; +export type CspRuleMetadataV870 = TypeOf; +export type CspRuleTemplateMetadata = CspRuleMetadataV870; diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/accounts_stats_collector.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/accounts_stats_collector.ts index cf28f5b07113d..1f4f8aeaa6598 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/accounts_stats_collector.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/accounts_stats_collector.ts @@ -6,7 +6,7 @@ */ import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import type { Logger } from '@kbn/core/server'; -import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; +import type { MappingRuntimeFields, SearchRequest } from '@elastic/elasticsearch/lib/api/types'; import { calculatePostureScore } from '../../../../common/utils/helpers'; import type { CspmAccountsStats } from './types'; import { LATEST_FINDINGS_INDEX_DEFAULT_NS } from '../../../../common/constants'; @@ -52,15 +52,57 @@ interface AccountEntity { }; } +// The runtime field help to have unique identifier for CSPM and KSPM +export const getIdentifierRuntimeMapping = (): MappingRuntimeFields => ({ + asset_identifier: { + type: 'keyword', + script: { + source: ` + if (!doc.containsKey('rule.benchmark.posture_type')) + { + def identifier = doc["cluster_id"].value; + emit(identifier); + return + } + else + { + if(doc["rule.benchmark.posture_type"].size() > 0) + { + def policy_template_type = doc["rule.benchmark.posture_type"].value; + if (policy_template_type == "cspm") + { + def identifier = doc["cloud.account.id"].value; + emit(identifier); + return + } + + if (policy_template_type == "kspm") + { + def identifier = doc["cluster_id"].value; + emit(identifier); + return + } + } + + def identifier = doc["cluster_id"].value; + emit(identifier); + return + } + `, + }, + }, +}); + const getAccountsStatsQuery = (index: string): SearchRequest => ({ index, + runtime_mappings: getIdentifierRuntimeMapping(), query: { match_all: {}, }, aggs: { accounts: { terms: { - field: 'cluster_id', + field: 'asset_identifier', order: { _count: 'desc', }, diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/resources_stats_collector.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/resources_stats_collector.ts index 3802f6651cd19..89250a55d16db 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/resources_stats_collector.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/resources_stats_collector.ts @@ -9,6 +9,7 @@ import type { Logger } from '@kbn/core/server'; import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; import type { CspmResourcesStats } from './types'; import { LATEST_FINDINGS_INDEX_DEFAULT_NS } from '../../../../common/constants'; +import { getIdentifierRuntimeMapping } from './accounts_stats_collector'; interface ResourcesStats { accounts: { @@ -50,10 +51,11 @@ const getResourcesStatsQuery = (index: string): SearchRequest => ({ query: { match_all: {}, }, + runtime_mappings: getIdentifierRuntimeMapping(), aggs: { accounts: { terms: { - field: 'cluster_id', + field: 'asset_identifier', order: { _count: 'desc', }, diff --git a/x-pack/plugins/cloud_security_posture/server/saved_objects/migrations/csp_rule_template.ts b/x-pack/plugins/cloud_security_posture/server/saved_objects/migrations/csp_rule_template.ts index 10f693e9ea7c3..470ec21cddc7b 100644 --- a/x-pack/plugins/cloud_security_posture/server/saved_objects/migrations/csp_rule_template.ts +++ b/x-pack/plugins/cloud_security_posture/server/saved_objects/migrations/csp_rule_template.ts @@ -28,7 +28,7 @@ function migrateCspRuleTemplatesToV840( muted, metadata: { ...metadata, - benchmark: { ...benchmark, id: 'cis_k8s', rule_number: '' }, + benchmark: { ...benchmark, id: 'cis_k8s' }, impact: metadata.impact || undefined, default_value: metadata.default_value || undefined, references: metadata.references || undefined, diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_collection_table.test.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_collection_table.test.tsx index 7e53af6c90283..6b286a96694a4 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_collection_table.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_collection_table.test.tsx @@ -15,8 +15,6 @@ import { EuiBasicTable } from '@elastic/eui'; import { AnalyticsCollection } from '../../../../../common/types/analytics'; -import { EuiLinkTo } from '../../../shared/react_router_helpers'; - import { AnalyticsCollectionTable } from './analytics_collection_table'; describe('AnalyticsCollectionTable', () => { @@ -44,6 +42,6 @@ describe('AnalyticsCollectionTable', () => { expect(rows).toHaveLength(1); expect(rows[0]).toMatchObject(analyticsCollections[0]); - expect(wrapper.dive().find(EuiLinkTo).first().prop('to')).toBe('/collections/example/events'); + expect(wrapper.render().find('a').attr('href')).toContain('/collections/example/events'); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/crawl_requests_table.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/crawl_requests_table.test.tsx index c2b36f24d7582..42cb988a7bb68 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/crawl_requests_table.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/crawl_requests_table.test.tsx @@ -12,7 +12,7 @@ import React from 'react'; import { shallow, ShallowWrapper } from 'enzyme'; -import { EuiBasicTable, EuiEmptyPrompt } from '@elastic/eui'; +import { EuiBasicTable } from '@elastic/eui'; import { mountWithIntl } from '../../../../test_helpers'; @@ -128,7 +128,7 @@ describe('CrawlRequestsTable', () => { wrapper = shallow(); - expect(wrapper.find(EuiBasicTable).dive().find(EuiEmptyPrompt)).toHaveLength(1); + expect(wrapper.render().find('.euiEmptyPrompt')).toHaveLength(1); }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/domains_table.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/domains_table.test.tsx index 5115308350066..defa71847a183 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/domains_table.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/domains_table.test.tsx @@ -84,6 +84,9 @@ describe('DomainsTable', () => { .text(); }); + const getTableBody = () => + wrapper.find(EuiBasicTable).dive().find('RenderWithEuiTheme').renderProp('children')(); + it('renders', () => { expect(wrapper.find(EuiBasicTable)).toHaveLength(1); @@ -104,8 +107,7 @@ describe('DomainsTable', () => { }); it('renders a clickable domain url', () => { - const basicTable = wrapper.find(EuiBasicTable).dive(); - const link = basicTable.find('[data-test-subj="CrawlerDomainURL"]').at(0); + const link = getTableBody().find('[data-test-subj="CrawlerDomainURL"]').at(0); expect(link.dive().text()).toContain('elastic.co'); expect(link.props()).toEqual( @@ -126,8 +128,7 @@ describe('DomainsTable', () => { }); describe('actions column', () => { - const getTable = () => wrapper.find(EuiBasicTable).dive(); - const getActions = () => getTable().find('ExpandedItemActions'); + const getActions = () => getTableBody().find('ExpandedItemActions'); const getActionItems = () => getActions().first().dive().find('DefaultItemAction'); it('will hide the action buttons if the user cannot manage/delete engines', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_list/credentials_list.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_list/credentials_list.test.tsx index 8a0539b70d542..ebfd1d7eadb96 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_list/credentials_list.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_list/credentials_list.test.tsx @@ -11,7 +11,7 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { EuiBasicTable, EuiCopy, EuiEmptyPrompt } from '@elastic/eui'; +import { EuiBasicTable, EuiCopy } from '@elastic/eui'; import { HiddenText } from '../../../../shared/hidden_text'; import { ApiTokenTypes } from '../constants'; @@ -93,10 +93,8 @@ describe('CredentialsList', () => { apiTokens: [], }); - const wrapper = shallow() - .find(EuiBasicTable) - .dive(); - expect(wrapper.find(EuiEmptyPrompt)).toHaveLength(1); + const wrapper = shallow(); + expect(wrapper.render().find('.euiEmptyPrompt')).toHaveLength(1); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/audit_logs_modal/audit_logs_modal.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/audit_logs_modal/audit_logs_modal.tsx index da76fefece518..595d881be7b9e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/audit_logs_modal/audit_logs_modal.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/audit_logs_modal/audit_logs_modal.tsx @@ -43,9 +43,7 @@ export const AuditLogsModal: React.FC = () => { return !isModalVisible ? null : ( - -

{engineName}

-
+ {engineName}
diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/meta_engines_table.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/meta_engines_table.test.tsx index 2a8a861dfbc37..c23197e6505dc 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/meta_engines_table.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/meta_engines_table.test.tsx @@ -84,9 +84,10 @@ describe('MetaEnginesTable', () => { it('is hidden by default', () => { const wrapper = shallow(); const table = wrapper.find(EuiBasicTable).dive(); + const tableBody = table.find('RenderWithEuiTheme').renderProp('children')(); - expect(table.find(MetaEnginesTableNameColumnContent)).toHaveLength(1); - expect(table.find(MetaEnginesTableExpandedRow)).toHaveLength(0); + expect(tableBody.find(MetaEnginesTableNameColumnContent)).toHaveLength(1); + expect(tableBody.find(MetaEnginesTableExpandedRow)).toHaveLength(0); }); it('is visible when the row has been expanded', () => { @@ -95,8 +96,10 @@ describe('MetaEnginesTable', () => { expandedSourceEngines: { 'test-engine': true }, }); const wrapper = shallow(); - const table = wrapper.find(EuiBasicTable); - expect(table.dive().find(MetaEnginesTableExpandedRow)).toHaveLength(1); + const table = wrapper.find(EuiBasicTable).dive(); + const tableBody = table.find('RenderWithEuiTheme').renderProp('children')(); + + expect(tableBody.find(MetaEnginesTableExpandedRow)).toHaveLength(1); }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/meta_engines_table_expanded_row.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/meta_engines_table_expanded_row.test.tsx index 26c8c0fddcd11..2f329c991076a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/meta_engines_table_expanded_row.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/meta_engines_table_expanded_row.test.tsx @@ -62,8 +62,9 @@ describe('MetaEnginesTableExpandedRow', () => { conflictingEngines={new Set(['source-engine-1', 'source-engine-2'])} /> ); + const table = wrapper.find(EuiBasicTable).dive(); + const tableBody = table.find('RenderWithEuiTheme').renderProp('children')(); - const table = wrapper.find(EuiBasicTable); - expect(table.dive().find(EuiHealth)).toHaveLength(2); + expect(tableBody.find(EuiHealth)).toHaveLength(2); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/test_helpers/shared_columns.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/test_helpers/shared_columns.tsx index d67f2bd776db2..e00497a419a3c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/test_helpers/shared_columns.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engines/components/tables/test_helpers/shared_columns.tsx @@ -22,7 +22,8 @@ export const runSharedColumnsTests = ( tableContent: string, values: object = {} ) => { - const getTable = () => wrapper.find(EuiBasicTable).dive(); + const getTableBody = () => + wrapper.find(EuiBasicTable).dive().find('RenderWithEuiTheme').renderProp('children')(); describe('name column', () => { it('renders', () => { @@ -54,7 +55,7 @@ export const runSharedColumnsTests = ( }); describe('actions column', () => { - const getActions = () => getTable().find('ExpandedItemActions'); + const getActions = () => getTableBody().find('ExpandedItemActions'); const getActionItems = () => getActions().dive().find('DefaultItemAction'); it('will hide the action buttons if the user cannot manage/delete engines', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/synonyms/components/synonym_modal.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/synonyms/components/synonym_modal.test.tsx index ec0dde74ecf32..074cfa6fce9bb 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/synonyms/components/synonym_modal.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/synonyms/components/synonym_modal.test.tsx @@ -59,7 +59,7 @@ describe('SynonymModal', () => { const wrapper = shallow(); it('renders', () => { - expect(wrapper.find('h1').text()).toEqual('Add a synonym set'); + expect(wrapper.find('EuiModalHeaderTitle').render().text()).toEqual('Add a synonym set'); }); it('populates MultiInputRows with two empty rows', () => { @@ -87,7 +87,7 @@ describe('SynonymModal', () => { }); it('renders', () => { - expect(wrapper.find('h1').text()).toEqual('Manage synonym set'); + expect(wrapper.find('EuiModalHeaderTitle').render().text()).toEqual('Manage synonym set'); }); it('populates MultiInputRows with ID & initial values', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/synonyms/components/synonym_modal.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/synonyms/components/synonym_modal.tsx index 5df254768faac..93dbc9cea4447 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/synonyms/components/synonym_modal.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/synonyms/components/synonym_modal.tsx @@ -48,9 +48,7 @@ export const SynonymModal: React.FC = () => { return isModalOpen ? ( - -

{modalTitle}

-
+ {modalTitle}
diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/generate_engine_api_key/generate_engine_api_key_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/generate_engine_api_key/generate_engine_api_key_logic.test.ts new file mode 100644 index 0000000000000..fb12dfc09b6e6 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/generate_engine_api_key/generate_engine_api_key_logic.test.ts @@ -0,0 +1,54 @@ +/* + * 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 { mockHttpValues } from '../../../__mocks__/kea_logic'; + +import { nextTick } from '@kbn/test-jest-helpers'; + +import { generateEngineApiKey } from './generate_engine_api_key_logic'; + +describe('GenerateEngineApiKeyLogic', () => { + const { http } = mockHttpValues; + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('GenerateEngineApiKeyLogic', () => { + it('calls correct api', async () => { + const promise = Promise.resolve({ + apiKey: { + api_key: 'api_key', + encoded: 'encoded', + id: 'id', + name: 'name', + }, + }); + http.post.mockReturnValue(promise); + const result = generateEngineApiKey({ + engineName: 'puggles', + keyName: 'puggles read only key', + }); + await nextTick(); + expect(http.post).toHaveBeenCalledWith( + '/internal/enterprise_search/engines/puggles/api_key', + { + body: JSON.stringify({ + keyName: 'puggles read only key', + }), + } + ); + await expect(result).resolves.toEqual({ + apiKey: { + api_key: 'api_key', + encoded: 'encoded', + id: 'id', + name: 'name', + }, + }); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/generate_engine_api_key/generate_engine_api_key_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/generate_engine_api_key/generate_engine_api_key_logic.ts new file mode 100644 index 0000000000000..667d712583ac0 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/generate_engine_api_key/generate_engine_api_key_logic.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createApiLogic } from '../../../shared/api_logic/create_api_logic'; +import { HttpLogic } from '../../../shared/http'; + +interface APIKeyResponse { + apiKey: { + api_key: string; + encoded: string; + id: string; + name: string; + }; +} + +export const generateEngineApiKey = async ({ + engineName, + keyName, +}: { + engineName: string; + keyName: string; +}) => { + const route = `/internal/enterprise_search/engines/${engineName}/api_key`; + + return await HttpLogic.values.http.post(route, { + body: JSON.stringify({ + keyName, + }), + }); +}; + +export const GenerateEngineApiKeyLogic = createApiLogic( + ['generate_engine_api_key_logic'], + generateEngineApiKey +); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/engine_api.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/engine_api.tsx new file mode 100644 index 0000000000000..a439d9aba4950 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/engine_api.tsx @@ -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 React from 'react'; + +import { useActions, useValues } from 'kea'; + +import { + EuiButton, + EuiCodeBlock, + EuiFlexGroup, + EuiFlexItem, + EuiLink, + EuiSpacer, + EuiSteps, + EuiText, +} from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + +import { ANALYTICS_PLUGIN } from '../../../../../../common/constants'; +import { COLLECTION_VIEW_PATH } from '../../../../analytics/routes'; +import { docLinks } from '../../../../shared/doc_links'; +import { generateEncodedPath } from '../../../../shared/encode_path_params'; +import { getEnterpriseSearchUrl } from '../../../../shared/enterprise_search_url'; +import { KibanaLogic } from '../../../../shared/kibana'; + +import { EngineViewTabs } from '../../../routes'; +import { EnterpriseSearchEnginesPageTemplate } from '../../layout/engines_page_template'; + +import { EngineIndicesLogic } from '../engine_indices_logic'; +import { EngineViewLogic } from '../engine_view_logic'; + +import { EngineApiIntegrationStage } from './engine_api_integration'; +import { EngineApiLogic } from './engine_api_logic'; +import { GenerateEngineApiKeyModal } from './generate_engine_api_key_modal/generate_engine_api_key_modal'; + +export const EngineAPI: React.FC = () => { + const { engineName, isLoadingEngine } = useValues(EngineViewLogic); + const { engineData } = useValues(EngineIndicesLogic); + const { isGenerateModalOpen } = useValues(EngineApiLogic); + const { openGenerateModal, closeGenerateModal } = useActions(EngineApiLogic); + const enterpriseSearchUrl = getEnterpriseSearchUrl(); + const { navigateToUrl } = useValues(KibanaLogic); + + if (!engineData) return null; + + const steps = [ + { + title: i18n.translate('xpack.enterpriseSearch.content.engine.api.step1.title', { + defaultMessage: 'Generate and save API key', + }), + children: ( + <> + +

+ {i18n.translate('xpack.enterpriseSearch.content.engine.api.step1.apiKeyWarning', { + defaultMessage: + "Elastic does not store API keys. Once generated, you'll only be able to view the key one time. Make sure you save it somewhere secure. If you lose access to it you'll need to generate a new API key from this screen.", + })}{' '} + + {i18n.translate('xpack.enterpriseSearch.content.engine.api.step1.learnMoreLink', { + defaultMessage: 'Learn more about API keys.', + })} + +

+
+ + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.engine.api.step1.createAPIKeyButton', + { + defaultMessage: 'Create API Key', + } + )} + + + + + KibanaLogic.values.navigateToUrl('/app/management/security/api_keys', { + shouldNotCreateHref: true, + }) + } + > + {i18n.translate('xpack.enterpriseSearch.content.engine.api.step1.viewKeysButton', { + defaultMessage: 'View Keys', + })} + + + + + ), + }, + { + title: i18n.translate('xpack.enterpriseSearch.content.engine.api.step2.title', { + defaultMessage: "Copy your engine's endpoint", + }), + children: ( + <> + +

+ {i18n.translate( + 'xpack.enterpriseSearch.content.engine.api.step2.copyEndpointDescription', + { + defaultMessage: "Use this URL to access your engine's API endpoints.", + } + )} +

+
+ + + + + {enterpriseSearchUrl} + + + + + ), + }, + { + title: i18n.translate('xpack.enterpriseSearch.content.engine.api.step3.title', { + defaultMessage: 'Learn how to call your endpoints', + }), + children: , + }, + { + title: i18n.translate('xpack.enterpriseSearch.content.engine.api.step4.title', { + defaultMessage: '(Optional) Power up your analytics', + }), + children: ( + <> + +

+ {i18n.translate('xpack.enterpriseSearch.content.engine.api.step4.copy', { + defaultMessage: + 'Your engine provides basic analytics data as part of this installation. To receive more granular and custom metrics, integrate our Behavioral Analytics script on your platform.', + })} +

+
+ + + + + navigateToUrl( + generateEncodedPath(`${ANALYTICS_PLUGIN.URL}${COLLECTION_VIEW_PATH}`, { + id: engineName, + section: 'integrate', + }), + { shouldNotCreateHref: true } + ) + } + iconSide="left" + iconType="popout" + > + {i18n.translate('xpack.enterpriseSearch.content.engine.api.step4.learnHowLink', { + defaultMessage: 'Learn how', + })} + + + + + ), + }, + ]; + + return ( + + {isGenerateModalOpen ? ( + + ) : null} + + + ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/engine_api_integration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/engine_api_integration.tsx new file mode 100644 index 0000000000000..778d69a5ed56b --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/engine_api_integration.tsx @@ -0,0 +1,99 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { useValues } from 'kea'; + +import { EuiCodeBlock, EuiSpacer, EuiText, EuiTabs, EuiTab } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { getEnterpriseSearchUrl } from '../../../../shared/enterprise_search_url'; + +import { EngineViewLogic } from '../engine_view_logic'; + +import { EngineApiLogic } from './engine_api_logic'; + +const SearchUISnippet = (enterpriseSearchUrl: string, engineName: string, apiKey: string) => ` +import EnginesAPIConnector from "@elastic/search-ui-engines-connector"; + +const connector = new EnginesAPIConnector({ + host: "${enterpriseSearchUrl}", + engineName: "${engineName}", + apiKey: "${apiKey || ''}" +});`; + +const cURLSnippet = (enterpriseSearchUrl: string, engineName: string, apiKey: string) => ` +curl --location --request GET '${enterpriseSearchUrl}/api/engines/${engineName}/_search' \\ +--header 'Authorization: apiKey ${apiKey || ''}' \\ +--header 'Content-Type: application/json' \\ +--data-raw '{ + "query": { + "match_all": {} + } +}'`; + +type TabId = 'curl' | 'searchui'; +interface Tab { + code: string; + language: string; + title: string; +} + +export const EngineApiIntegrationStage: React.FC = () => { + const [selectedTab, setSelectedTab] = React.useState('curl'); + const { engineName } = useValues(EngineViewLogic); + const enterpriseSearchUrl = getEnterpriseSearchUrl(); + const { apiKey } = useValues(EngineApiLogic); + + const Tabs: Record = { + curl: { + code: cURLSnippet(enterpriseSearchUrl, engineName, apiKey), + language: 'bash', + title: i18n.translate('xpack.enterpriseSearch.content.engine.api.step3.curlTitle', { + defaultMessage: 'cURL', + }), + }, + searchui: { + code: SearchUISnippet(enterpriseSearchUrl, engineName, apiKey), + language: 'javascript', + title: i18n.translate('xpack.enterpriseSearch.content.engine.api.step3.searchUITitle', { + defaultMessage: 'Search UI', + }), + }, + }; + + return ( + <> + +

+ {i18n.translate('xpack.enterpriseSearch.content.engine.api.step3.intro', { + defaultMessage: + 'Learn how to integrate with your engine with the language clients maintained by Elastic to help build your search experience.', + })} +

+
+ + + {Object.entries(Tabs).map(([tabId, tab]) => ( + setSelectedTab(tabId as TabId)} + data-telemetry-id={`entSearchContent-engines-api-integration-tab-${tabId}`} + > + {tab.title} + + ))} + + + + {Tabs[selectedTab].code} + + + ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/engine_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/engine_api_logic.ts new file mode 100644 index 0000000000000..41bda80eb274f --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/engine_api_logic.ts @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { kea, MakeLogicType } from 'kea'; + +import { Status } from '../../../../../../common/types/api'; +import { GenerateEngineApiKeyLogic } from '../../../api/generate_engine_api_key/generate_engine_api_key_logic'; + +interface EngineAPIActions { + apiError: typeof GenerateEngineApiKeyLogic.actions.apiError; + apiReset: typeof GenerateEngineApiKeyLogic.actions.apiReset; + closeGenerateModal: void; + openGenerateModal: void; +} + +export interface EngineAPILogicValues { + apiKey: string; + apiKeyData: typeof GenerateEngineApiKeyLogic.values.data; + apiKeyStatus: typeof GenerateEngineApiKeyLogic.values.status; + isError: boolean; + isGenerateModalOpen: boolean; +} + +export const EngineApiLogic = kea>({ + actions: { + closeGenerateModal: true, + openGenerateModal: true, + }, + connect: { + actions: [GenerateEngineApiKeyLogic, ['apiReset']], + values: [GenerateEngineApiKeyLogic, ['data as apiKeyData', 'status as apiKeyStatus']], + }, + listeners: ({ actions }) => ({ + openGenerateModal: () => { + actions.apiReset(); + }, + }), + path: ['enterprise_search', 'content', 'engine_api_logic'], + reducers: () => ({ + isGenerateModalOpen: [ + false, + { + closeGenerateModal: () => false, + openGenerateModal: () => true, + }, + ], + }), + selectors: ({ selectors }) => ({ + apiKey: [ + () => [selectors.apiKeyStatus, selectors.apiKeyData], + (apiKeyStatus, apiKeyData) => + apiKeyStatus === Status.SUCCESS ? apiKeyData.apiKey.encoded : null, + ], + }), +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.logic.test.ts new file mode 100644 index 0000000000000..03b3ef872b4a0 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.logic.test.ts @@ -0,0 +1,140 @@ +/* + * 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 { LogicMounter } from '../../../../../__mocks__/kea_logic'; + +import { Status } from '../../../../../../../common/types/api'; +import { GenerateEngineApiKeyLogic } from '../../../../api/generate_engine_api_key/generate_engine_api_key_logic'; + +import { GenerateApiKeyModalLogic } from './generate_engine_api_key_modal.logic'; + +const DEFAULT_VALUES = { + apiKey: '', + data: undefined, + isLoading: false, + isSuccess: false, + keyName: '', + status: Status.IDLE, +}; + +describe('GenerateEngineApiKeyModal Logic', () => { + const { mount: apiLogicMount } = new LogicMounter(GenerateEngineApiKeyLogic); + const { mount } = new LogicMounter(GenerateApiKeyModalLogic); + + beforeEach(() => { + jest.clearAllMocks(); + apiLogicMount(); + mount(); + }); + + it('has expected default values', () => { + expect(GenerateApiKeyModalLogic.values).toEqual(DEFAULT_VALUES); + }); + + describe('actions', () => { + describe('setKeyName', () => { + it('sets keyName value to the reducer', () => { + const keyName = 'test-key-name 8888*^7896&*^*&'; + expect(GenerateApiKeyModalLogic.values).toEqual(DEFAULT_VALUES); + GenerateApiKeyModalLogic.actions.setKeyName(keyName); + expect(GenerateApiKeyModalLogic.values).toEqual({ + ...DEFAULT_VALUES, + keyName, + }); + }); + }); + }); + + describe('reducers', () => { + describe('keyName', () => { + it('updates when setKeyName action is triggered', () => { + const keyName = 'test-key-name'; + expect(GenerateApiKeyModalLogic.values).toEqual(DEFAULT_VALUES); + GenerateApiKeyModalLogic.actions.setKeyName(keyName); + expect(GenerateApiKeyModalLogic.values).toEqual({ + ...DEFAULT_VALUES, + keyName, + }); + }); + }); + }); + + describe('selectors', () => { + describe('apiKey', () => { + it('updates when apiSuccess listener triggered', () => { + expect(GenerateApiKeyModalLogic.values).toEqual(DEFAULT_VALUES); + GenerateEngineApiKeyLogic.actions.apiSuccess({ + apiKey: { + api_key: 'some-api-key-123123', + encoded: 'encoded-api-key123123==', + id: 'api_key_id', + name: 'test-key-123', + }, + }); + + expect(GenerateApiKeyModalLogic.values).toEqual({ + apiKey: 'encoded-api-key123123==', + data: { + apiKey: { + api_key: 'some-api-key-123123', + encoded: 'encoded-api-key123123==', + id: 'api_key_id', + name: 'test-key-123', + }, + }, + isLoading: false, + isSuccess: true, + keyName: '', + status: Status.SUCCESS, + }); + }); + }); + + describe('isLoading', () => { + it('should update with API status', () => { + expect(GenerateApiKeyModalLogic.values).toEqual(DEFAULT_VALUES); + GenerateEngineApiKeyLogic.actions.makeRequest({ engineName: 'puggles', keyName: 'test' }); + + expect(GenerateApiKeyModalLogic.values).toEqual({ + ...DEFAULT_VALUES, + isLoading: true, + status: Status.LOADING, + }); + }); + }); + + describe('isSuccess', () => { + it('should update with API status', () => { + expect(GenerateApiKeyModalLogic.values).toEqual(DEFAULT_VALUES); + GenerateEngineApiKeyLogic.actions.apiSuccess({ + apiKey: { + api_key: 'some-api-key-123123', + encoded: 'encoded-api-key123123==', + id: 'api_key_id', + name: 'test-key-123', + }, + }); + + expect(GenerateApiKeyModalLogic.values).toEqual({ + apiKey: 'encoded-api-key123123==', + data: { + apiKey: { + api_key: 'some-api-key-123123', + encoded: 'encoded-api-key123123==', + id: 'api_key_id', + name: 'test-key-123', + }, + }, + isLoading: false, + isSuccess: true, + keyName: '', + status: Status.SUCCESS, + }); + }); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.logic.ts new file mode 100644 index 0000000000000..1f000181c327e --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.logic.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { kea, MakeLogicType } from 'kea'; + +import { Status } from '../../../../../../../common/types/api'; + +import { GenerateEngineApiKeyLogic } from '../../../../api/generate_engine_api_key/generate_engine_api_key_logic'; + +interface GenerateApiKeyModalActions { + setKeyName(keyName: string): { keyName: string }; +} + +interface GenerateApiKeyModalValues { + apiKey: string; + data: typeof GenerateEngineApiKeyLogic.values.data; + isLoading: boolean; + isSuccess: boolean; + keyName: string; + status: typeof GenerateEngineApiKeyLogic.values.status; +} + +export const GenerateApiKeyModalLogic = kea< + MakeLogicType +>({ + actions: { + setKeyName: (keyName) => ({ keyName }), + }, + connect: { + values: [GenerateEngineApiKeyLogic, ['data', 'status']], + }, + path: ['enterprise_search', 'engines', 'api', 'generate_api_key_modal'], + reducers: () => ({ + keyName: [ + '', + { + setKeyName: (_, { keyName }) => keyName, + }, + ], + }), + selectors: ({ selectors }) => ({ + apiKey: [() => [selectors.data], (data) => data?.apiKey?.encoded || ''], + isLoading: [() => [selectors.status], (status) => status === Status.LOADING], + isSuccess: [() => [selectors.status], (status) => status === Status.SUCCESS], + }), +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.test.tsx new file mode 100644 index 0000000000000..d1b40ee921025 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.test.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 { setMockValues, setMockActions } from '../../../../../__mocks__/kea_logic'; + +import React from 'react'; + +import { shallow, mount } from 'enzyme'; + +import { EuiModal, EuiFieldText, EuiCodeBlock } from '@elastic/eui'; + +const mockActions = { makeRequest: jest.fn(), setKeyName: jest.fn() }; + +const mockValues = { apiKey: '', isLoading: false, isSuccess: false, keyName: '' }; + +import { GenerateEngineApiKeyModal } from './generate_engine_api_key_modal'; + +const onCloseMock = jest.fn(); +describe('GenerateEngineApiKeyModal', () => { + beforeEach(() => { + jest.clearAllMocks(); + setMockValues(mockValues); + setMockActions(mockActions); + }); + + it('renders the empty modal', () => { + const wrapper = shallow( + + ); + expect(wrapper.find(EuiModal)).toHaveLength(1); + + wrapper.find(EuiModal).prop('onClose')(); + expect(onCloseMock).toHaveBeenCalled(); + }); + + describe('Modal content', () => { + it('renders API key name form', () => { + const wrapper = shallow( + + ); + expect(wrapper.find(EuiFieldText)).toHaveLength(1); + expect(wrapper.find('[data-test-subj="generateApiKeyButton"]')).toHaveLength(1); + }); + + it('pre-set the key name with engine name', () => { + mount(); + expect(mockActions.setKeyName).toHaveBeenCalledWith('puggles read-only API key'); + }); + + it('sets keyName name on form', () => { + const wrapper = shallow( + + ); + const textField = wrapper.find(EuiFieldText); + expect(textField).toHaveLength(1); + textField.simulate('change', { currentTarget: { value: 'changeEvent-key-name' } }); + expect(mockActions.setKeyName).toHaveBeenCalledWith('changeEvent-key-name'); + }); + + it('should trigger api call from the form', () => { + setMockValues({ ...mockValues, engineName: 'test-123', keyName: ' with-spaces ' }); + const wrapper = shallow( + + ); + expect(wrapper.find(EuiFieldText)).toHaveLength(1); + wrapper.find('[data-test-subj="generateApiKeyButton"]').simulate('click'); + + expect(mockActions.makeRequest).toHaveBeenCalledWith({ + engineName: 'puggles', + keyName: 'with-spaces', + }); + }); + it('renders created API key results', () => { + setMockValues({ + ...mockValues, + apiKey: 'apiKeyFromBackend123123==', + engineName: 'test-123', + isSuccess: true, + keyName: 'keyname', + }); + const wrapper = shallow( + + ); + expect(wrapper.find(EuiFieldText)).toHaveLength(0); + expect(wrapper.find('[data-test-subj="generateApiKeyButton"]')).toHaveLength(0); + expect(wrapper.find(EuiCodeBlock)).toHaveLength(1); + expect(wrapper.find(EuiCodeBlock).children().text()).toEqual('apiKeyFromBackend123123=='); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.tsx new file mode 100644 index 0000000000000..c0cbcea37e93a --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_api/generate_engine_api_key_modal/generate_engine_api_key_modal.tsx @@ -0,0 +1,196 @@ +/* + * 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, { useEffect } from 'react'; + +import { useValues, useActions } from 'kea'; + +import { + EuiModal, + EuiModalHeader, + EuiModalHeaderTitle, + EuiModalBody, + EuiModalFooter, + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiButton, + EuiButtonEmpty, + EuiButtonIcon, + EuiFieldText, + EuiFormRow, + EuiText, + EuiSpacer, + EuiFormLabel, + EuiCodeBlock, +} from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + +import { GenerateEngineApiKeyLogic } from '../../../../api/generate_engine_api_key/generate_engine_api_key_logic'; + +import { GenerateApiKeyModalLogic } from './generate_engine_api_key_modal.logic'; + +interface GenerateEngineApiKeyModalProps { + engineName: string; + onClose(): void; +} + +export const GenerateEngineApiKeyModal: React.FC = ({ + engineName, + onClose, +}) => { + const { keyName, apiKey, isLoading, isSuccess } = useValues(GenerateApiKeyModalLogic); + const { setKeyName } = useActions(GenerateApiKeyModalLogic); + const { makeRequest } = useActions(GenerateEngineApiKeyLogic); + + useEffect(() => { + setKeyName(`${engineName} read-only API key`); + }, [engineName]); + + return ( + + + + {i18n.translate( + 'xpack.enterpriseSearch.content.engine.api.generateEngineApiKeyModal.title', + { + defaultMessage: 'Create Engine read-only API Key', + } + )} + + + + <> + + + + + {!isSuccess ? ( + <> + + + setKeyName(event.currentTarget.value)} + value={keyName} + isLoading={isLoading} + /> + + + + + { + makeRequest({ + engineName, + keyName: keyName.trim(), + }); + }} + disabled={keyName.trim().length <= 0} + > + {i18n.translate( + 'xpack.enterpriseSearch.content.engine.api.generateEngineApiKeyModal.generateButton', + { + defaultMessage: 'Generate read-only key', + } + )} + + + + ) : ( + + {keyName} + + + + + {apiKey} + + + + + + + + )} + + + + + + +

+ {i18n.translate( + 'xpack.enterpriseSearch.content.engine.api.generateEngineApiKeyModal.apiKeyWarning', + { + defaultMessage: + "Elastic does not store API keys. Once generated, you'll only be able to view the key one time. Make sure you save it somewhere secure. If you lose access to it you'll need to generate a new API key from this screen.", + } + )} +

+
+
+
+
+
+
+ +
+ + {apiKey ? ( + + {i18n.translate( + 'xpack.enterpriseSearch.content.engine.api.generateEngineApiKeyModal.done', + { + defaultMessage: 'Done', + } + )} + + ) : ( + + {i18n.translate( + 'xpack.enterpriseSearch.content.engine.api.generateEngineApiKeyModal.cancel', + { + defaultMessage: 'Cancel', + } + )} + + )} + +
+ ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_view.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_view.tsx index 322ec07d0821e..05b34088b1797 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_view.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_view.tsx @@ -17,6 +17,7 @@ import { ENGINE_PATH, EngineViewTabs } from '../../routes'; import { EnterpriseSearchEnginesPageTemplate } from '../layout/engines_page_template'; +import { EngineAPI } from './engine_api/engine_api'; import { EngineError } from './engine_error'; import { EngineIndices } from './engine_indices'; import { EngineViewLogic } from './engine_view_logic'; @@ -55,6 +56,7 @@ export const EngineView: React.FC = () => { return ( + ( { wrapper = shallow(); - expect(wrapper.find(EuiBasicTable).dive().find(EuiEmptyPrompt)).toHaveLength(1); + expect(wrapper.render().find('.euiEmptyPrompt')).toHaveLength(1); }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/domain_management/domains_table.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/domain_management/domains_table.test.tsx index 46b3ed3ba6058..350ef6ba68672 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/domain_management/domains_table.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/domain_management/domains_table.test.tsx @@ -91,6 +91,9 @@ describe('DomainsTable', () => { .text(); }); + const getTableBody = () => + wrapper.find(EuiBasicTable).dive().find('RenderWithEuiTheme').renderProp('children')(); + it('renders', () => { expect(wrapper.find(EuiBasicTable)).toHaveLength(1); @@ -111,8 +114,7 @@ describe('DomainsTable', () => { }); it('renders a clickable domain url', () => { - const basicTable = wrapper.find(EuiBasicTable).dive(); - const link = basicTable.find('[data-test-subj="CrawlerDomainURL"]').at(0); + const link = getTableBody().find('[data-test-subj="CrawlerDomainURL"]').at(0); expect(link.dive().text()).toContain('elastic.co'); expect(link.props()).toEqual( @@ -133,8 +135,7 @@ describe('DomainsTable', () => { }); describe('actions column', () => { - const getTable = () => wrapper.find(EuiBasicTable).dive(); - const getActions = () => getTable().find('ExpandedItemActions'); + const getActions = () => getTableBody().find('ExpandedItemActions'); const getActionItems = () => getActions().first().dive().find('DefaultItemAction'); describe('when the user can manage/delete engines', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/sources_view.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/sources_view.tsx index a7c981dad9103..6e1e2d8f6e545 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/sources_view.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/content_sources/sources_view.tsx @@ -54,24 +54,24 @@ export const SourcesView: React.FC = ({ children }) => { }) => ( - - - - - - + + + + + + {i18n.translate('xpack.enterpriseSearch.workplaceSearch.sourcesView.modal.heading', { defaultMessage: '{addedSourceName} requires additional configuration', values: { addedSourceName }, })} - - - + +
+
diff --git a/x-pack/plugins/enterprise_search/server/lib/engines/create_api_key.test.ts b/x-pack/plugins/enterprise_search/server/lib/engines/create_api_key.test.ts new file mode 100644 index 0000000000000..ca076fe436248 --- /dev/null +++ b/x-pack/plugins/enterprise_search/server/lib/engines/create_api_key.test.ts @@ -0,0 +1,55 @@ +/* + * 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 { IScopedClusterClient } from '@kbn/core/server'; + +import { createApiKey } from './create_api_key'; + +describe('createApiKey lib function', () => { + const engineName = 'my-index'; + const keyName = 'Engine read only key'; + + const createResponse = { + api_key: 'ui2lp2axTNmsyakw9tvNnw', + encoded: 'VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw==', + id: 'VuaCfGcBCdbkQm-e5aOx', + name: keyName, + }; + + const mockClient = { + asCurrentUser: { + security: { + createApiKey: jest.fn().mockReturnValue(createResponse), + }, + }, + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should create an api key via the security plugin', async () => { + await expect( + createApiKey(mockClient as unknown as IScopedClusterClient, engineName, keyName) + ).resolves.toEqual(createResponse); + + expect(mockClient.asCurrentUser.security.createApiKey).toHaveBeenCalledWith({ + name: 'Engine read only key', + role_descriptors: { + 'my-index-key-role': { + applications: [ + { + application: 'enterprise-search', + privileges: ['engine:read'], + resources: ['engine:my-index'], + }, + ], + }, + }, + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/server/lib/engines/create_api_key.ts b/x-pack/plugins/enterprise_search/server/lib/engines/create_api_key.ts new file mode 100644 index 0000000000000..508ed6d56bd59 --- /dev/null +++ b/x-pack/plugins/enterprise_search/server/lib/engines/create_api_key.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; + +export const createApiKey = async ( + client: IScopedClusterClient, + engineName: string, + keyName: string +) => { + return await client.asCurrentUser.security.createApiKey({ + name: keyName, + role_descriptors: { + [`${engineName}-key-role`]: { + applications: [ + { + application: 'enterprise-search', + privileges: ['engine:read'], + resources: [`engine:${engineName}`], + }, + ], + }, + }, + }); +}; diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.test.ts index e966e3eb2cb1f..663806c147e34 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.test.ts @@ -231,4 +231,71 @@ describe('engines routes', () => { mockRouter.shouldThrow(request); }); }); + + describe('GET /internal/enterprise_search/engines/{engine_name}/search', () => { + let mockRouter: MockRouter; + + beforeEach(() => { + jest.clearAllMocks(); + mockRouter = new MockRouter({ + method: 'get', + path: '/internal/enterprise_search/engines/{engine_name}/search', + }); + + registerEnginesRoutes({ + ...mockDependencies, + router: mockRouter.router, + }); + }); + it('creates a request to enterprise search', () => { + expect(mockRequestHandler.createRequest).toHaveBeenCalledWith({ + path: '/api/engines/:engine_name/_search', + }); + }); + + it('validates correctly with engine_name and pagination', () => { + const request = { + body: { + query: 'test-query', + fields: ['test-field-1', 'test-field-2'], + }, + params: { + engine_name: 'some-engine', + from: 0, + size: 10, + }, + }; + + mockRouter.shouldValidate(request); + }); + + it('validates correctly with default pagination and no body', () => { + const request = { + params: { + engine_name: 'my-test-engine', + }, + }; + + mockRouter.shouldValidate(request); + }); + + it('validation with query and without fields', () => { + const request = { + params: { + engine_name: 'my-test-engine', + }, + body: { + query: 'sample-query', + fields: [], + }, + }; + mockRouter.shouldValidate(request); + }); + + it('fails validation without engine name', () => { + const request = { params: {} }; + + mockRouter.shouldThrow(request); + }); + }); }); diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.ts index ade72d09c2148..c64c86b35fadb 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.ts @@ -6,11 +6,15 @@ */ import { schema } from '@kbn/config-schema'; +import { createApiKey } from '../../lib/engines/create_api_key'; + import { RouteDependencies } from '../../plugin'; +import { elasticsearchErrorHandler } from '../../utils/elasticsearch_error_handler'; export function registerEnginesRoutes({ router, enterpriseSearchRequestHandler, + log, }: RouteDependencies) { router.get( { @@ -81,4 +85,47 @@ export function registerEnginesRoutes({ path: '/api/engines/:engine_name', }) ); + + router.post( + { + path: '/internal/enterprise_search/engines/{engine_name}/api_key', + validate: { + body: schema.object({ + keyName: schema.string(), + }), + params: schema.object({ + engine_name: schema.string(), + }), + }, + }, + elasticsearchErrorHandler(log, async (context, request, response) => { + const engineName = decodeURIComponent(request.params.engine_name); + const { keyName } = request.body; + const { client } = (await context.core).elasticsearch; + + const apiKey = await createApiKey(client, engineName, keyName); + + return response.ok({ + body: { apiKey }, + headers: { 'content-type': 'application/json' }, + }); + }) + ); + + router.get( + { + path: '/internal/enterprise_search/engines/{engine_name}/search', + validate: { + body: schema.object({}, { unknowns: 'allow' }), + params: schema.object({ + engine_name: schema.string(), + from: schema.maybe(schema.number()), + size: schema.maybe(schema.number()), + }), + }, + }, + enterpriseSearchRequestHandler.createRequest({ + path: '/api/engines/:engine_name/_search', + }) + ); } diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts index b1ffa830a9a83..238a882142b7c 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/indices.ts @@ -120,7 +120,7 @@ export function registerIndexRoutes({ meta: { page: { current: page, - size: indices.length, + size, total_pages: totalPages, total_results: totalResults, }, diff --git a/x-pack/plugins/fleet/common/constants/agent_policy.ts b/x-pack/plugins/fleet/common/constants/agent_policy.ts index 3a24bbd4a18c0..8e818ddf206cc 100644 --- a/x-pack/plugins/fleet/common/constants/agent_policy.ts +++ b/x-pack/plugins/fleet/common/constants/agent_policy.ts @@ -25,6 +25,7 @@ export const AGENT_POLICY_DEFAULT_MONITORING_DATASETS = [ 'elastic_agent.auditbeat', 'elastic_agent.heartbeat', 'elastic_agent.cloudbeat', + 'elastic_agent.cloud_defend', ]; export const LICENSE_FOR_SCHEDULE_UPGRADE = 'platinum'; diff --git a/x-pack/plugins/fleet/common/types/models/agent.ts b/x-pack/plugins/fleet/common/types/models/agent.ts index fb7c513762784..e530ca152addd 100644 --- a/x-pack/plugins/fleet/common/types/models/agent.ts +++ b/x-pack/plugins/fleet/common/types/models/agent.ts @@ -163,6 +163,7 @@ export interface AgentDiagnostics { filePath: string; status: 'READY' | 'AWAITING_UPLOAD' | 'DELETED' | 'IN_PROGRESS' | 'FAILED'; actionId: string; + error?: string; } // Generated from FleetServer schema.json diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_diagnostics/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_diagnostics/index.tsx index b0a588a1d12c4..2c38fdfba536b 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_diagnostics/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_diagnostics/index.tsx @@ -37,6 +37,10 @@ const FlexStartEuiFlexItem = styled(EuiFlexItem)` align-self: flex-start; `; +const MarginedIcon = styled(EuiIcon)` + margin-right: 7px; +`; + export interface AgentDiagnosticsProps { agent: Agent; } @@ -48,6 +52,7 @@ export const AgentDiagnosticsTab: React.FunctionComponent const [isLoading, setIsLoading] = useState(true); const [diagnosticsEntries, setDiagnosticEntries] = useState([]); const [prevDiagnosticsEntries, setPrevDiagnosticEntries] = useState([]); + const [loadInterval, setLoadInterval] = useState(10000); const loadData = useCallback(async () => { try { @@ -59,8 +64,20 @@ export const AgentDiagnosticsTab: React.FunctionComponent if (!uploadsResponse.data) { throw new Error('No data'); } - setDiagnosticEntries(uploadsResponse.data.items); + const entries = uploadsResponse.data.items; + setDiagnosticEntries(entries); setIsLoading(false); + + // query faster if an action is in progress, for quicker feedback + if ( + entries.some( + (entry) => entry.status === 'IN_PROGRESS' || entry.status === 'AWAITING_UPLOAD' + ) + ) { + setLoadInterval(3000); + } else { + setLoadInterval(10000); + } } catch (err) { notifications.toasts.addError(err, { title: i18n.translate( @@ -71,13 +88,13 @@ export const AgentDiagnosticsTab: React.FunctionComponent ), }); } - }, [agent.id, notifications.toasts]); + }, [agent.id, notifications.toasts, setLoadInterval]); useEffect(() => { loadData(); const interval: ReturnType | null = setInterval(async () => { loadData(); - }, 10000); + }, loadInterval); const cleanup = () => { if (interval) { @@ -86,7 +103,7 @@ export const AgentDiagnosticsTab: React.FunctionComponent }; return cleanup; - }, [loadData]); + }, [loadData, loadInterval]); useEffect(() => { setPrevDiagnosticEntries(diagnosticsEntries); @@ -112,6 +129,9 @@ export const AgentDiagnosticsTab: React.FunctionComponent } }, [prevDiagnosticsEntries, diagnosticsEntries, notifications.toasts]); + const errorIcon = ; + const getErrorMessage = (error?: string) => (error ? `Error: ${error}` : ''); + const columns: Array> = [ { field: 'id', @@ -123,21 +143,32 @@ export const AgentDiagnosticsTab: React.FunctionComponent   {currentItem?.name} ) : currentItem?.status === 'IN_PROGRESS' || currentItem?.status === 'AWAITING_UPLOAD' ? ( - +   - + ) : ( - - - - + + {currentItem?.status ? ( + +

Diagnostics status: {currentItem?.status}

+

{getErrorMessage(currentItem?.error)}

+ + } + > + {errorIcon} +
+ ) : ( + errorIcon + )}   {currentItem?.name} -
+ ); }, }, @@ -149,7 +180,7 @@ export const AgentDiagnosticsTab: React.FunctionComponent const currentItem = diagnosticsEntries.find((item) => item.id === id); return ( - {formatDate(currentItem?.createTime, 'll')} + {formatDate(currentItem?.createTime, 'lll')} ); }, @@ -171,6 +202,7 @@ export const AgentDiagnosticsTab: React.FunctionComponent } ); notifications.toasts.addSuccess(successMessage); + loadData(); } catch (error) { setIsSubmitting(false); notifications.toasts.addError(error, { diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/license_modal.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/license_modal.tsx index eafdbfb2debe2..51aa501b71b42 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/license_modal.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/license_modal.tsx @@ -53,9 +53,7 @@ export const LicenseModal: React.FunctionComponent = ({ return ( - -

{licenseName}

-
+ {licenseName}
diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/notice_modal.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/notice_modal.tsx index f933912754889..4ef6dde3fb2f6 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/notice_modal.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/overview/notice_modal.tsx @@ -48,9 +48,7 @@ export const NoticeModal: React.FunctionComponent = ({ noticePath, onClos return ( - -

NOTICE.txt

-
+ NOTICE.txt
diff --git a/x-pack/plugins/fleet/server/collectors/agent_logs_panics.ts b/x-pack/plugins/fleet/server/collectors/agent_logs_panics.ts new file mode 100644 index 0000000000000..b3e0a5c47d77f --- /dev/null +++ b/x-pack/plugins/fleet/server/collectors/agent_logs_panics.ts @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; + +const AGENT_LOGS_INDEX_PATTERN = 'logs-elastic_agent-*'; +const MAX_MESSAGE_COUNT = 100; + +export interface AgentPanicLogsData { + agent_logs_panics_last_hour: Array<{ message: string; timestamp: string }>; +} + +interface MaybeLogsDoc { + message?: string; + '@timestamp'?: string; +} +const DEFAULT_LOGS_DATA = { + agent_logs_panics_last_hour: [], +}; + +export async function getPanicLogsLastHour( + esClient?: ElasticsearchClient +): Promise { + if (!esClient) { + return DEFAULT_LOGS_DATA; + } + + const res = await esClient.search({ + index: AGENT_LOGS_INDEX_PATTERN, + size: MAX_MESSAGE_COUNT, + sort: [{ '@timestamp': 'desc' }], + _source: ['message', '@timestamp'], + query: { + bool: { + filter: [ + { + range: { + '@timestamp': { + gte: 'now-1h', + }, + }, + }, + { + match: { + message: 'panic', + }, + }, + ], + }, + }, + }); + + const panicLogsLastHour = res.hits.hits.map((hit) => ({ + message: hit._source?.message || '', + timestamp: hit._source?.['@timestamp'] || '', + })); + + return { + agent_logs_panics_last_hour: panicLogsLastHour, + }; +} diff --git a/x-pack/plugins/fleet/server/collectors/agent_logs.ts b/x-pack/plugins/fleet/server/collectors/agent_logs_top_errors.ts similarity index 100% rename from x-pack/plugins/fleet/server/collectors/agent_logs.ts rename to x-pack/plugins/fleet/server/collectors/agent_logs_top_errors.ts diff --git a/x-pack/plugins/fleet/server/collectors/register.ts b/x-pack/plugins/fleet/server/collectors/register.ts index de199234693ec..876a60a2d9f67 100644 --- a/x-pack/plugins/fleet/server/collectors/register.ts +++ b/x-pack/plugins/fleet/server/collectors/register.ts @@ -19,6 +19,8 @@ import type { PackageUsage } from './package_collectors'; import { getFleetServerUsage, getFleetServerConfig } from './fleet_server_collector'; import type { FleetServerUsage } from './fleet_server_collector'; import { getAgentPoliciesUsage } from './agent_policies'; +import type { AgentPanicLogsData } from './agent_logs_panics'; +import { getPanicLogsLastHour } from './agent_logs_panics'; export interface Usage { agents_enabled: boolean; @@ -39,6 +41,7 @@ export interface FleetUsage extends Usage { degraded: number; }; agents_per_policy: number[]; + agent_logs_panics_last_hour: AgentPanicLogsData['agent_logs_panics_last_hour']; agent_logs_top_errors?: string[]; fleet_server_logs_top_errors?: string[]; } @@ -47,7 +50,7 @@ export const fetchFleetUsage = async ( core: CoreSetup, config: FleetConfigType, abortController: AbortController -) => { +): Promise => { const [soClient, esClient] = await getInternalClients(core); if (!soClient || !esClient) { return; @@ -60,6 +63,7 @@ export const fetchFleetUsage = async ( ...(await getAgentData(esClient, abortController)), fleet_server_config: await getFleetServerConfig(soClient), agent_policies: await getAgentPoliciesUsage(esClient, abortController), + ...(await getPanicLogsLastHour(esClient)), // TODO removed top errors telemetry as it causes this issue: https://github.com/elastic/kibana/issues/148976 // ...(await getAgentLogsTopErrors(esClient)), }; 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 d662f28300020..73f4af6c3038d 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 @@ -181,7 +181,7 @@ describe('fleet usage telemetry', () => { await esClient.create({ index: 'logs-elastic_agent-default', - id: 'log1', + id: 'panic1', body: { log: { level: 'error', @@ -192,6 +192,45 @@ describe('fleet usage telemetry', () => { refresh: 'wait_for', }); + await esClient.create({ + index: 'logs-elastic_agent-default', + id: 'panic2', + body: { + log: { + level: 'error', + }, + '@timestamp': new Date(Date.now() - 1000 * 60).toISOString(), + message: 'stderr panic some other panic', + }, + refresh: 'wait_for', + }); + + await esClient.create({ + index: 'logs-elastic_agent-default', + id: 'not-panic', + body: { + log: { + level: 'error', + }, + '@timestamp': new Date().toISOString(), + message: 'this should not be included in metrics', + }, + refresh: 'wait_for', + }); + + await esClient.create({ + index: 'logs-elastic_agent-default', + id: 'panic-outside-time-range', + body: { + log: { + level: 'error', + }, + '@timestamp': new Date(Date.now() - 2000 * 60 * 60).toISOString(), + message: 'stderr panic this should not be included in metrics', + }, + refresh: 'wait_for', + }); + await esClient.create({ index: 'logs-elastic_agent.fleet_server-default', id: 'log2', @@ -286,6 +325,16 @@ describe('fleet usage telemetry', () => { ], }, agent_policies: { count: 3, output_types: ['elasticsearch'] }, + agent_logs_panics_last_hour: [ + { + timestamp: expect.any(String), + message: 'stderr panic close of closed channel', + }, + { + timestamp: expect.any(String), + message: 'stderr panic some other panic', + }, + ], // agent_logs_top_errors: ['stderr panic close of closed channel'], // fleet_server_logs_top_errors: ['failed to unenroll offline agents'], }) diff --git a/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/monitoring_permissions.test.ts.snap b/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/monitoring_permissions.test.ts.snap index d46e7a92475ac..3917a7d71533b 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/monitoring_permissions.test.ts.snap +++ b/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/monitoring_permissions.test.ts.snap @@ -117,6 +117,7 @@ Object { "logs-elastic_agent.auditbeat-testnamespace123", "logs-elastic_agent.heartbeat-testnamespace123", "logs-elastic_agent.cloudbeat-testnamespace123", + "logs-elastic_agent.cloud_defend-testnamespace123", "metrics-elastic_agent-testnamespace123", "metrics-elastic_agent.elastic_agent-testnamespace123", "metrics-elastic_agent.apm_server-testnamespace123", @@ -129,6 +130,7 @@ Object { "metrics-elastic_agent.auditbeat-testnamespace123", "metrics-elastic_agent.heartbeat-testnamespace123", "metrics-elastic_agent.cloudbeat-testnamespace123", + "metrics-elastic_agent.cloud_defend-testnamespace123", ], "privileges": Array [ "auto_configure", @@ -158,6 +160,7 @@ Object { "logs-elastic_agent.auditbeat-testnamespace123", "logs-elastic_agent.heartbeat-testnamespace123", "logs-elastic_agent.cloudbeat-testnamespace123", + "logs-elastic_agent.cloud_defend-testnamespace123", ], "privileges": Array [ "auto_configure", @@ -187,6 +190,7 @@ Object { "metrics-elastic_agent.auditbeat-testnamespace123", "metrics-elastic_agent.heartbeat-testnamespace123", "metrics-elastic_agent.cloudbeat-testnamespace123", + "metrics-elastic_agent.cloud_defend-testnamespace123", ], "privileges": Array [ "auto_configure", diff --git a/x-pack/plugins/fleet/server/services/agents/uploads.ts b/x-pack/plugins/fleet/server/services/agents/uploads.ts index 7402eedc840ed..3683b9b0d90a7 100644 --- a/x-pack/plugins/fleet/server/services/agents/uploads.ts +++ b/x-pack/plugins/fleet/server/services/agents/uploads.ts @@ -31,21 +31,24 @@ export async function getAgentUploads( esClient: ElasticsearchClient, agentId: string ): Promise { - const getFile = async (fileId: string) => { - if (!fileId) return; + const getFile = async (actionId: string) => { try { const fileResponse = await esClient.search({ index: FILE_STORAGE_METADATA_AGENT_INDEX, query: { bool: { filter: { - term: { upload_id: fileId }, + bool: { + must: [{ term: { agent_id: agentId } }, { term: { action_id: actionId } }], + }, }, }, }, }); - if (fileResponse.hits.total === 0) { - appContextService.getLogger().debug(`No matches for upload_id ${fileId}`); + if (fileResponse.hits.hits.length === 0) { + appContextService + .getLogger() + .debug(`No matches for action_id ${actionId} and agent_id ${agentId}`); return; } return { @@ -64,10 +67,14 @@ export async function getAgentUploads( const actions = await _getRequestDiagnosticsActions(esClient, agentId); - const results = []; + const results: AgentDiagnostics[] = []; for (const action of actions) { - const file = action.fileId ? await getFile(action.fileId) : undefined; - const fileName = file?.name ?? `${moment(action.timestamp!).format('YYYY-MM-DD HH:mm:ss')}.zip`; + const file = await getFile(action.actionId); + const fileName = + file?.name ?? + `elastic-agent-diagnostics-${moment + .utc(action.timestamp!) + .format('YYYY-MM-DDTHH-mm-ss')}Z-00.zip`; const filePath = file ? agentRouteService.getAgentFileDownloadLink(file.id, file.name) : ''; const result = { actionId: action.actionId, @@ -76,6 +83,7 @@ export async function getAgentUploads( name: fileName, createTime: action.timestamp!, filePath, + error: action.error, }; results.push(result); } @@ -91,6 +99,7 @@ async function _getRequestDiagnosticsActions( index: AGENT_ACTIONS_INDEX, ignore_unavailable: true, size: SO_SEARCH_LIMIT, + sort: { '@timestamp': 'desc' }, query: { bool: { must: [ @@ -150,7 +159,7 @@ async function _getRequestDiagnosticsActions( const actionResult = actionResults.find((result) => result.actionId === action.actionId); return { actionId: action.actionId, - timestamp: actionResult?.timestamp ?? action.timestamp, + timestamp: action.timestamp, fileId: actionResult?.fileId, error: actionResult?.error, }; diff --git a/x-pack/plugins/fleet/server/services/telemetry/fleet_usages_schema.ts b/x-pack/plugins/fleet/server/services/telemetry/fleet_usages_schema.ts index c8ef4c32b9938..d92628f5e2971 100644 --- a/x-pack/plugins/fleet/server/services/telemetry/fleet_usages_schema.ts +++ b/x-pack/plugins/fleet/server/services/telemetry/fleet_usages_schema.ts @@ -189,4 +189,26 @@ export const fleetUsagesSchema: RootSchema = { }, }, }, + agent_logs_panics_last_hour: { + type: 'array', + _meta: { + description: 'Array of log messages containing the word panic from the last hour', + }, + items: { + properties: { + timestamp: { + type: 'date', + _meta: { + description: 'Timestamp of the log message containing the word panic', + }, + }, + message: { + type: 'text', + _meta: { + description: 'Log message containing the word panic', + }, + }, + }, + }, + }, }; diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index daa701442a178..c0ad0a8417e77 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -447,7 +447,12 @@ export class Embeddable private get activeVisualizationState() { if (!this.activeVisualization) return; - return this.activeVisualization.initialize(() => '', this.savedVis?.state.visualization); + return ( + this.activeVisualization.fromPersistableState?.( + this.savedVis?.state.visualization, + this.savedVis?.references + ) || this.activeVisualization.initialize(() => '', this.savedVis?.state.visualization) + ); } private indexPatterns: IndexPatternMap = {}; diff --git a/x-pack/plugins/license_management/__jest__/__snapshots__/request_trial_extension.test.js.snap b/x-pack/plugins/license_management/__jest__/__snapshots__/request_trial_extension.test.js.snap index 16119656ce53b..abaa2ffaccd0d 100644 --- a/x-pack/plugins/license_management/__jest__/__snapshots__/request_trial_extension.test.js.snap +++ b/x-pack/plugins/license_management/__jest__/__snapshots__/request_trial_extension.test.js.snap @@ -33,7 +33,7 @@ exports[`RequestTrialExtension component should display when enterprise license
subscription features @@ -61,7 +61,7 @@ exports[`RequestTrialExtension component should display when enterprise license class="euiButton emotion-euiButtonDisplay-m-defaultMinWidth-m-base-primary" data-test-subj="extendTrialButton" href="https://www.elastic.co/trialextension" - rel="noopener" + rel="noopener noreferrer" target="_blank" > subscription features @@ -137,7 +137,7 @@ exports[`RequestTrialExtension component should display when license is active a class="euiButton emotion-euiButtonDisplay-m-defaultMinWidth-m-base-primary" data-test-subj="extendTrialButton" href="https://www.elastic.co/trialextension" - rel="noopener" + rel="noopener noreferrer" target="_blank" > subscription features @@ -213,7 +213,7 @@ exports[`RequestTrialExtension component should display when license is not acti class="euiButton emotion-euiButtonDisplay-m-defaultMinWidth-m-base-primary" data-test-subj="extendTrialButton" href="https://www.elastic.co/trialextension" - rel="noopener" + rel="noopener noreferrer" target="_blank" > subscription features @@ -289,7 +289,7 @@ exports[`RequestTrialExtension component should display when platinum license is class="euiButton emotion-euiButtonDisplay-m-defaultMinWidth-m-base-primary" data-test-subj="extendTrialButton" href="https://www.elastic.co/trialextension" - rel="noopener" + rel="noopener noreferrer" target="_blank" > subscription features @@ -107,7 +107,7 @@ exports[`RevertToBasic component should display when license is expired 1`] = ` subscription features @@ -181,7 +181,7 @@ exports[`RevertToBasic component should display when trial is active 1`] = ` subscription features diff --git a/x-pack/plugins/license_management/__jest__/__snapshots__/start_trial.test.js.snap b/x-pack/plugins/license_management/__jest__/__snapshots__/start_trial.test.js.snap index 0f13544c3ee1b..1caa3ed2851d8 100644 --- a/x-pack/plugins/license_management/__jest__/__snapshots__/start_trial.test.js.snap +++ b/x-pack/plugins/license_management/__jest__/__snapshots__/start_trial.test.js.snap @@ -33,7 +33,7 @@ exports[`StartTrial component when trial is allowed display for basic license 1` subscription features @@ -107,7 +107,7 @@ exports[`StartTrial component when trial is allowed should display for expired e subscription features @@ -181,7 +181,7 @@ exports[`StartTrial component when trial is allowed should display for expired p subscription features @@ -255,7 +255,7 @@ exports[`StartTrial component when trial is allowed should display for gold lice subscription features diff --git a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/custom_icon_modal.test.tsx.snap b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/custom_icon_modal.test.tsx.snap index b21e9b36d89ff..ea6691fa10021 100644 --- a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/custom_icon_modal.test.tsx.snap +++ b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/__snapshots__/custom_icon_modal.test.tsx.snap @@ -8,10 +8,10 @@ exports[`should render a custom icon modal with an existing icon 1`] = ` onClose={[Function]} > - -

- Edit custom icon -

+ + Edit custom icon
@@ -230,10 +230,10 @@ exports[`should render an empty custom icon modal 1`] = ` onClose={[Function]} > - -

- Custom Icon -

+ + Custom Icon
diff --git a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/custom_icon_modal.tsx b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/custom_icon_modal.tsx index 76659ba9c50bc..6b29efe840945 100644 --- a/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/custom_icon_modal.tsx +++ b/x-pack/plugins/maps/public/classes/styles/vector/components/symbol/custom_icon_modal.tsx @@ -328,9 +328,7 @@ export class CustomIconModal extends Component { initialFocus=".mapsCustomIconForm__image" > - -

{title}

-
+ {title}
diff --git a/x-pack/plugins/ml/common/constants/locator.ts b/x-pack/plugins/ml/common/constants/locator.ts index 74e321e06108a..6ef9d2c27c40d 100644 --- a/x-pack/plugins/ml/common/constants/locator.ts +++ b/x-pack/plugins/ml/common/constants/locator.ts @@ -43,11 +43,16 @@ export const ML_PAGES = { ANOMALY_DETECTION_CREATE_JOB_MULTI_METRIC: 'jobs/new_job/multi_metric', ANOMALY_DETECTION_CREATE_JOB_CONVERT_TO_MULTI_METRIC: 'jobs/new_job/convert_to_multi_metric', ANOMALY_DETECTION_CREATE_JOB_ADVANCED: 'jobs/new_job/advanced', + ANOMALY_DETECTION_CREATE_JOB_POPULATION: 'jobs/new_job/population', + ANOMALY_DETECTION_CREATE_JOB_CATEGORIZATION: 'jobs/new_job/categorization', + ANOMALY_DETECTION_CREATE_JOB_RARE: 'jobs/new_job/rare', + ANOMALY_DETECTION_CREATE_JOB_GEO: 'jobs/new_job/geo', ANOMALY_DETECTION_CREATE_JOB_CONVERT_TO_ADVANCED: 'jobs/new_job/convert_to_advanced', ANOMALY_DETECTION_CREATE_JOB_SELECT_TYPE: 'jobs/new_job/step/job_type', ANOMALY_DETECTION_CREATE_JOB_SELECT_INDEX: 'jobs/new_job/step/index_or_search', ANOMALY_DETECTION_CREATE_JOB_FROM_LENS: 'jobs/new_job/from_lens', ANOMALY_DETECTION_CREATE_JOB_FROM_MAP: 'jobs/new_job/from_map', + ANOMALY_DETECTION_MODULES_VIEW_OR_CREATE: '/modules/check_view_or_create', SETTINGS: 'settings', CALENDARS_MANAGE: 'settings/calendars_list', CALENDARS_NEW: 'settings/calendars_list/new_calendar', diff --git a/x-pack/plugins/ml/public/application/components/anomalies_table/anomaly_details_utils.tsx b/x-pack/plugins/ml/public/application/components/anomalies_table/anomaly_details_utils.tsx index 0254c27f67906..c0229af5683ac 100644 --- a/x-pack/plugins/ml/public/application/components/anomalies_table/anomaly_details_utils.tsx +++ b/x-pack/plugins/ml/public/application/components/anomalies_table/anomaly_details_utils.tsx @@ -16,6 +16,7 @@ import { useEuiTheme, EuiText, EuiSpacer, + EuiLink, } from '@elastic/eui'; import { EntityCell, EntityCellFilter } from '../entity_cell'; import { formatHumanReadableDateTimeSeconds } from '../../../../common/util/date_utils'; @@ -30,6 +31,7 @@ import { getAnomalyScoreExplanationImpactValue, getSeverityColor, } from '../../../../common/util/anomaly_utils'; +import { useMlKibana } from '../../contexts/kibana'; const TIME_FIELD_NAME = 'timestamp'; @@ -327,6 +329,11 @@ export const DetailsItems: FC<{ }; export const AnomalyExplanationDetails: FC<{ anomaly: AnomaliesTableRecord }> = ({ anomaly }) => { + const { + services: { docLinks }, + } = useMlKibana(); + const docsUrl = docLinks.links.ml.anomalyDetectionScoreExplanation; + const explanation = anomaly.source.anomaly_score_explanation; if (explanation === undefined) { return null; @@ -513,10 +520,21 @@ export const AnomalyExplanationDetails: FC<{ anomaly: AnomaliesTableRecord }> =

+ + + ), + }} />

+ {explanationDetails.map(({ title, description }) => ( diff --git a/x-pack/plugins/ml/public/application/components/delete_space_aware_item_check_modal/delete_space_aware_item_check_modal.tsx b/x-pack/plugins/ml/public/application/components/delete_space_aware_item_check_modal/delete_space_aware_item_check_modal.tsx index 8ac2a22be5a93..4b576695c981a 100644 --- a/x-pack/plugins/ml/public/application/components/delete_space_aware_item_check_modal/delete_space_aware_item_check_modal.tsx +++ b/x-pack/plugins/ml/public/application/components/delete_space_aware_item_check_modal/delete_space_aware_item_check_modal.tsx @@ -339,12 +339,10 @@ export const DeleteSpaceAwareItemCheckModal: FC = ({ <> -

- -

+
diff --git a/x-pack/plugins/ml/public/application/components/validate_job/validate_job_view.js b/x-pack/plugins/ml/public/application/components/validate_job/validate_job_view.js index cc76a708fc77b..64910f5abfd21 100644 --- a/x-pack/plugins/ml/public/application/components/validate_job/validate_job_view.js +++ b/x-pack/plugins/ml/public/application/components/validate_job/validate_job_view.js @@ -84,9 +84,7 @@ const LoadingSpinner = () => ( const Modal = ({ close, title, children }) => ( - -

{title}

-
+ {title}
{children} diff --git a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_to_dashboard_controls.tsx b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_to_dashboard_controls.tsx index a5b24a2290d67..d030cfc9b92b6 100644 --- a/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_to_dashboard_controls.tsx +++ b/x-pack/plugins/ml/public/application/explorer/dashboard_controls/add_to_dashboard_controls.tsx @@ -81,9 +81,7 @@ export const AddToDashboardControl: FC = ({ return ( - -

{title}

-
+ {title}
{children} diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/close_jobs_confirm_modal.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/close_jobs_confirm_modal.tsx index e1ec74412990b..f0c78c3828aeb 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/close_jobs_confirm_modal.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/confirm_modals/close_jobs_confirm_modal.tsx @@ -87,9 +87,7 @@ export const CloseJobsConfirmModal: FC = ({ return ( - -

{title}

-
+ {title}
= ({ return ( - -

{title}

-
+ {title}
= ({ setShowFunction, unsetShowFunction, -

- -

+
diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/tabs/custom_urls.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/tabs/custom_urls.tsx index d77ed5c3bb2db..9a7508c634c6b 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/tabs/custom_urls.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/edit_job_flyout/tabs/custom_urls.tsx @@ -288,12 +288,10 @@ class CustomUrlsUI extends Component { > -

- -

+
diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/reset_job_modal/reset_job_modal.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/reset_job_modal/reset_job_modal.tsx index 55891b3b3b579..335b19bd3a794 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/reset_job_modal/reset_job_modal.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/reset_job_modal/reset_job_modal.tsx @@ -87,16 +87,14 @@ export const ResetJobModal: FC = ({ setShowFunction, unsetShowFunction, r -

- -

+
diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/start_datafeed_modal.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/start_datafeed_modal.js index 3a2728a810427..c4c53b00591f4 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/start_datafeed_modal.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/start_datafeed_modal/start_datafeed_modal.js @@ -149,16 +149,14 @@ export class StartDatafeedModal extends Component { > -

- -

+
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx index 9617458c6e811..cc3b20966935b 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx @@ -129,12 +129,10 @@ export const ChangeDataViewModal: FC = ({ onClose }) => { -

- -

+
diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/advanced_detector_modal/modal_wrapper.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/advanced_detector_modal/modal_wrapper.tsx index 3ab60cd8225cc..12344c651bd11 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/advanced_detector_modal/modal_wrapper.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/pick_fields_step/components/advanced_detector_modal/modal_wrapper.tsx @@ -34,12 +34,10 @@ export const ModalWrapper: FC = ({ onCreateClick, closeModal, saveEnabled > -

- -

+
diff --git a/x-pack/plugins/ml/public/application/routing/router.tsx b/x-pack/plugins/ml/public/application/routing/router.tsx index 7a2d631e7a8ad..e050bea78a5c9 100644 --- a/x-pack/plugins/ml/public/application/routing/router.tsx +++ b/x-pack/plugins/ml/public/application/routing/router.tsx @@ -23,6 +23,7 @@ import { MlNotificationsContextProvider } from '../contexts/ml/ml_notifications_ import { MlContext, MlContextValue } from '../contexts/ml'; import { MlPage } from '../components/ml_page'; +import { MlPages } from '../../locator'; // custom RouteProps making location non-optional interface MlRouteProps extends RouteProps { @@ -91,3 +92,7 @@ export const MlRouter: FC<{ ); + +export function createPath(page: MlPages, additionalPrefix?: string) { + return `/${page}${additionalPrefix ? `${additionalPrefix}` : ''}`; +} diff --git a/x-pack/plugins/ml/public/application/routing/routes/access_denied.tsx b/x-pack/plugins/ml/public/application/routing/routes/access_denied.tsx index ee89ddcad8f60..1868c521c72fd 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/access_denied.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/access_denied.tsx @@ -7,7 +7,8 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; -import { MlRoute, PageLoader, PageProps } from '../router'; +import { ML_PAGES } from '../../../locator'; +import { createPath, MlRoute, PageLoader, PageProps } from '../router'; import { useResolver } from '../use_resolver'; import { Page } from '../../access_denied'; @@ -20,7 +21,7 @@ const breadcrumbs = [ ]; export const accessDeniedRouteFactory = (): MlRoute => ({ - path: '/access-denied', + path: createPath(ML_PAGES.ACCESS_DENIED), title: i18n.translate('xpack.ml.accessDeniedLabel', { defaultMessage: 'Access denied', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/aiops/change_point_detection.tsx b/x-pack/plugins/ml/public/application/routing/routes/aiops/change_point_detection.tsx index 47be592377825..8d85c09f5ddf1 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/aiops/change_point_detection.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/aiops/change_point_detection.tsx @@ -9,10 +9,11 @@ import { CHANGE_POINT_DETECTION_ENABLED } from '@kbn/aiops-plugin/common'; import { i18n } from '@kbn/i18n'; import React, { FC } from 'react'; import { parse } from 'query-string'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; import { MlRoute } from '../..'; import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; -import { PageLoader, PageProps } from '../../router'; +import { createPath, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { checkBasicLicense } from '../../../license'; import { cacheDataViewsContract } from '../../../util/index_utils'; @@ -23,7 +24,7 @@ export const changePointDetectionRouteFactory = ( basePath: string ): MlRoute => ({ id: 'change_point_detection', - path: '/aiops/change_point_detection', + path: createPath(ML_PAGES.AIOPS_CHANGE_POINT_DETECTION), title: i18n.translate('xpack.ml.aiops.changePointDetection.docTitle', { defaultMessage: 'Change point detection', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/aiops/explain_log_rate_spikes.tsx b/x-pack/plugins/ml/public/application/routing/routes/aiops/explain_log_rate_spikes.tsx index e101efff47a2b..ac9728f0c54a0 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/aiops/explain_log_rate_spikes.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/aiops/explain_log_rate_spikes.tsx @@ -12,9 +12,10 @@ import { i18n } from '@kbn/i18n'; import { AIOPS_ENABLED } from '@kbn/aiops-plugin/common'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { ExplainLogRateSpikesPage as Page } from '../../../aiops/explain_log_rate_spikes'; @@ -28,7 +29,7 @@ export const explainLogRateSpikesRouteFactory = ( basePath: string ): MlRoute => ({ id: 'explain_log_rate_spikes', - path: '/aiops/explain_log_rate_spikes', + path: createPath(ML_PAGES.AIOPS_EXPLAIN_LOG_RATE_SPIKES), title: i18n.translate('xpack.ml.aiops.explainLogRateSpikes.docTitle', { defaultMessage: 'Explain log rate spikes', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/aiops/log_categorization.tsx b/x-pack/plugins/ml/public/application/routing/routes/aiops/log_categorization.tsx index f08c2973a6f8b..e3aebb87b5341 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/aiops/log_categorization.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/aiops/log_categorization.tsx @@ -12,9 +12,10 @@ import { i18n } from '@kbn/i18n'; import { AIOPS_ENABLED } from '@kbn/aiops-plugin/common'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { LogCategorizationPage as Page } from '../../../aiops/log_categorization'; @@ -28,7 +29,7 @@ export const logCategorizationRouteFactory = ( basePath: string ): MlRoute => ({ id: 'log_categorization', - path: '/aiops/log_categorization', + path: createPath(ML_PAGES.AIOPS_LOG_CATEGORIZATION), title: i18n.translate('xpack.ml.aiops.logCategorization.docTitle', { defaultMessage: 'Log Pattern Analysis', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_creation.tsx b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_creation.tsx index 68927001ece60..fa0899ea23475 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_creation.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_creation.tsx @@ -10,9 +10,10 @@ import { parse } from 'query-string'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { Page } from '../../../data_frame_analytics/pages/analytics_creation'; @@ -26,7 +27,7 @@ export const analyticsJobsCreationRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/data_frame_analytics/new_job', + path: createPath(ML_PAGES.DATA_FRAME_ANALYTICS_CREATE_JOB), render: (props, deps) => , title: i18n.translate('xpack.ml.dataFrameAnalytics.createJob.docTitle', { defaultMessage: 'Create Job', diff --git a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_exploration.tsx b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_exploration.tsx index eb05087a28770..d47780553eede 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_exploration.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_job_exploration.tsx @@ -10,9 +10,10 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; import { useUrlState } from '@kbn/ml-url-state'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { Page } from '../../../data_frame_analytics/pages/analytics_exploration'; @@ -23,7 +24,7 @@ export const analyticsJobExplorationRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/data_frame_analytics/exploration', + path: createPath(ML_PAGES.DATA_FRAME_ANALYTICS_EXPLORATION), render: (props, deps) => , title: i18n.translate('xpack.ml.dataFrameAnalytics.exploration.docTitle', { defaultMessage: 'Results Explorer', diff --git a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx index 044c16cc7f7e0..fd3a365d01179 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_jobs_list.tsx @@ -7,8 +7,9 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { Page } from '../../../data_frame_analytics/pages/analytics_management'; @@ -19,7 +20,7 @@ export const analyticsJobsListRouteFactory = ( basePath: string ): MlRoute => ({ id: 'data_frame_analytics', - path: '/data_frame_analytics', + path: createPath(ML_PAGES.DATA_FRAME_ANALYTICS_JOBS_MANAGE), title: i18n.translate('xpack.ml.dataFrameAnalytics.jobs.docTitle', { defaultMessage: 'Data Frame Analytics Jobs', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_map.tsx b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_map.tsx index 3945231a03a70..faae919f722c8 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_map.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_map.tsx @@ -8,9 +8,10 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { Page } from '../../../data_frame_analytics/pages/job_map/page'; @@ -20,7 +21,7 @@ export const analyticsMapRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/data_frame_analytics/map', + path: createPath(ML_PAGES.DATA_FRAME_ANALYTICS_MAP), render: (props, deps) => , title: i18n.translate('xpack.ml.dataFrameAnalytics.analyticsMap.docTitle', { defaultMessage: 'Analytics Map', diff --git a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_source_selection.tsx b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_source_selection.tsx index 93214cfece0c3..e9ffcc509b153 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_source_selection.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/data_frame_analytics/analytics_source_selection.tsx @@ -9,9 +9,10 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { Page } from '../../../data_frame_analytics/pages/source_selection'; @@ -21,7 +22,7 @@ export const analyticsSourceSelectionRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/data_frame_analytics/source_selection', + path: createPath(ML_PAGES.DATA_FRAME_ANALYTICS_SOURCE_SELECTION), render: (props, deps) => , title: i18n.translate('xpack.ml.dataFrameAnalytics.sourceSelection.docTitle', { defaultMessage: 'Source Selection', diff --git a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/datavisualizer.tsx b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/datavisualizer.tsx index 1c1edb35fca14..ad01c2d97b718 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/datavisualizer.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/datavisualizer.tsx @@ -7,8 +7,9 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { DatavisualizerSelector } from '../../../datavisualizer'; import { checkBasicLicense } from '../../../license'; @@ -20,7 +21,7 @@ export const selectorRouteFactory = ( basePath: string ): MlRoute => ({ id: 'datavisualizer', - path: '/datavisualizer', + path: createPath(ML_PAGES.DATA_VISUALIZER), title: i18n.translate('xpack.ml.dataVisualizer.docTitle', { defaultMessage: 'Data Visualizer', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/file_based.tsx b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/file_based.tsx index 1ef046e4c3c84..3d048e8d40283 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/file_based.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/file_based.tsx @@ -8,9 +8,10 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { FileDataVisualizerPage } from '../../../datavisualizer/file_based'; @@ -25,7 +26,7 @@ export const fileBasedRouteFactory = ( basePath: string ): MlRoute => ({ id: 'filedatavisualizer', - path: '/filedatavisualizer', + path: createPath(ML_PAGES.DATA_VISUALIZER_FILE), title: i18n.translate('xpack.ml.dataVisualizer.file.docTitle', { defaultMessage: 'File Data Visualizer', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index_based.tsx b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index_based.tsx index 28fef8b3786b7..1ba865435280c 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index_based.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/datavisualizer/index_based.tsx @@ -10,9 +10,10 @@ import { parse } from 'query-string'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { IndexDataVisualizerPage as Page } from '../../../datavisualizer/index_based/index_data_visualizer'; @@ -26,7 +27,7 @@ export const indexBasedRouteFactory = ( basePath: string ): MlRoute => ({ id: 'data_view_datavisualizer', - path: '/jobs/new_job/datavisualizer', + path: createPath(ML_PAGES.DATA_VISUALIZER_INDEX_VIEWER), title: i18n.translate('xpack.ml.dataVisualizer.dataView.docTitle', { defaultMessage: 'Index Data Visualizer', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/explorer.tsx b/x-pack/plugins/ml/public/application/routing/routes/explorer.tsx index 962d7b30a7da0..e7e672248f625 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/explorer.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/explorer.tsx @@ -14,11 +14,12 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { EuiThemeProvider as StyledComponentsThemeProvider } from '@kbn/kibana-react-plugin/common'; import { useUrlState } from '@kbn/ml-url-state'; import { useTimefilter } from '@kbn/ml-date-picker'; +import { ML_PAGES } from '../../../locator'; import { NavigateToPath, useMlKibana } from '../../contexts/kibana'; import { MlJobWithTimeRange } from '../../../../common/types/anomaly_detection_jobs'; -import { MlRoute, PageLoader, PageProps } from '../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../router'; import { useRefresh } from '../use_refresh'; import { useResolver } from '../use_resolver'; import { basicResolvers } from '../resolvers'; @@ -50,7 +51,7 @@ export const explorerRouteFactory = ( basePath: string ): MlRoute => ({ id: 'explorer', - path: '/explorer', + path: createPath(ML_PAGES.ANOMALY_EXPLORER), title: i18n.translate('xpack.ml.anomalyDetection.anomalyExplorer.docTitle', { defaultMessage: 'Anomaly Explorer', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/jobs_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/jobs_list.tsx index bfd183a628689..68c0cdbe6a24f 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/jobs_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/jobs_list.tsx @@ -13,9 +13,10 @@ import { useRefreshIntervalUpdates, useTimefilter, } from '@kbn/ml-date-picker'; +import { ML_PAGES } from '../../../locator'; import { NavigateToPath } from '../../contexts/kibana'; import { DEFAULT_REFRESH_INTERVAL_MS } from '../../../../common/constants/jobs_list'; -import { MlRoute, PageLoader, PageProps } from '../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../router'; import { useResolver } from '../use_resolver'; import { basicResolvers } from '../resolvers'; import { JobsPage } from '../../jobs/jobs_list'; @@ -28,7 +29,7 @@ export const jobListRouteFactory = (navigateToPath: NavigateToPath, basePath: st title: i18n.translate('xpack.ml.anomalyDetection.jobs.docTitle', { defaultMessage: 'Anomaly Detection Jobs', }), - path: '/jobs', + path: createPath(ML_PAGES.ANOMALY_DETECTION_JOBS_MANAGE), render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), diff --git a/x-pack/plugins/ml/public/application/routing/routes/new_job/from_lens.tsx b/x-pack/plugins/ml/public/application/routing/routes/new_job/from_lens.tsx index ad24bcfba89a9..a0690b4987bc0 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/new_job/from_lens.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/new_job/from_lens.tsx @@ -10,13 +10,14 @@ import React, { FC } from 'react'; import { Redirect } from 'react-router-dom'; import { parse } from 'query-string'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { ML_PAGES } from '../../../../locator'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { resolver } from '../../../jobs/new_job/job_from_lens'; export const fromLensRouteFactory = (): MlRoute => ({ - path: '/jobs/new_job/from_lens', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_FROM_LENS), render: (props, deps) => , breadcrumbs: [], }); @@ -32,5 +33,9 @@ const PageWrapper: FC = ({ location, deps }) => { const { context } = useResolver(undefined, undefined, deps.config, deps.dataViewsContract, { redirect: () => resolver(lensId, vis, from, to, query, filters, layerIndex), }); - return {}; + return ( + + {} + + ); }; diff --git a/x-pack/plugins/ml/public/application/routing/routes/new_job/from_map.tsx b/x-pack/plugins/ml/public/application/routing/routes/new_job/from_map.tsx index e9c68f010bbf0..3f1ebb04162e6 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/new_job/from_map.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/new_job/from_map.tsx @@ -10,13 +10,14 @@ import React, { FC } from 'react'; import { Redirect } from 'react-router-dom'; import { parse } from 'query-string'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { ML_PAGES } from '../../../../locator'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { resolver } from '../../../jobs/new_job/job_from_map'; export const fromMapRouteFactory = (): MlRoute => ({ - path: '/jobs/new_job/from_map', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_FROM_MAP), render: (props, deps) => , breadcrumbs: [], }); @@ -39,5 +40,9 @@ const PageWrapper: FC = ({ location, deps }) => { redirect: () => resolver(dashboard, dataViewId, embeddable, geoField, splitField, from, to, layer), }); - return {}; + 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 b7513db067e2f..0383b48eabadc 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 @@ -9,9 +9,10 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath, useMlKibana } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { Page, preConfiguredJobRedirect } from '../../../jobs/new_job/pages/index_or_search'; @@ -87,11 +88,11 @@ export const indexOrSearchRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/jobs/new_job/step/index_or_search', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_SELECT_INDEX), render: (props, deps) => ( @@ -104,14 +105,14 @@ export const dataVizIndexOrSearchRouteFactory = ( basePath: string ): MlRoute => ({ id: 'data_view_datavisualizer', - path: '/datavisualizer_index_select', + path: createPath(ML_PAGES.DATA_VISUALIZER_INDEX_SELECT), title: i18n.translate('xpack.ml.selectDataViewLabel', { defaultMessage: 'Select Data View', }), render: (props, deps) => ( @@ -124,14 +125,14 @@ export const explainLogRateSpikesIndexOrSearchRouteFactory = ( basePath: string ): MlRoute => ({ id: 'data_view_explain_log_rate_spikes', - path: '/aiops/explain_log_rate_spikes_index_select', + path: createPath(ML_PAGES.AIOPS_EXPLAIN_LOG_RATE_SPIKES_INDEX_SELECT), title: i18n.translate('xpack.ml.selectDataViewLabel', { defaultMessage: 'Select Data View', }), render: (props, deps) => ( @@ -144,14 +145,14 @@ export const logCategorizationIndexOrSearchRouteFactory = ( basePath: string ): MlRoute => ({ id: 'data_view_log_categorization', - path: '/aiops/log_categorization_index_select', + path: createPath(ML_PAGES.AIOPS_LOG_CATEGORIZATION_INDEX_SELECT), title: i18n.translate('xpack.ml.selectDataViewLabel', { defaultMessage: 'Select Data View', }), render: (props, deps) => ( @@ -164,14 +165,14 @@ export const changePointDetectionIndexOrSearchRouteFactory = ( basePath: string ): MlRoute => ({ id: 'data_view_change_point_detection', - path: '/aiops/change_point_detection_index_select', + path: createPath(ML_PAGES.AIOPS_CHANGE_POINT_DETECTION_INDEX_SELECT), title: i18n.translate('xpack.ml.selectDataViewLabel', { defaultMessage: 'Select Data View', }), render: (props, deps) => ( diff --git a/x-pack/plugins/ml/public/application/routing/routes/new_job/job_type.tsx b/x-pack/plugins/ml/public/application/routing/routes/new_job/job_type.tsx index cdd2b890f086e..e1d38875bc1dd 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/new_job/job_type.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/new_job/job_type.tsx @@ -10,16 +10,17 @@ import { parse } from 'query-string'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { Page } from '../../../jobs/new_job/pages/job_type'; import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; export const jobTypeRouteFactory = (navigateToPath: NavigateToPath, basePath: string): MlRoute => ({ - path: '/jobs/new_job/step/job_type', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_SELECT_TYPE), render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), diff --git a/x-pack/plugins/ml/public/application/routing/routes/new_job/new_job.tsx b/x-pack/plugins/ml/public/application/routing/routes/new_job/new_job.tsx index 87e5c0cab7cc3..305acac9ce852 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/new_job/new_job.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/new_job/new_job.tsx @@ -7,16 +7,17 @@ import React, { FC } from 'react'; import { Redirect } from 'react-router-dom'; +import { ML_PAGES } from '../../../../locator'; -import { MlRoute } from '../../router'; +import { createPath, MlRoute } from '../../router'; export const newJobRouteFactory = (): MlRoute => ({ - path: '/jobs/new_job', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB), render: () => , // no breadcrumbs since it's just a redirect breadcrumbs: [], }); const Page: FC = () => { - return ; + return ; }; diff --git a/x-pack/plugins/ml/public/application/routing/routes/new_job/recognize.tsx b/x-pack/plugins/ml/public/application/routing/routes/new_job/recognize.tsx index 7e7da6c79a858..a68bb0d861a5c 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/new_job/recognize.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/new_job/recognize.tsx @@ -10,9 +10,10 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath, useNavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { Page } from '../../../jobs/new_job/recognize'; @@ -25,7 +26,7 @@ export const recognizeRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/jobs/new_job/recognize', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_RECOGNIZER), render: (props, deps) => , breadcrumbs: [ getBreadcrumbWithUrlForApp('ML_BREADCRUMB', navigateToPath, basePath), @@ -41,7 +42,7 @@ export const recognizeRouteFactory = ( }); export const checkViewOrCreateRouteFactory = (): MlRoute => ({ - path: '/modules/check_view_or_create', + path: createPath(ML_PAGES.ANOMALY_DETECTION_MODULES_VIEW_OR_CREATE), render: (props, deps) => , // no breadcrumbs since it's just a redirect breadcrumbs: [], diff --git a/x-pack/plugins/ml/public/application/routing/routes/new_job/wizard.tsx b/x-pack/plugins/ml/public/application/routing/routes/new_job/wizard.tsx index 2f0ef09e06cf6..8a4640a346a85 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/new_job/wizard.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/new_job/wizard.tsx @@ -12,7 +12,7 @@ import { Redirect } from 'react-router-dom'; import { NavigateToPath } from '../../../contexts/kibana'; import { basicResolvers } from '../../resolvers'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { Page } from '../../../jobs/new_job/pages/new_job'; import { JOB_TYPE } from '../../../../../common/constants/new_job'; @@ -110,7 +110,7 @@ export const singleMetricRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/jobs/new_job/single_metric', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_SINGLE_METRIC), render: (props, deps) => , breadcrumbs: getSingleMetricBreadcrumbs(navigateToPath, basePath), }); @@ -119,15 +119,23 @@ export const multiMetricRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/jobs/new_job/multi_metric', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_MULTI_METRIC), render: (props, deps) => , breadcrumbs: getMultiMetricBreadcrumbs(navigateToPath, basePath), }); // redirect route to reset the job wizard when converting to multi metric job export const multiMetricRouteFactoryRedirect = (): MlRoute => ({ - path: '/jobs/new_job/convert_to_multi_metric', - render: (props) => , + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_CONVERT_TO_MULTI_METRIC), + render: (props) => ( + + ), + breadcrumbs: [], }); @@ -135,7 +143,7 @@ export const populationRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/jobs/new_job/population', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_POPULATION), render: (props, deps) => , breadcrumbs: getPopulationBreadcrumbs(navigateToPath, basePath), }); @@ -144,15 +152,19 @@ export const advancedRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/jobs/new_job/advanced', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_ADVANCED), render: (props, deps) => , breadcrumbs: getAdvancedBreadcrumbs(navigateToPath, basePath), }); // redirect route to reset the job wizard when converting to advanced job export const advancedRouteFactoryRedirect = (): MlRoute => ({ - path: '/jobs/new_job/convert_to_advanced', - render: (props) => , + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_CONVERT_TO_ADVANCED), + render: (props) => ( + + ), breadcrumbs: [], }); @@ -160,19 +172,19 @@ export const categorizationRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/jobs/new_job/categorization', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_CATEGORIZATION), render: (props, deps) => , breadcrumbs: getCategorizationBreadcrumbs(navigateToPath, basePath), }); export const rareRouteFactory = (navigateToPath: NavigateToPath, basePath: string): MlRoute => ({ - path: '/jobs/new_job/rare', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_RARE), render: (props, deps) => , breadcrumbs: getRareBreadcrumbs(navigateToPath, basePath), }); export const geoRouteFactory = (navigateToPath: NavigateToPath, basePath: string): MlRoute => ({ - path: '/jobs/new_job/geo', + path: createPath(ML_PAGES.ANOMALY_DETECTION_CREATE_JOB_GEO), render: (props, deps) => , breadcrumbs: getGeoBreadcrumbs(navigateToPath, basePath), }); diff --git a/x-pack/plugins/ml/public/application/routing/routes/notifications.tsx b/x-pack/plugins/ml/public/application/routing/routes/notifications.tsx index c85b2c732fe25..cb7cbc0c48c6e 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/notifications.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/notifications.tsx @@ -8,7 +8,8 @@ import React, { FC, Suspense } from 'react'; import { i18n } from '@kbn/i18n'; import { useTimefilter } from '@kbn/ml-date-picker'; -import { PageLoader, PageProps } from '../router'; +import { ML_PAGES } from '../../../locator'; +import { createPath, PageLoader, PageProps } from '../router'; import { useResolver } from '../use_resolver'; import { checkFullLicense } from '../../license'; import { checkGetJobsCapabilitiesResolver } from '../../capabilities/check_capabilities'; @@ -25,7 +26,7 @@ export const notificationsRouteFactory = ( basePath: string ): MlRoute => ({ id: 'notifications', - path: '/notifications', + path: createPath(ML_PAGES.NOTIFICATIONS), title: i18n.translate('xpack.ml.notifications.notificationsLabel', { defaultMessage: 'Notifications', }), 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 4f3edf38f08aa..139e4635ce412 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/overview.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/overview.tsx @@ -12,13 +12,14 @@ import { Redirect } from 'react-router-dom'; import { useTimefilter } from '@kbn/ml-date-picker'; +import { ML_PAGES } from '../../../locator'; import type { NavigateToPath } from '../../contexts/kibana'; import { checkFullLicense } from '../../license'; import { checkGetJobsCapabilitiesResolver } from '../../capabilities/check_capabilities'; import { getMlNodeCount } from '../../ml_nodes_check'; import { loadMlServerInfo } from '../../services/ml_server_info'; -import { MlRoute, PageLoader, PageProps } from '../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../router'; import { useResolver } from '../use_resolver'; import { getBreadcrumbWithUrlForApp } from '../breadcrumbs'; @@ -29,7 +30,7 @@ export const overviewRouteFactory = ( basePath: string ): MlRoute => ({ id: 'overview', - path: '/overview', + path: createPath(ML_PAGES.OVERVIEW), title: i18n.translate('xpack.ml.overview.overviewLabel', { defaultMessage: 'Overview', }), @@ -75,5 +76,5 @@ export const appRootRouteFactory = (navigateToPath: NavigateToPath, basePath: st }); const Page: FC = () => { - return ; + return ; }; diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_list.tsx index faf78b8a302d7..e257f0cde5aac 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_list.tsx @@ -8,8 +8,9 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; import { useTimefilter } from '@kbn/ml-date-picker'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { checkFullLicense } from '../../../license'; import { @@ -24,7 +25,7 @@ export const calendarListRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/settings/calendars_list', + path: createPath(ML_PAGES.CALENDARS_MANAGE), title: i18n.translate('xpack.ml.settings.calendarList.docTitle', { defaultMessage: 'Calendars', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_new_edit.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_new_edit.tsx index 95a9a38d95fcf..9753e790cd543 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_new_edit.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/calendar_new_edit.tsx @@ -9,7 +9,7 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; import { useTimefilter } from '@kbn/ml-date-picker'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { checkFullLicense } from '../../../license'; import { @@ -35,7 +35,7 @@ export const newCalendarRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/settings/calendars_list/new_calendar', + path: createPath(ML_PAGES.CALENDARS_NEW), title: i18n.translate('xpack.ml.settings.createCalendar.docTitle', { defaultMessage: 'Create Calendar', }), @@ -57,7 +57,7 @@ export const editCalendarRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/settings/calendars_list/edit_calendar/:calendarId', + path: createPath(ML_PAGES.CALENDARS_EDIT, '/:calendarId'), title: i18n.translate('xpack.ml.settings.editCalendar.docTitle', { defaultMessage: 'Edit Calendar', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list.tsx index a8a1ffeb48c72..d4e8b61ef4870 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list.tsx @@ -8,8 +8,9 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; import { useTimefilter } from '@kbn/ml-date-picker'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { checkFullLicense } from '../../../license'; import { @@ -24,7 +25,7 @@ export const filterListRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/settings/filter_lists', + path: createPath(ML_PAGES.FILTER_LISTS_MANAGE), title: i18n.translate('xpack.ml.settings.filterList.docTitle', { defaultMessage: 'Filters', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list_new_edit.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list_new_edit.tsx index ce761541492bc..c501760080624 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list_new_edit.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/filter_list_new_edit.tsx @@ -22,7 +22,7 @@ import { checkMlNodesAvailable } from '../../../ml_nodes_check/check_ml_nodes'; import { EditFilterList } from '../../../settings/filter_lists'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; @@ -39,7 +39,7 @@ export const newFilterListRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/settings/filter_lists/new_filter_list', + path: createPath(ML_PAGES.FILTER_LISTS_NEW), title: i18n.translate('xpack.ml.settings.createFilter.docTitle', { defaultMessage: 'Create Filter', }), @@ -61,7 +61,7 @@ export const editFilterListRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/settings/filter_lists/edit_filter_list/:filterId', + path: createPath(ML_PAGES.FILTER_LISTS_EDIT, '/:filterId'), title: i18n.translate('xpack.ml.settings.editFilter.docTitle', { defaultMessage: 'Edit Filter', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/settings/settings.tsx b/x-pack/plugins/ml/public/application/routing/routes/settings/settings.tsx index 6d41c8eb8685f..2e994cc4f85f9 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/settings/settings.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/settings/settings.tsx @@ -8,8 +8,9 @@ import React, { FC } from 'react'; import { i18n } from '@kbn/i18n'; import { useTimefilter } from '@kbn/ml-date-picker'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { checkFullLicense } from '../../../license'; import { @@ -25,7 +26,7 @@ export const settingsRouteFactory = ( basePath: string ): MlRoute => ({ id: 'settings', - path: '/settings', + path: createPath(ML_PAGES.SETTINGS), title: i18n.translate('xpack.ml.settings.docTitle', { defaultMessage: 'Settings', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/timeseriesexplorer.tsx b/x-pack/plugins/ml/public/application/routing/routes/timeseriesexplorer.tsx index c2d0fbabdd863..e89a2cff13873 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/timeseriesexplorer.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/timeseriesexplorer.tsx @@ -14,6 +14,7 @@ import { i18n } from '@kbn/i18n'; import { useUrlState } from '@kbn/ml-url-state'; import { useTimefilter } from '@kbn/ml-date-picker'; +import { ML_PAGES } from '../../../locator'; import { getViewableDetectors } from '../../timeseriesexplorer/timeseriesexplorer_utils/get_viewable_detectors'; import { NavigateToPath, useNotifications } from '../../contexts/kibana'; import { useMlContext } from '../../contexts/ml'; @@ -36,7 +37,7 @@ import { TimeseriesexplorerNoJobsFound } from '../../timeseriesexplorer/componen import { useTableInterval } from '../../components/controls/select_interval'; import { useTableSeverity } from '../../components/controls/select_severity'; -import { MlRoute, PageLoader, PageProps } from '../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../router'; import { useResolver } from '../use_resolver'; import { basicResolvers } from '../resolvers'; import { getBreadcrumbWithUrlForApp } from '../breadcrumbs'; @@ -55,7 +56,7 @@ export const timeSeriesExplorerRouteFactory = ( basePath: string ): MlRoute => ({ id: 'timeseriesexplorer', - path: '/timeseriesexplorer', + path: createPath(ML_PAGES.SINGLE_METRIC_VIEWER), title: i18n.translate('xpack.ml.anomalyDetection.singleMetricViewerLabel', { defaultMessage: 'Single Metric Viewer', }), diff --git a/x-pack/plugins/ml/public/application/routing/routes/trained_models/models_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/trained_models/models_list.tsx index 2f89b8dff4e6d..e2b0b2709df52 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/trained_models/models_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/trained_models/models_list.tsx @@ -9,21 +9,21 @@ import React, { FC } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; import { ModelsList } from '../../../trained_models/models_management'; import { MlPageHeader } from '../../../components/page_header'; -import { TechnicalPreviewBadge } from '../../../components/technical_preview_badge'; export const modelsListRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ id: 'trained_models', - path: '/trained_models', + path: createPath(ML_PAGES.TRAINED_MODELS_MANAGE), title: i18n.translate('xpack.ml.modelManagement.trainedModels.docTitle', { defaultMessage: 'Trained Models', }), @@ -60,9 +60,6 @@ const PageWrapper: FC = ({ location, deps }) => { defaultMessage="Trained Models" /> - - -
diff --git a/x-pack/plugins/ml/public/application/routing/routes/trained_models/nodes_list.tsx b/x-pack/plugins/ml/public/application/routing/routes/trained_models/nodes_list.tsx index 9d09de3660f25..e6003f161b1c6 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/trained_models/nodes_list.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/trained_models/nodes_list.tsx @@ -10,20 +10,20 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { useTimefilter } from '@kbn/ml-date-picker'; +import { ML_PAGES } from '../../../../locator'; import { NavigateToPath } from '../../../contexts/kibana'; -import { MlRoute, PageLoader, PageProps } from '../../router'; +import { createPath, MlRoute, PageLoader, PageProps } from '../../router'; import { useResolver } from '../../use_resolver'; import { basicResolvers } from '../../resolvers'; import { getBreadcrumbWithUrlForApp } from '../../breadcrumbs'; import { NodesList } from '../../../trained_models/nodes_overview'; import { MlPageHeader } from '../../../components/page_header'; -import { TechnicalPreviewBadge } from '../../../components/technical_preview_badge'; export const nodesListRouteFactory = ( navigateToPath: NavigateToPath, basePath: string ): MlRoute => ({ - path: '/trained_models/nodes', + path: createPath(ML_PAGES.TRAINED_MODELS_NODES), render: (props, deps) => , title: i18n.translate('xpack.ml.modelManagement.nodesOverview.docTitle', { defaultMessage: 'Nodes', @@ -59,9 +59,6 @@ const PageWrapper: FC = ({ location, deps }) => { defaultMessage="Nodes" /> - - - diff --git a/x-pack/plugins/ml/public/application/settings/calendars/edit/import_modal/__snapshots__/import_modal.test.js.snap b/x-pack/plugins/ml/public/application/settings/calendars/edit/import_modal/__snapshots__/import_modal.test.js.snap index 61449ab5168d9..16074e3849d02 100644 --- a/x-pack/plugins/ml/public/application/settings/calendars/edit/import_modal/__snapshots__/import_modal.test.js.snap +++ b/x-pack/plugins/ml/public/application/settings/calendars/edit/import_modal/__snapshots__/import_modal.test.js.snap @@ -15,13 +15,11 @@ exports[`ImportModal Renders import modal 1`] = ` grow={false} > -

- -

+
-

- -

+
diff --git a/x-pack/plugins/ml/public/application/settings/calendars/edit/new_event_modal/new_event_modal.js b/x-pack/plugins/ml/public/application/settings/calendars/edit/new_event_modal/new_event_modal.js index 255405c8cd265..ae2815ebb5cd6 100644 --- a/x-pack/plugins/ml/public/application/settings/calendars/edit/new_event_modal/new_event_modal.js +++ b/x-pack/plugins/ml/public/application/settings/calendars/edit/new_event_modal/new_event_modal.js @@ -266,12 +266,10 @@ export class NewEventModal extends Component { > -

- -

+
diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/modal.js b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/modal.js index 1ae5ee2b05604..9b7adcf2bce32 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/modal.js +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/modal.js @@ -33,12 +33,10 @@ export function Modal(props) { -

- -

+
diff --git a/x-pack/plugins/ml/public/application/trained_models/models_management/delete_models_modal.tsx b/x-pack/plugins/ml/public/application/trained_models/models_management/delete_models_modal.tsx index f6799469fd1e6..b4f0bc0ec505e 100644 --- a/x-pack/plugins/ml/public/application/trained_models/models_management/delete_models_modal.tsx +++ b/x-pack/plugins/ml/public/application/trained_models/models_management/delete_models_modal.tsx @@ -69,16 +69,14 @@ export const DeleteModelsModal: FC = ({ modelIds, onClos > -

- -

+
diff --git a/x-pack/plugins/ml/public/application/trained_models/models_management/deployment_setup.tsx b/x-pack/plugins/ml/public/application/trained_models/models_management/deployment_setup.tsx index c999376eebeaf..4c4bd6293bc8a 100644 --- a/x-pack/plugins/ml/public/application/trained_models/models_management/deployment_setup.tsx +++ b/x-pack/plugins/ml/public/application/trained_models/models_management/deployment_setup.tsx @@ -23,10 +23,7 @@ import { EuiCallOut, EuiSpacer, EuiDescribedFormGroup, - EuiFlexGroup, - EuiFlexItem, EuiLink, - EuiTitle, } from '@elastic/eui'; import { toMountPoint, wrapWithTheme } from '@kbn/kibana-react-plugin/public'; import type { Observable } from 'rxjs'; @@ -285,30 +282,20 @@ export const StartUpdateDeploymentModal: FC = ({ data-test-subj="mlModelsStartDeploymentModal" > - - - - -

- {isUpdate ? ( - - ) : ( - - )} -

-
-
- - -
+ + {isUpdate ? ( + + ) : ( + + )}
diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_initializer.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_initializer.tsx index 9c2c373a3c1e2..70f263e6283ea 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_initializer.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_initializer.tsx @@ -53,12 +53,10 @@ export const AnomalyChartsInitializer: FC = ({ > -

- -

+
diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx index c4c2fc7262eac..e5e2c2fd3b6be 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx @@ -93,12 +93,10 @@ export const AnomalySwimlaneInitializer: FC = ( -

- -

+
diff --git a/x-pack/plugins/ml/public/locator/index.ts b/x-pack/plugins/ml/public/locator/index.ts index eb5b0ce189830..7a37805f1f36d 100644 --- a/x-pack/plugins/ml/public/locator/index.ts +++ b/x-pack/plugins/ml/public/locator/index.ts @@ -5,6 +5,6 @@ * 2.0. */ -export { ML_PAGES } from '../../common/constants/locator'; +export { ML_PAGES, type MlPages } from '../../common/constants/locator'; export * from './ml_locator'; export { useMlHref } from './use_ml_href'; diff --git a/x-pack/plugins/monitoring/common/constants.ts b/x-pack/plugins/monitoring/common/constants.ts index d7e607f53b01c..d8c442f7c7bc2 100644 --- a/x-pack/plugins/monitoring/common/constants.ts +++ b/x-pack/plugins/monitoring/common/constants.ts @@ -190,7 +190,7 @@ export const BEATS_SYSTEM_ID = 'beats'; * The name of the Enterprise Search System ID used to publish and look up Enterprise Search stats through the Monitoring system. * @type {string} */ -export const ENTERPRISE_SEARCH_SYSTEM_ID = 'enterprise_search'; +export const ENTERPRISE_SEARCH_SYSTEM_ID = 'enterprisesearch'; /** * The name of the Apm System ID used to publish and look up Apm stats through the Monitoring system. diff --git a/x-pack/plugins/monitoring/public/alerts/enable_alerts_modal.tsx b/x-pack/plugins/monitoring/public/alerts/enable_alerts_modal.tsx index ca1af4d464efa..ad2d029296538 100644 --- a/x-pack/plugins/monitoring/public/alerts/enable_alerts_modal.tsx +++ b/x-pack/plugins/monitoring/public/alerts/enable_alerts_modal.tsx @@ -84,12 +84,10 @@ export const EnableAlertsModal: React.FC = ({ alerts }: Props) => { -

- -

+
diff --git a/x-pack/plugins/monitoring/public/components/no_data/explanations/exporters/__snapshots__/exporters.test.js.snap b/x-pack/plugins/monitoring/public/components/no_data/explanations/exporters/__snapshots__/exporters.test.js.snap index adb64f6bec54c..dc54838631c06 100644 --- a/x-pack/plugins/monitoring/public/components/no_data/explanations/exporters/__snapshots__/exporters.test.js.snap +++ b/x-pack/plugins/monitoring/public/components/no_data/explanations/exporters/__snapshots__/exporters.test.js.snap @@ -82,7 +82,7 @@ Array [
Elasticsearch Service Console @@ -102,7 +102,7 @@ Array [ Logs and metrics @@ -122,7 +122,7 @@ Array [ the documentation page. diff --git a/x-pack/plugins/monitoring/public/components/no_data/reasons/__snapshots__/reason_found.test.js.snap b/x-pack/plugins/monitoring/public/components/no_data/reasons/__snapshots__/reason_found.test.js.snap index 76dc6356116ae..f0cd3be053d26 100644 --- a/x-pack/plugins/monitoring/public/components/no_data/reasons/__snapshots__/reason_found.test.js.snap +++ b/x-pack/plugins/monitoring/public/components/no_data/reasons/__snapshots__/reason_found.test.js.snap @@ -149,7 +149,7 @@ Array [ Elasticsearch Service Console @@ -169,7 +169,7 @@ Array [ Logs and metrics @@ -189,7 +189,7 @@ Array [ the documentation page. diff --git a/x-pack/plugins/monitoring/server/lib/cluster/get_index_patterns.ts b/x-pack/plugins/monitoring/server/lib/cluster/get_index_patterns.ts index 8d31cea037864..1af9397027803 100644 --- a/x-pack/plugins/monitoring/server/lib/cluster/get_index_patterns.ts +++ b/x-pack/plugins/monitoring/server/lib/cluster/get_index_patterns.ts @@ -69,7 +69,7 @@ export function getLegacyIndexPattern({ case 'beats': indexPattern = INDEX_PATTERN_BEATS; break; - case 'enterprise_search': + case 'enterprisesearch': indexPattern = INDEX_PATTERN_ENTERPRISE_SEARCH; break; case 'filebeat': @@ -127,6 +127,7 @@ export const getElasticsearchDataset = getDataset('elasticsearch'); export const getKibanaDataset = getDataset('kibana'); export const getLogstashDataset = getDataset('logstash'); export const getBeatDataset = getDataset('beats'); +export const getEntsearchDataset = getDataset('enterprisesearch'); function buildDatasetPattern( moduleType?: INDEX_PATTERN_TYPES, diff --git a/x-pack/plugins/monitoring/server/lib/enterprise_search/create_enterprise_search_query.ts b/x-pack/plugins/monitoring/server/lib/enterprise_search/create_enterprise_search_query.ts index 5e5c972d2ba46..4204166b4a381 100644 --- a/x-pack/plugins/monitoring/server/lib/enterprise_search/create_enterprise_search_query.ts +++ b/x-pack/plugins/monitoring/server/lib/enterprise_search/create_enterprise_search_query.ts @@ -8,6 +8,7 @@ import { EnterpriseSearchMetric, EnterpriseSearchMetricFields } from '../metrics'; import { createQuery } from '../create_query'; import { STANDALONE_CLUSTER_CLUSTER_UUID } from '../../../common/constants'; +import { getEntsearchDataset } from '../cluster/get_index_patterns'; /** * {@code createQuery} for all Enterprise Search instances. @@ -53,6 +54,8 @@ export function createEnterpriseSearchQuery(options: { }, { term: { 'event.dataset': 'enterprisesearch.health' } }, { term: { 'event.dataset': 'enterprisesearch.stats' } }, + { term: { 'data_stream.dataset': getEntsearchDataset('health') } }, + { term: { 'data_stream.dataset': getEntsearchDataset('stats') } }, ], }, }); diff --git a/x-pack/plugins/monitoring/server/lib/enterprise_search/get_enterprise_search_for_clusters.ts b/x-pack/plugins/monitoring/server/lib/enterprise_search/get_enterprise_search_for_clusters.ts index bff7e5db5dc92..0011c965c8654 100644 --- a/x-pack/plugins/monitoring/server/lib/enterprise_search/get_enterprise_search_for_clusters.ts +++ b/x-pack/plugins/monitoring/server/lib/enterprise_search/get_enterprise_search_for_clusters.ts @@ -9,7 +9,7 @@ import { TimeRange } from '../../../common/http_api/shared'; import { ElasticsearchResponse } from '../../../common/types/es'; import { Globals } from '../../static_globals'; import { Cluster, LegacyRequest } from '../../types'; -import { getLegacyIndexPattern } from '../cluster/get_index_patterns'; +import { getIndexPatterns } from '../cluster/get_index_patterns'; import { EnterpriseSearchMetric } from '../metrics'; import { createEnterpriseSearchQuery } from './create_enterprise_search_query'; import { @@ -37,8 +37,8 @@ export function getEnterpriseSearchForClusters( const config = req.server.config; const maxBucketSize = config.ui.max_bucket_size; - const indexPatterns = getLegacyIndexPattern({ - moduleType: 'enterprise_search', + const indexPatterns = getIndexPatterns({ + moduleType: 'enterprisesearch', ccs, config: Globals.app.config, }); diff --git a/x-pack/plugins/monitoring/server/lib/enterprise_search/get_stats.ts b/x-pack/plugins/monitoring/server/lib/enterprise_search/get_stats.ts index 751295823c3a1..526e7ec919405 100644 --- a/x-pack/plugins/monitoring/server/lib/enterprise_search/get_stats.ts +++ b/x-pack/plugins/monitoring/server/lib/enterprise_search/get_stats.ts @@ -10,7 +10,7 @@ import { TimeRange } from '../../../common/http_api/shared'; import { ElasticsearchResponse } from '../../../common/types/es'; import { Globals } from '../../static_globals'; import { LegacyRequest } from '../../types'; -import { getLegacyIndexPattern } from '../cluster/get_index_patterns'; +import { getIndexPatterns } from '../cluster/get_index_patterns'; import { createEnterpriseSearchQuery } from './create_enterprise_search_query'; import { entSearchAggFilterPath, @@ -27,9 +27,8 @@ export async function getStats( const end = moment.utc(req.payload.timeRange.max).valueOf(); const maxBucketSize = config.ui.max_bucket_size; - // just get the legacy pattern since no integration exists yet - const indexPattern = getLegacyIndexPattern({ - moduleType: 'enterprise_search', + const indexPattern = getIndexPatterns({ + moduleType: 'enterprisesearch', config: Globals.app.config, ccs: req.payload.ccs, }); diff --git a/x-pack/plugins/monitoring/server/lib/setup/collection/get_collection_status.ts b/x-pack/plugins/monitoring/server/lib/setup/collection/get_collection_status.ts index 6357339a4a681..6d800e83c2d7c 100644 --- a/x-pack/plugins/monitoring/server/lib/setup/collection/get_collection_status.ts +++ b/x-pack/plugins/monitoring/server/lib/setup/collection/get_collection_status.ts @@ -26,7 +26,7 @@ interface Bucket { }; } -type COLLECTION_PRODUCT_NAMES = Exclude; +type COLLECTION_PRODUCT_NAMES = Exclude; const NUMBER_OF_SECONDS_AGO_TO_LOOK = 30; diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/_health/errors_helpers/errors_query.ts b/x-pack/plugins/monitoring/server/routes/api/v1/_health/errors_helpers/errors_query.ts index 0c2fd16bf487c..11ec39ed06203 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/_health/errors_helpers/errors_query.ts +++ b/x-pack/plugins/monitoring/server/routes/api/v1/_health/errors_helpers/errors_query.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { MetricbeatMonitoredProduct, PackagesMonitoredProduct, QueryOptions } from '../types'; +import type { MonitoredProduct, QueryOptions } from '../types'; const MAX_BUCKET_SIZE = 50; @@ -14,7 +14,7 @@ const MAX_BUCKET_SIZE = 50; * Each module (beats, kibana...) can contain one or multiple metricsets with error messages */ interface ErrorsQueryOptions extends QueryOptions { - products: MetricbeatMonitoredProduct[] | PackagesMonitoredProduct[]; + products: Array>; errorQueryType: 'metricbeatErrorsQuery' | 'packageErrorsQuery'; errorQueryIsDataStream?: boolean; } @@ -47,7 +47,7 @@ export const errorsQuery = ({ }, { range: { - timestamp: { + '@timestamp': { gte: timeRange.min, lte: timeRange.max, }, diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/_health/index.ts b/x-pack/plugins/monitoring/server/routes/api/v1/_health/index.ts index 1b5f7e7eac294..8a04150a7bbde 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/_health/index.ts +++ b/x-pack/plugins/monitoring/server/routes/api/v1/_health/index.ts @@ -60,9 +60,10 @@ export function registerV1HealthRoute(server: MonitoringCore) { getDsIndexPattern({ config, moduleType: 'kibana' }), getDsIndexPattern({ config, moduleType: 'logstash' }), getDsIndexPattern({ config, moduleType: 'beats' }), + getDsIndexPattern({ config, moduleType: 'enterprisesearch' }), ].join(','); - const entSearchIndex = getIndexPatterns({ config, moduleType: 'enterprise_search' }); + const entSearchIndex = getIndexPatterns({ config, moduleType: 'enterprisesearch' }); const monitoredClustersFn = () => fetchMonitoredClusters({ diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/build_monitored_clusters.ts b/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/build_monitored_clusters.ts index 2a621deff1854..805cc0db909e0 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/build_monitored_clusters.ts +++ b/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/build_monitored_clusters.ts @@ -43,7 +43,8 @@ const metricbeatMonitoring7Pattern = /(.*:)?\.monitoring-(es|kibana|beats|logstash|ent-search)-7.*-mb.*/; const metricbeatMonitoring8Pattern = /(.*:)?\.ds-\.monitoring-(es|kibana|beats|logstash|ent-search)-8-mb.*/; -const packagePattern = /(.*:)?\.ds-metrics-(elasticsearch|kibana|beats|logstash)\..*/; +const packagePattern = + /(.*:)?\.ds-metrics-(elasticsearch|kibana|beats|logstash|enterprisesearch)\..*/; const getCollectionMode = (index: string): CollectionMode => { if (internalMonitoringPattern.test(index)) return CollectionMode.Internal; diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/fetch_monitored_clusters.test.ts b/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/fetch_monitored_clusters.test.ts index fabece8a6b207..adcf477677de6 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/fetch_monitored_clusters.test.ts +++ b/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/fetch_monitored_clusters.test.ts @@ -224,7 +224,7 @@ describe(__filename, () => { { key: 'cluster-id.1', doc_count: 11874, - enterpriseSearch: { + enterprisesearch: { meta: {}, doc_count_error_upper_bound: 0, sum_other_doc_count: 0, @@ -310,7 +310,7 @@ describe(__filename, () => { }, }, - enterpriseSearch: { + enterprisesearch: { 'ent-search-node-id.1': { health: { 'metricbeat-8': { diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/monitored_clusters_query.ts b/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/monitored_clusters_query.ts index 5c889df19a1a5..dac9d6b59ca1a 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/monitored_clusters_query.ts +++ b/x-pack/plugins/monitoring/server/routes/api/v1/_health/monitored_clusters/monitored_clusters_query.ts @@ -11,6 +11,7 @@ import { getElasticsearchDataset, getKibanaDataset, getLogstashDataset, + getEntsearchDataset, } from '../../../../../lib/cluster/get_index_patterns'; const MAX_BUCKET_SIZE = 100; @@ -187,7 +188,7 @@ export const enterpriseSearchQuery = ({ timeRange, timeout }: QueryOptions) => { size: MAX_BUCKET_SIZE, }, aggs: { - enterpriseSearch: { + enterprisesearch: { terms: { field: 'agent.id', }, @@ -202,6 +203,11 @@ export const enterpriseSearchQuery = ({ timeRange, timeout }: QueryOptions) => { 'metricset.name': 'health', }, }, + { + term: { + 'data_stream.dataset': getEntsearchDataset('health'), + }, + }, ], }, }, @@ -219,6 +225,11 @@ export const enterpriseSearchQuery = ({ timeRange, timeout }: QueryOptions) => { 'metricset.name': 'stats', }, }, + { + term: { + 'data_stream.dataset': getEntsearchDataset('stats'), + }, + }, ], }, }, diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/_health/package/fetch_package_errors.ts b/x-pack/plugins/monitoring/server/routes/api/v1/_health/package/fetch_package_errors.ts index 122c375dc9d25..fe8f857307c2b 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/_health/package/fetch_package_errors.ts +++ b/x-pack/plugins/monitoring/server/routes/api/v1/_health/package/fetch_package_errors.ts @@ -37,6 +37,7 @@ export const fetchPackageErrors = async ({ MonitoredProduct.Elasticsearch, MonitoredProduct.Kibana, MonitoredProduct.Logstash, + MonitoredProduct.EnterpriseSearch, ], errorQueryType: 'packageErrorsQuery', errorQueryIsDataStream: true, diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/_health/types.ts b/x-pack/plugins/monitoring/server/routes/api/v1/_health/types.ts index df9abf1a0aa6c..3e0ae143826e7 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/_health/types.ts +++ b/x-pack/plugins/monitoring/server/routes/api/v1/_health/types.ts @@ -15,14 +15,8 @@ export enum MonitoredProduct { Kibana = 'kibana', Beats = 'beat', Logstash = 'logstash', - EnterpriseSearch = 'enterpriseSearch', + EnterpriseSearch = 'enterprisesearch', } -export type MetricbeatMonitoredProduct = Exclude; -export type PackagesMonitoredProduct = Exclude< - MetricbeatMonitoredProduct, - MonitoredProduct.EnterpriseSearch ->; - export type SearchFn = (params: any) => Promise; export interface QueryOptions { diff --git a/x-pack/plugins/monitoring/server/routes/api/v1/enterprise_search/overview.ts b/x-pack/plugins/monitoring/server/routes/api/v1/enterprise_search/overview.ts index 8478d3a220dd9..6581b52655cee 100644 --- a/x-pack/plugins/monitoring/server/routes/api/v1/enterprise_search/overview.ts +++ b/x-pack/plugins/monitoring/server/routes/api/v1/enterprise_search/overview.ts @@ -33,7 +33,7 @@ export function entSearchOverviewRoute(server: MonitoringCore) { try { const [stats, metrics] = await Promise.all([ getStats(req, clusterUuid), - getMetrics(req, 'enterprise_search', metricSet, [], { + getMetrics(req, 'enterprisesearch', metricSet, [], { skipClusterUuidFilter: true, }), ]); diff --git a/x-pack/plugins/observability/public/data/slo/common.ts b/x-pack/plugins/observability/public/data/slo/common.ts new file mode 100644 index 0000000000000..3c0e1b7e49408 --- /dev/null +++ b/x-pack/plugins/observability/public/data/slo/common.ts @@ -0,0 +1,92 @@ +/* + * 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 { SLOWithSummaryResponse } from '@kbn/slo-schema'; + +export const buildOccurrencesObjective = ( + params: Partial = {} +): SLOWithSummaryResponse['objective'] => { + return { + target: 0.99, + ...params, + }; +}; + +export const buildTimeslicesObjective = ( + params: Partial = {} +): SLOWithSummaryResponse['objective'] => { + return { + target: 0.99, + timesliceTarget: 0.95, + timesliceWindow: '5m', + ...params, + }; +}; + +export const buildHealthySummary = ( + params: Partial = {} +): SLOWithSummaryResponse['summary'] => { + return { + status: 'HEALTHY', + sliValue: 0.99872, + errorBudget: { + initial: 0.02, + consumed: 0.064, + remaining: 0.936, + isEstimated: false, + }, + ...params, + }; +}; + +export const buildViolatedSummary = ( + params: Partial = {} +): SLOWithSummaryResponse['summary'] => { + return { + status: 'VIOLATED', + sliValue: 0.97, + errorBudget: { + initial: 0.02, + consumed: 1, + remaining: 0, + isEstimated: false, + }, + ...params, + }; +}; + +export const buildNoDataSummary = ( + params: Partial = {} +): SLOWithSummaryResponse['summary'] => { + return { + status: 'NO_DATA', + sliValue: -1, + errorBudget: { + initial: 0.02, + consumed: 0, + remaining: 1, + isEstimated: false, + }, + ...params, + }; +}; + +export const buildDegradingSummary = ( + params: Partial = {} +): SLOWithSummaryResponse['summary'] => { + return { + status: 'DEGRADING', + sliValue: 0.97, + errorBudget: { + initial: 0.02, + consumed: 0.88, + remaining: 0.12, + isEstimated: true, + }, + ...params, + }; +}; diff --git a/x-pack/plugins/observability/public/data/slo/indicator.ts b/x-pack/plugins/observability/public/data/slo/indicator.ts new file mode 100644 index 0000000000000..8e38f787c1b83 --- /dev/null +++ b/x-pack/plugins/observability/public/data/slo/indicator.ts @@ -0,0 +1,55 @@ +/* + * 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 { SLOWithSummaryResponse } from '@kbn/slo-schema'; + +export const buildApmAvailabilityIndicator = ( + params: Partial = {} +): SLOWithSummaryResponse['indicator'] => { + return { + type: 'sli.apm.transactionErrorRate', + params: { + environment: 'development', + service: 'o11y-app', + transactionType: 'request', + transactionName: 'GET /flaky', + goodStatusCodes: ['2xx', '3xx', '4xx'], + ...params, + }, + }; +}; + +export const buildApmLatencyIndicator = ( + params: Partial = {} +): SLOWithSummaryResponse['indicator'] => { + return { + type: 'sli.apm.transactionDuration', + params: { + environment: 'development', + service: 'o11y-app', + transactionType: 'request', + transactionName: 'GET /slow', + 'threshold.us': 5000000, + ...params, + }, + }; +}; + +export const buildCustomKqlIndicator = ( + params: Partial = {} +): SLOWithSummaryResponse['indicator'] => { + return { + type: 'sli.kql.custom', + params: { + index: 'some_logs*', + good: 'latency < 300', + total: 'latency > 0', + filter: 'labels.eventId: event-0', + ...params, + }, + }; +}; diff --git a/x-pack/plugins/observability/public/data/slo/slo.ts b/x-pack/plugins/observability/public/data/slo/slo.ts index ab9071d7b6ddc..6d22027b908fd 100644 --- a/x-pack/plugins/observability/public/data/slo/slo.ts +++ b/x-pack/plugins/observability/public/data/slo/slo.ts @@ -8,6 +8,16 @@ import { cloneDeep } from 'lodash'; import { v1 as uuidv1 } from 'uuid'; import { FindSLOResponse, SLOWithSummaryResponse } from '@kbn/slo-schema'; +import { + buildDegradingSummary, + buildHealthySummary, + buildNoDataSummary, + buildOccurrencesObjective, + buildTimeslicesObjective, + buildViolatedSummary, +} from './common'; +import { buildCalendarAlignedTimeWindow, buildRollingTimeWindow } from './time_window'; +import { buildApmAvailabilityIndicator, buildCustomKqlIndicator } from './indicator'; export const emptySloList: FindSLOResponse = { results: [], @@ -52,6 +62,7 @@ const baseSlo: Omit = { isEstimated: false, }, }, + enabled: true, createdAt: now, updatedAt: now, }; @@ -61,60 +72,57 @@ export const sloList: FindSLOResponse = { { ...baseSlo, id: '1f1c6ee7-433f-4b56-b727-5682262e0d7d', - summary: { - status: 'HEALTHY', - sliValue: 0.99872, - errorBudget: { - initial: 0.02, - consumed: 0.064, - remaining: 0.936, - isEstimated: false, - }, - }, + indicator: buildCustomKqlIndicator(), + summary: buildHealthySummary(), + timeWindow: buildRollingTimeWindow(), + }, + { + ...baseSlo, + id: '1f1c6ee7-433f-4b56-b727-5682262e0d7e', + indicator: buildApmAvailabilityIndicator(), + summary: buildHealthySummary(), + timeWindow: buildCalendarAlignedTimeWindow(), }, { ...baseSlo, id: 'c0f8d669-9177-4706-9098-f397a88173a6', - summary: { - status: 'VIOLATED', - sliValue: 0.97, - errorBudget: { - initial: 0.02, - consumed: 1, - remaining: 0, - isEstimated: false, - }, - }, + summary: buildViolatedSummary(), + indicator: buildApmAvailabilityIndicator(), + timeWindow: buildCalendarAlignedTimeWindow(), + }, + { + ...baseSlo, + id: 'c0f8d669-9177-4706-9098-f397a88173a6', + summary: buildViolatedSummary(), + timeWindow: buildRollingTimeWindow({ duration: '7d' }), }, { ...baseSlo, id: 'c0f8d669-9177-4706-9098-f397a88173a7', - summary: { - status: 'NO_DATA', - sliValue: -1, - errorBudget: { - initial: 0.02, - consumed: 0, - remaining: 1, - isEstimated: false, - }, - }, + summary: buildNoDataSummary(), + }, + { + ...baseSlo, + id: 'c0f8d669-9177-4706-9098-f397a88173b7', + summary: buildNoDataSummary(), + indicator: buildApmAvailabilityIndicator(), + timeWindow: buildCalendarAlignedTimeWindow(), }, { ...baseSlo, id: 'c0f8d669-9177-4706-9098-f397a88173a8', budgetingMethod: 'timeslices', - objective: { target: 0.98, timesliceTarget: 0.9, timesliceWindow: '5m' }, - summary: { - status: 'DEGRADING', - sliValue: 0.97, - errorBudget: { - initial: 0.02, - consumed: 0.88, - remaining: 0.12, - isEstimated: false, - }, - }, + timeWindow: buildCalendarAlignedTimeWindow(), + objective: buildTimeslicesObjective(), + summary: buildDegradingSummary(), + }, + { + ...baseSlo, + id: 'c0f8d669-9177-4706-9098-f397a88173a9', + objective: buildOccurrencesObjective(), + timeWindow: buildCalendarAlignedTimeWindow(), + summary: buildDegradingSummary(), + indicator: buildApmAvailabilityIndicator(), }, ], page: 1, @@ -122,64 +130,23 @@ export const sloList: FindSLOResponse = { total: 4, }; -export const anSLO: SLOWithSummaryResponse = { - ...baseSlo, - id: '2f17deb0-725a-11ed-ab7c-4bb641cfc57e', -}; - -export const aForecastedSLO: SLOWithSummaryResponse = { - ...baseSlo, - timeWindow: { - duration: '1M', - calendar: { - startTime: '2022-01-01T00:00:00.000Z', - }, - }, - id: '2f17deb0-725a-11ed-ab7c-4bb641cfc57e', - summary: { - status: 'HEALTHY', - sliValue: 0.990097, - errorBudget: { - initial: 0.02, - consumed: 0.495169, - remaining: 0.504831, - isEstimated: true, - }, - }, -}; +export function buildForecastedSlo( + params: Partial = {} +): SLOWithSummaryResponse { + return buildSlo({ + timeWindow: buildCalendarAlignedTimeWindow(), + summary: buildHealthySummary({ + errorBudget: { + initial: 0.02, + consumed: 0.064, + remaining: 0.936, + isEstimated: true, + }, + }), + ...params, + }); +} -export function createSLO(params: Partial = {}): SLOWithSummaryResponse { +export function buildSlo(params: Partial = {}): SLOWithSummaryResponse { return cloneDeep({ ...baseSlo, id: uuidv1(), ...params }); } - -export const anApmAvailabilityIndicator: SLOWithSummaryResponse['indicator'] = { - type: 'sli.apm.transactionErrorRate', - params: { - environment: 'development', - service: 'o11y-app', - transactionType: 'request', - transactionName: 'GET /flaky', - goodStatusCodes: ['2xx', '3xx', '4xx'], - }, -}; - -export const anApmLatencyIndicator: SLOWithSummaryResponse['indicator'] = { - type: 'sli.apm.transactionDuration', - params: { - environment: 'development', - service: 'o11y-app', - transactionType: 'request', - transactionName: 'GET /slow', - 'threshold.us': 5000000, - }, -}; - -export const aCustomKqlIndicator: SLOWithSummaryResponse['indicator'] = { - type: 'sli.kql.custom', - params: { - index: 'some_logs*', - good: 'latency < 300', - total: 'latency > 0', - filter: 'labels.eventId: event-0', - }, -}; diff --git a/x-pack/plugins/observability/public/data/slo/time_window.ts b/x-pack/plugins/observability/public/data/slo/time_window.ts new file mode 100644 index 0000000000000..5de62ef4a5245 --- /dev/null +++ b/x-pack/plugins/observability/public/data/slo/time_window.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SLOWithSummaryResponse } from '@kbn/slo-schema'; + +export const buildRollingTimeWindow = ( + params: Partial = {} +): SLOWithSummaryResponse['timeWindow'] => { + return { + duration: '30d', + isRolling: true, + ...params, + }; +}; + +export const buildCalendarAlignedTimeWindow = ( + params: Partial = {} +): SLOWithSummaryResponse['timeWindow'] => { + return { + duration: '1M', + calendar: { startTime: '2023-01-01T00:00:00.000Z' }, + ...params, + }; +}; diff --git a/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_indices.ts b/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_indices.ts index 9127fcced23c2..bc2c5e702ab6e 100644 --- a/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_indices.ts +++ b/x-pack/plugins/observability/public/hooks/__storybook_mocks__/use_fetch_indices.ts @@ -11,8 +11,17 @@ export const useFetchIndices = (): UseFetchIndicesResponse => { return { loading: false, error: false, - indices: Array.from({ length: 5 }, (_, i) => ({ - name: `.index${i}`, - })) as Index[], + indices: [ + ...Array(10) + .fill(0) + .map((_, i) => ({ + name: `.index-${i}`, + })), + ...Array(10) + .fill(0) + .map((_, i) => ({ + name: `.some-other-index-${i}`, + })), + ] as Index[], }; }; diff --git a/x-pack/plugins/observability/public/hooks/use_time_buckets.ts b/x-pack/plugins/observability/public/hooks/use_time_buckets.ts new file mode 100644 index 0000000000000..1dc6a635f2594 --- /dev/null +++ b/x-pack/plugins/observability/public/hooks/use_time_buckets.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMemo } from 'react'; +import { TimeBuckets, UI_SETTINGS } from '@kbn/data-plugin/common'; +import { useKibana } from '../utils/kibana_react'; + +export const useTimeBuckets = () => { + const { uiSettings } = useKibana().services; + + return useMemo(() => { + return new TimeBuckets({ + 'histogram:maxBars': uiSettings.get(UI_SETTINGS.HISTOGRAM_MAX_BARS), + 'histogram:barTarget': uiSettings.get(UI_SETTINGS.HISTOGRAM_BAR_TARGET), + dateFormat: uiSettings.get('dateFormat'), + 'dateFormat:scaled': uiSettings.get('dateFormat:scaled'), + }); + }, [uiSettings]); +}; diff --git a/x-pack/plugins/observability/public/pages/alerts/containers/alerts_page/alerts_page.tsx b/x-pack/plugins/observability/public/pages/alerts/containers/alerts_page/alerts_page.tsx index 3cb7fcc649960..1d68fa947f9ca 100644 --- a/x-pack/plugins/observability/public/pages/alerts/containers/alerts_page/alerts_page.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/containers/alerts_page/alerts_page.tsx @@ -7,7 +7,6 @@ import React, { useEffect, useState } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { TimeBuckets, UI_SETTINGS } from '@kbn/data-plugin/common'; import { BoolQuery } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; import { useKibana } from '@kbn/kibana-react-plugin/public'; @@ -22,7 +21,6 @@ import { Provider, useAlertSearchBarStateContainer, } from '../../../../components/shared/alert_search_bar/containers'; -import { getAlertSummaryTimeRange } from '../../../rule_details/helpers'; import { ObservabilityAlertSearchBar } from '../../../../components/shared/alert_search_bar'; import { observabilityAlertFeatureIds } from '../../../../config'; import { useGetUserCasesPermissions } from '../../../../hooks/use_get_user_cases_permissions'; @@ -30,7 +28,9 @@ import { observabilityFeatureId } from '../../../../../common'; import { useBreadcrumbs } from '../../../../hooks/use_breadcrumbs'; import { useHasData } from '../../../../hooks/use_has_data'; import { usePluginContext } from '../../../../hooks/use_plugin_context'; +import { useTimeBuckets } from '../../../../hooks/use_time_buckets'; import { getNoDataConfig } from '../../../../utils/no_data_config'; +import { getAlertSummaryTimeRange } from '../../../../utils/alert_summary_widget'; import { LoadingObservability } from '../../../overview'; import './styles.scss'; import { renderRuleStats } from '../../components/rule_stats'; @@ -62,7 +62,6 @@ function InternalAlertsPage() { getAlertsStateTable: AlertsStateTable, getAlertSummaryWidget: AlertSummaryWidget, }, - uiSettings, } = useKibana().services; const alertSearchBarStateProps = useAlertSearchBarStateContainer(URL_STORAGE_KEY); @@ -80,12 +79,7 @@ function InternalAlertsPage() { }); const { hasAnyData, isAllRequestsComplete } = useHasData(); const [esQuery, setEsQuery] = useState<{ bool: BoolQuery }>(); - const timeBuckets = new TimeBuckets({ - 'histogram:maxBars': uiSettings.get(UI_SETTINGS.HISTOGRAM_MAX_BARS), - 'histogram:barTarget': uiSettings.get(UI_SETTINGS.HISTOGRAM_BAR_TARGET), - dateFormat: uiSettings.get('dateFormat'), - 'dateFormat:scaled': uiSettings.get('dateFormat:scaled'), - }); + const timeBuckets = useTimeBuckets(); const alertSummaryTimeRange: AlertSummaryTimeRange = getAlertSummaryTimeRange( { from: alertSearchBarStateProps.rangeFrom, diff --git a/x-pack/plugins/observability/public/pages/overview/containers/overview_page/helpers/index.ts b/x-pack/plugins/observability/public/pages/overview/containers/overview_page/helpers/index.ts index 565f52674214d..1f0a06b802da8 100644 --- a/x-pack/plugins/observability/public/pages/overview/containers/overview_page/helpers/index.ts +++ b/x-pack/plugins/observability/public/pages/overview/containers/overview_page/helpers/index.ts @@ -6,3 +6,4 @@ */ export { calculateBucketSize } from './calculate_bucket_size'; +export { useOverviewMetrics } from './use_metrics'; diff --git a/x-pack/plugins/observability/public/pages/overview/containers/overview_page/overview_page.tsx b/x-pack/plugins/observability/public/pages/overview/containers/overview_page/overview_page.tsx index 0627fc3645613..fe2e08d267603 100644 --- a/x-pack/plugins/observability/public/pages/overview/containers/overview_page/overview_page.tsx +++ b/x-pack/plugins/observability/public/pages/overview/containers/overview_page/overview_page.tsx @@ -10,12 +10,10 @@ import { BoolQuery } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { AlertConsumers } from '@kbn/rule-data-utils'; -import React, { useMemo, useRef, useCallback, useState } from 'react'; - -import { calculateBucketSize } from './helpers'; -import { buildEsQuery } from '../../../../utils/build_es_query'; -import { getNewsFeed } from '../../../../services/get_news_feed'; +import React, { useEffect, useMemo, useCallback, useState } from 'react'; +import { observabilityFeatureId } from '../../../../../common'; +import type { ObservabilityAppServices } from '../../../../application/types'; import { DataSections, LoadingObservability, @@ -28,29 +26,34 @@ import { Resources } from '../../../../components/app/resources'; import { NewsFeed } from '../../../../components/app/news_feed'; import { SectionContainer } from '../../../../components/app/section'; import { ObservabilityStatusProgress } from '../../../../components/app/observability_status/observability_status_progress'; - +import { observabilityAlertFeatureIds, paths } from '../../../../config'; import { useBreadcrumbs } from '../../../../hooks/use_breadcrumbs'; import { useDatePickerContext } from '../../../../hooks/use_date_picker_context'; import { useFetcher } from '../../../../hooks/use_fetcher'; import { useGetUserCasesPermissions } from '../../../../hooks/use_get_user_cases_permissions'; import { useGuidedSetupProgress } from '../../../../hooks/use_guided_setup_progress'; import { useHasData } from '../../../../hooks/use_has_data'; -import { useOverviewMetrics } from './helpers/use_metrics'; import { usePluginContext } from '../../../../hooks/use_plugin_context'; +import { useTimeBuckets } from '../../../../hooks/use_time_buckets'; +import { getNewsFeed } from '../../../../services/get_news_feed'; +import { buildEsQuery } from '../../../../utils/build_es_query'; +import { getAlertSummaryTimeRange } from '../../../../utils/alert_summary_widget'; -import { observabilityFeatureId } from '../../../../../common'; -import { observabilityAlertFeatureIds, paths } from '../../../../config'; import { ALERTS_PER_PAGE, ALERTS_TABLE_ID } from './constants'; - -import type { ObservabilityAppServices } from '../../../../application/types'; +import { calculateBucketSize, useOverviewMetrics } from './helpers'; export function OverviewPage() { const { cases: { ui: { getCasesContext }, }, + charts, http, - triggersActionsUi: { alertsTableConfigurationRegistry, getAlertsStateTable: AlertsStateTable }, + triggersActionsUi: { + alertsTableConfigurationRegistry, + getAlertsStateTable: AlertsStateTable, + getAlertSummaryWidget: AlertSummaryWidget, + }, } = useKibana().services; const { ObservabilityPageTemplate } = usePluginContext(); @@ -65,7 +68,6 @@ export function OverviewPage() { const { data: newsFeed } = useFetcher(() => getNewsFeed({ http }), [http]); const { hasAnyData, isAllRequestsComplete } = useHasData(); - const refetch = useRef<() => void>(); const { trackMetric } = useOverviewMetrics({ hasAnyData }); @@ -85,6 +87,19 @@ export function OverviewPage() { to: relativeEnd, }) ); + const timeBuckets = useTimeBuckets(); + const alertSummaryTimeRange = getAlertSummaryTimeRange( + { + from: relativeStart, + to: relativeEnd, + }, + timeBuckets + ); + + const chartThemes = { + theme: charts.theme.useChartsTheme(), + baseTheme: charts.theme.useChartsBaseTheme(), + }; const bucketSize = useMemo( () => @@ -95,6 +110,15 @@ export function OverviewPage() { [absoluteStart, absoluteEnd] ); + useEffect(() => { + setEsQuery( + buildEsQuery({ + from: relativeStart, + to: relativeEnd, + }) + ); + }, [relativeEnd, relativeStart]); + const handleTimeRangeRefresh = useCallback(() => { setEsQuery( buildEsQuery({ @@ -102,7 +126,6 @@ export function OverviewPage() { to: relativeEnd, }) ); - return refetch.current && refetch.current(); }, [relativeEnd, relativeStart]); const handleCloseGuidedSetupTour = () => { @@ -170,6 +193,13 @@ export function OverviewPage() { permissions={userCasesPermissions} features={{ alerts: { sync: false } }} > + = (props: Props) => ; const defaultProps: Props = { - slo: anSLO, + slo: buildSlo(), }; export const SloDetails = Template.bind({}); diff --git a/x-pack/plugins/observability/public/pages/slo_details/index.test.tsx b/x-pack/plugins/observability/public/pages/slo_details/index.test.tsx index c2e461a38c4ea..33567da34ef35 100644 --- a/x-pack/plugins/observability/public/pages/slo_details/index.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_details/index.test.tsx @@ -14,7 +14,7 @@ import { useLicense } from '../../hooks/use_license'; import { useFetchSloDetails } from '../../hooks/slo/use_fetch_slo_details'; import { render } from '../../utils/test_helper'; import { SloDetailsPage } from '.'; -import { anSLO } from '../../data/slo/slo'; +import { buildSlo } from '../../data/slo/slo'; import type { ConfigSchema } from '../../plugin'; import type { Subset } from '../../typings'; import { paths } from '../../config'; @@ -64,8 +64,9 @@ describe('SLO Details Page', () => { describe('when the feature flag is not enabled', () => { it('renders the not found page', async () => { - useParamsMock.mockReturnValue(anSLO.id); - useFetchSloDetailsMock.mockReturnValue({ loading: false, slo: anSLO }); + const slo = buildSlo(); + useParamsMock.mockReturnValue(slo.id); + useFetchSloDetailsMock.mockReturnValue({ loading: false, slo }); useLicenseMock.mockReturnValue({ hasAtLeast: () => true }); render(, { unsafe: { slo: { enabled: false } } }); @@ -77,8 +78,9 @@ describe('SLO Details Page', () => { describe('when the feature flag is enabled', () => { describe('when the incorrect license is found', () => { it('navigates to the SLO List page', async () => { - useParamsMock.mockReturnValue(anSLO.id); - useFetchSloDetailsMock.mockReturnValue({ loading: false, slo: anSLO }); + const slo = buildSlo(); + useParamsMock.mockReturnValue(slo.id); + useFetchSloDetailsMock.mockReturnValue({ loading: false, slo }); useLicenseMock.mockReturnValue({ hasAtLeast: () => false }); render(, { unsafe: { slo: { enabled: true } } }); @@ -99,7 +101,8 @@ describe('SLO Details Page', () => { }); it('renders the loading spinner when fetching the SLO', async () => { - useParamsMock.mockReturnValue(anSLO.id); + const slo = buildSlo(); + useParamsMock.mockReturnValue(slo.id); useFetchSloDetailsMock.mockReturnValue({ loading: true, slo: undefined }); useLicenseMock.mockReturnValue({ hasAtLeast: () => true }); @@ -111,8 +114,9 @@ describe('SLO Details Page', () => { }); it('renders the SLO details page', async () => { - useParamsMock.mockReturnValue(anSLO.id); - useFetchSloDetailsMock.mockReturnValue({ loading: false, slo: anSLO }); + const slo = buildSlo(); + useParamsMock.mockReturnValue(slo.id); + useFetchSloDetailsMock.mockReturnValue({ loading: false, slo }); useLicenseMock.mockReturnValue({ hasAtLeast: () => true }); render(, config); diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/index_selection.stories.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/index_selection.stories.tsx new file mode 100644 index 0000000000000..86dd4497c933b --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/index_selection.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { ComponentStory } from '@storybook/react'; + +import { FormProvider, useForm } from 'react-hook-form'; +import { KibanaReactStorybookDecorator } from '../../../../utils/kibana_react.storybook_decorator'; +import { IndexSelection as Component, Props } from './index_selection'; +import { SLO_EDIT_FORM_DEFAULT_VALUES } from '../../constants'; + +export default { + component: Component, + title: 'app/SLO/EditPage/CustomKQL/IndexSelection', + decorators: [KibanaReactStorybookDecorator], +}; + +const Template: ComponentStory = (props: Props) => { + const methods = useForm({ defaultValues: SLO_EDIT_FORM_DEFAULT_VALUES }); + return ( + + + + ); +}; + +const defaultProps = {}; + +export const IndexSelection = Template.bind({}); +IndexSelection.args = defaultProps; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/index_selection.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/index_selection.tsx new file mode 100644 index 0000000000000..63668b83aec82 --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/index_selection.tsx @@ -0,0 +1,135 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useEffect, useState } from 'react'; +import { Control, Controller } from 'react-hook-form'; +import { EuiComboBox, EuiComboBoxOptionOption, EuiFormRow } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { CreateSLOInput } from '@kbn/slo-schema'; + +import { useFetchIndices, Index } from '../../../../hooks/use_fetch_indices'; + +export interface Props { + control: Control; +} + +interface Option { + label: string; + options: Array<{ value: string; label: string }>; +} + +export function IndexSelection({ control }: Props) { + const { loading, indices = [] } = useFetchIndices(); + const [indexOptions, setIndexOptions] = useState([]); + + useEffect(() => { + setIndexOptions([createIndexOptions(indices)]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [indices.length]); + + const onSearchChange = (search: string) => { + const options: Option[] = []; + if (!search) { + return setIndexOptions([createIndexOptions(indices)]); + } + + const searchPattern = search.endsWith('*') ? search.substring(0, search.length - 1) : search; + const matchingIndices = indices.filter(({ name }) => name.startsWith(searchPattern)); + + if (matchingIndices.length === 0) { + return setIndexOptions([]); + } + + options.push(createIndexOptions(matchingIndices)); + + const searchWithStarSuffix = search.endsWith('*') ? search : `${search}*`; + options.push({ + label: i18n.translate( + 'xpack.observability.slos.sloEdit.customKql.indexSelection.indexPatternLabel', + { defaultMessage: 'Use an index pattern' } + ), + options: [{ value: searchWithStarSuffix, label: searchWithStarSuffix }], + }); + + setIndexOptions(options); + }; + + return ( + + ( + { + if (selected.length) { + return field.onChange(selected[0].value); + } + + field.onChange(''); + }} + onSearchChange={onSearchChange} + options={indexOptions} + placeholder={i18n.translate( + 'xpack.observability.slos.sloEdit.customKql.indexSelection.placeholder', + { + defaultMessage: 'Select an index or index pattern', + } + )} + selectedOptions={ + !!field.value + ? [ + { + value: field.value, + label: field.value, + 'data-test-subj': 'indexSelectionSelectedValue', + }, + ] + : [] + } + singleSelection + /> + )} + /> + + ); +} + +function createIndexOptions(indices: Index[]): Option { + return { + label: i18n.translate( + 'xpack.observability.slos.sloEdit.customKql.indexSelection.indexOptionsLabel', + { defaultMessage: 'Select an existing index' } + ), + options: indices + .map(({ name }) => ({ label: name, value: name })) + .sort((a, b) => String(a.label).localeCompare(b.label)), + }; +} diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx index 2d1eb8d64cacc..1c0191057aa11 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx @@ -50,7 +50,7 @@ export function SloEditForm({ slo }: Props) { notifications: { toasts }, } = useKibana().services; - const { control, watch, getFieldState, getValues, formState, trigger } = useForm({ + const { control, watch, getFieldState, getValues, formState } = useForm({ defaultValues: SLO_EDIT_FORM_DEFAULT_VALUES, values: transformSloResponseToCreateSloInput(slo), mode: 'all', @@ -144,7 +144,7 @@ export function SloEditForm({ slo }: Props) { {watch('indicator.type') === 'sli.kql.custom' ? ( - + ) : null} diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.stories.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.stories.tsx index f0ed441a56a1a..08c634b45faaf 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.stories.tsx @@ -26,7 +26,7 @@ const Template: ComponentStory = (props: Props) => { const methods = useForm({ defaultValues: SLO_EDIT_FORM_DEFAULT_VALUES }); return ( - + ); }; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.tsx index 2d13548c7c8e9..257185a787728 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.tsx @@ -5,89 +5,23 @@ * 2.0. */ -import React, { useEffect } from 'react'; +import React from 'react'; import { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiFormLabel, EuiSuggest } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { Control, Controller, UseFormTrigger } from 'react-hook-form'; +import { Control, Controller } from 'react-hook-form'; import type { CreateSLOInput } from '@kbn/slo-schema'; -import { useFetchIndices } from '../../../hooks/use_fetch_indices'; +import { IndexSelection } from './custom_kql/index_selection'; export interface Props { control: Control; - trigger: UseFormTrigger; } -export function SloEditFormDefinitionCustomKql({ control, trigger }: Props) { - const { loading, indices = [] } = useFetchIndices(); - - const indicesNames = indices.map(({ name }) => ({ - type: { iconType: '', color: '' }, - label: name, - description: '', - })); - - // Indices are loading in asynchrously, so trigger field validation - // once results are returned from API - useEffect(() => { - if (!loading && indices.length) { - trigger(); - } - }, [indices.length, loading, trigger]); - - function valueMatchIndex(value: string | undefined, index: string): boolean { - if (value === undefined) { - return false; - } - - if (value.length > 0 && value.substring(value.length - 1) === '*') { - return index.indexOf(value.substring(0, value.length - 1), 0) > -1; - } - - return index === value; - } - +export function SloEditFormDefinitionCustomKql({ control }: Props) { return ( - - {i18n.translate('xpack.observability.slos.sloEdit.sloDefinition.customKql.index', { - defaultMessage: 'Index', - })} - - - indices.some((index) => valueMatchIndex(value, index.name)), - }} - render={({ field, fieldState }) => ( - { - field.onChange(label); - }} - isInvalid={ - fieldState.isDirty && - !indicesNames.some((index) => valueMatchIndex(field.value, index.label)) - } - placeholder={i18n.translate( - 'xpack.observability.slos.sloEdit.sloDefinition.customKql.index.selectIndex', - { - defaultMessage: 'Select an index', - } - )} - suggestions={indicesNames} - {...field} - /> - )} - /> + diff --git a/x-pack/plugins/observability/public/pages/slo_edit/helpers/process_slo_form_values.ts b/x-pack/plugins/observability/public/pages/slo_edit/helpers/process_slo_form_values.ts index 0c2d2a5989477..bc90a63dda835 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/helpers/process_slo_form_values.ts +++ b/x-pack/plugins/observability/public/pages/slo_edit/helpers/process_slo_form_values.ts @@ -16,7 +16,7 @@ export function transformSloResponseToCreateSloInput( if (!values) return undefined; return { - ...omit(values, ['id', 'revision', 'createdAt', 'updatedAt', 'summary']), + ...omit(values, ['id', 'revision', 'createdAt', 'updatedAt', 'summary', 'enabled']), objective: { target: values.objective.target * 100, ...(values.objective.timesliceTarget && { diff --git a/x-pack/plugins/observability/public/pages/slo_edit/index.test.tsx b/x-pack/plugins/observability/public/pages/slo_edit/index.test.tsx index ee0b1c25dfc97..64e1568904896 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/index.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/index.test.tsx @@ -21,7 +21,7 @@ import { kibanaStartMock } from '../../utils/kibana_react.mock'; import { ConfigSchema } from '../../plugin'; import { Subset } from '../../typings'; import { SLO_EDIT_FORM_DEFAULT_VALUES } from './constants'; -import { anSLO } from '../../data/slo/slo'; +import { buildSlo } from '../../data/slo/slo'; import { paths } from '../../config'; import { SloEditPage } from '.'; @@ -166,9 +166,8 @@ describe('SLO Edit Page', () => { SLO_EDIT_FORM_DEFAULT_VALUES.indicator.type ); - expect(screen.queryByTestId('sloFormCustomKqlIndexInput')).toHaveValue( - SLO_EDIT_FORM_DEFAULT_VALUES.indicator.params.index - ); + expect(screen.queryByTestId('indexSelectionSelectedValue')).toBeNull(); + expect(screen.queryByTestId('sloFormCustomKqlFilterQueryInput')).toHaveValue( SLO_EDIT_FORM_DEFAULT_VALUES.indicator.type === 'sli.kql.custom' ? SLO_EDIT_FORM_DEFAULT_VALUES.indicator.params.filter @@ -222,7 +221,7 @@ describe('SLO Edit Page', () => { render(, config); - userEvent.type(screen.getByTestId('sloFormCustomKqlIndexInput'), 'some-index'); + userEvent.type(screen.getByTestId('indexSelection'), 'some-index'); userEvent.type(screen.getByTestId('sloFormCustomKqlFilterQueryInput'), 'irrelevant'); userEvent.type(screen.getByTestId('sloFormCustomKqlGoodQueryInput'), 'irrelevant'); userEvent.type(screen.getByTestId('sloFormCustomKqlTotalQueryInput'), 'irrelevant'); @@ -282,10 +281,11 @@ describe('SLO Edit Page', () => { describe('when a sloId route param is provided', () => { it('renders the SLO Edit page with prefilled form values', async () => { + const slo = buildSlo({ id: '123' }); jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); useLicenseMock.mockReturnValue({ hasAtLeast: () => true }); - useFetchSloMock.mockReturnValue({ loading: false, slo: anSLO }); + useFetchSloMock.mockReturnValue({ loading: false, slo }); useFetchIndicesMock.mockReturnValue({ loading: false, indices: [{ name: 'some-index' }], @@ -303,39 +303,41 @@ describe('SLO Edit Page', () => { expect(screen.queryByTestId('sloForm')).toBeTruthy(); expect(screen.queryByTestId('sloFormIndicatorTypeSelect')).toHaveValue( - anSLO.indicator.type + slo.indicator.type ); - expect(screen.queryByTestId('sloFormCustomKqlIndexInput')).toHaveValue( - anSLO.indicator.params.index + expect(screen.queryByTestId('indexSelectionSelectedValue')).toHaveTextContent( + slo.indicator.params.index! ); + expect(screen.queryByTestId('sloFormCustomKqlFilterQueryInput')).toHaveValue( - anSLO.indicator.type === 'sli.kql.custom' ? anSLO.indicator.params.filter : '' + slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.filter : '' ); expect(screen.queryByTestId('sloFormCustomKqlGoodQueryInput')).toHaveValue( - anSLO.indicator.type === 'sli.kql.custom' ? anSLO.indicator.params.good : '' + slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.good : '' ); expect(screen.queryByTestId('sloFormCustomKqlTotalQueryInput')).toHaveValue( - anSLO.indicator.type === 'sli.kql.custom' ? anSLO.indicator.params.total : '' + slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.total : '' ); expect(screen.queryByTestId('sloFormBudgetingMethodSelect')).toHaveValue( - anSLO.budgetingMethod + slo.budgetingMethod ); expect(screen.queryByTestId('sloFormTimeWindowDurationSelect')).toHaveValue( - anSLO.timeWindow.duration + slo.timeWindow.duration ); expect(screen.queryByTestId('sloFormObjectiveTargetInput')).toHaveValue( - anSLO.objective.target * 100 + slo.objective.target * 100 ); - expect(screen.queryByTestId('sloFormNameInput')).toHaveValue(anSLO.name); - expect(screen.queryByTestId('sloFormDescriptionTextArea')).toHaveValue(anSLO.description); + expect(screen.queryByTestId('sloFormNameInput')).toHaveValue(slo.name); + expect(screen.queryByTestId('sloFormDescriptionTextArea')).toHaveValue(slo.description); }); it('calls the updateSlo hook if all required values are filled in', async () => { // Note: the `anSLO` object is considered to have (at least) // values for all required fields. + const slo = buildSlo({ id: '123' }); jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); @@ -344,7 +346,7 @@ describe('SLO Edit Page', () => { loading: false, indices: [{ name: 'some-index' }], }); - useFetchSloMock.mockReturnValue({ loading: false, slo: anSLO }); + useFetchSloMock.mockReturnValue({ loading: false, slo }); const mockCreate = jest.fn(); const mockUpdate = jest.fn(); useCreateOrUpdateSloMock.mockReturnValue({ @@ -365,7 +367,7 @@ describe('SLO Edit Page', () => { [MockFunction] { "calls": Array [ Array [ - "2f17deb0-725a-11ed-ab7c-4bb641cfc57e", + "123", Object { "budgetingMethod": "occurrences", "description": "some description useful", @@ -407,6 +409,7 @@ describe('SLO Edit Page', () => { it('blocks submitting if not all required values are filled in', async () => { // Note: the `anSLO` object is considered to have (at least) // values for all required fields. + const slo = buildSlo(); jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); @@ -415,7 +418,7 @@ describe('SLO Edit Page', () => { loading: false, indices: [], }); - useFetchSloMock.mockReturnValue({ loading: false, slo: { ...anSLO, name: '' } }); + useFetchSloMock.mockReturnValue({ loading: false, slo: { ...slo, name: '' } }); render(, config); @@ -429,10 +432,12 @@ describe('SLO Edit Page', () => { it('renders a success toast', async () => { // Note: the `anSLO` object is considered to have (at least) // values for all required fields. + const slo = buildSlo(); + jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); useLicenseMock.mockReturnValue({ hasAtLeast: () => true }); - useFetchSloMock.mockReturnValue({ loading: false, slo: anSLO }); + useFetchSloMock.mockReturnValue({ loading: false, slo }); useFetchIndicesMock.mockReturnValue({ loading: false, indices: [{ name: 'some-index' }], @@ -451,10 +456,11 @@ describe('SLO Edit Page', () => { it('navigates to the SLO List page', async () => { // Note: the `anSLO` object is considered to have (at least) // values for all required fields. + const slo = buildSlo(); jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); useLicenseMock.mockReturnValue({ hasAtLeast: () => true }); - useFetchSloMock.mockReturnValue({ loading: false, slo: anSLO }); + useFetchSloMock.mockReturnValue({ loading: false, slo }); useFetchIndicesMock.mockReturnValue({ loading: false, indices: [{ name: 'some-index' }], @@ -475,10 +481,11 @@ describe('SLO Edit Page', () => { it('renders an error toast', async () => { // Note: the `anSLO` object is considered to have (at least) // values for all required fields. + const slo = buildSlo(); jest.spyOn(Router, 'useParams').mockReturnValue({ sloId: '123' }); useLicenseMock.mockReturnValue({ hasAtLeast: () => true }); - useFetchSloMock.mockReturnValue({ loading: false, slo: anSLO }); + useFetchSloMock.mockReturnValue({ loading: false, slo }); useFetchIndicesMock.mockReturnValue({ loading: false, indices: [{ name: 'some-index' }], diff --git a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.stories.tsx b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.stories.tsx index 3079b7d3b6709..f3abb871e6e2f 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_badges.stories.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { ComponentStory } from '@storybook/react'; -import { aForecastedSLO } from '../../../../data/slo/slo'; +import { buildForecastedSlo } from '../../../../data/slo/slo'; import { KibanaReactStorybookDecorator } from '../../../../utils/kibana_react.storybook_decorator'; import { SloBadges as Component, Props } from './slo_badges'; @@ -21,7 +21,7 @@ export default { const Template: ComponentStory = (props: Props) => ; const defaultProps = { - slo: aForecastedSLO, + slo: buildForecastedSlo(), }; export const SloBadges = Template.bind({}); diff --git a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.stories.tsx b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.stories.tsx index efdd85ef06878..a8a3933be95d4 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_indicator_type_badge.stories.tsx @@ -8,14 +8,14 @@ import React from 'react'; import { ComponentStory } from '@storybook/react'; +import { + buildCustomKqlIndicator, + buildApmAvailabilityIndicator, + buildApmLatencyIndicator, +} from '../../../../data/slo/indicator'; import { KibanaReactStorybookDecorator } from '../../../../utils/kibana_react.storybook_decorator'; import { SloIndicatorTypeBadge as Component, Props } from './slo_indicator_type_badge'; -import { - aCustomKqlIndicator, - anApmAvailabilityIndicator, - anApmLatencyIndicator, - createSLO, -} from '../../../../data/slo/slo'; +import { buildSlo } from '../../../../data/slo/slo'; export default { component: Component, @@ -26,10 +26,10 @@ export default { const Template: ComponentStory = (props: Props) => ; export const WithCustomKql = Template.bind({}); -WithCustomKql.args = { slo: createSLO({ indicator: aCustomKqlIndicator }) }; +WithCustomKql.args = { slo: buildSlo({ indicator: buildCustomKqlIndicator() }) }; export const WithApmAvailability = Template.bind({}); -WithApmAvailability.args = { slo: createSLO({ indicator: anApmAvailabilityIndicator }) }; +WithApmAvailability.args = { slo: buildSlo({ indicator: buildApmAvailabilityIndicator() }) }; export const WithApmLatency = Template.bind({}); -WithApmLatency.args = { slo: createSLO({ indicator: anApmLatencyIndicator }) }; +WithApmLatency.args = { slo: buildSlo({ indicator: buildApmLatencyIndicator() }) }; diff --git a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_status_badge.stories.tsx b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_status_badge.stories.tsx index c5a62f51bee0e..5ab384419dd28 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_status_badge.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_status_badge.stories.tsx @@ -10,7 +10,7 @@ import { ComponentStory } from '@storybook/react'; import { KibanaReactStorybookDecorator } from '../../../../utils/kibana_react.storybook_decorator'; import { SloStatusBadge as Component, SloStatusProps } from './slo_status_badge'; -import { anSLO } from '../../../../data/slo/slo'; +import { buildSlo } from '../../../../data/slo/slo'; export default { component: Component, @@ -23,7 +23,7 @@ const Template: ComponentStory = (props: SloStatusProps) => ( ); const defaultProps = { - slo: anSLO, + slo: buildSlo(), }; export const SloStatusBadge = Template.bind({}); diff --git a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_time_window_badge.stories.tsx b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_time_window_badge.stories.tsx index 9b0ac40e56d2b..361b839b7bf7e 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/badges/slo_time_window_badge.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/badges/slo_time_window_badge.stories.tsx @@ -10,7 +10,7 @@ import { ComponentStory } from '@storybook/react'; import { KibanaReactStorybookDecorator } from '../../../../utils/kibana_react.storybook_decorator'; import { SloTimeWindowBadge as Component, Props } from './slo_time_window_badge'; -import { createSLO } from '../../../../data/slo/slo'; +import { buildSlo } from '../../../../data/slo/slo'; export default { component: Component, @@ -21,35 +21,35 @@ export default { const Template: ComponentStory = (props: Props) => ; export const With7DaysRolling = Template.bind({}); -With7DaysRolling.args = { slo: createSLO({ timeWindow: { duration: '7d', isRolling: true } }) }; +With7DaysRolling.args = { slo: buildSlo({ timeWindow: { duration: '7d', isRolling: true } }) }; export const With30DaysRolling = Template.bind({}); -With30DaysRolling.args = { slo: createSLO({ timeWindow: { duration: '30d', isRolling: true } }) }; +With30DaysRolling.args = { slo: buildSlo({ timeWindow: { duration: '30d', isRolling: true } }) }; export const WithMonthlyCalendarStartingToday = Template.bind({}); WithMonthlyCalendarStartingToday.args = { - slo: createSLO({ + slo: buildSlo({ timeWindow: { duration: '1M', calendar: { startTime: new Date().toISOString() } }, }), }; export const WithMonthlyCalendar = Template.bind({}); WithMonthlyCalendar.args = { - slo: createSLO({ + slo: buildSlo({ timeWindow: { duration: '1M', calendar: { startTime: '2022-01-01T00:00:00.000Z' } }, }), }; export const WithBiWeeklyCalendar = Template.bind({}); WithBiWeeklyCalendar.args = { - slo: createSLO({ + slo: buildSlo({ timeWindow: { duration: '2w', calendar: { startTime: '2023-01-01T00:00:00.000Z' } }, }), }; export const WithQuarterlyCalendar = Template.bind({}); WithQuarterlyCalendar.args = { - slo: createSLO({ + slo: buildSlo({ timeWindow: { duration: '1Q', calendar: { startTime: '2022-01-01T00:00:00.000Z' } }, }), }; diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_delete_confirmation_modal.stories.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_delete_confirmation_modal.stories.tsx index df9f919f838fe..675aba1158010 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_delete_confirmation_modal.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_delete_confirmation_modal.stories.tsx @@ -13,7 +13,7 @@ import { SloDeleteConfirmationModal as Component, SloDeleteConfirmationModalProps, } from './slo_delete_confirmation_modal'; -import { anSLO } from '../../../data/slo/slo'; +import { buildSlo } from '../../../data/slo/slo'; export default { component: Component, @@ -26,7 +26,7 @@ const Template: ComponentStory = (props: SloDeleteConfirmation ); const defaultProps = { - slo: anSLO, + slo: buildSlo(), }; export const SloDeleteConfirmationModal = Template.bind({}); diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.stories.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.stories.tsx index 2cf37d6eea30d..17d7c74ccc066 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.stories.tsx @@ -12,7 +12,7 @@ import { HEALTHY_ROLLING_SLO, historicalSummaryData, } from '../../../data/slo/historical_summary_data'; -import { anSLO } from '../../../data/slo/slo'; +import { buildSlo } from '../../../data/slo/slo'; import { KibanaReactStorybookDecorator } from '../../../utils/kibana_react.storybook_decorator'; import { SloListItem as Component, SloListItemProps } from './slo_list_item'; @@ -27,7 +27,7 @@ const Template: ComponentStory = (props: SloListItemProps) => ); const defaultProps = { - slo: anSLO, + slo: buildSlo(), historicalSummary: historicalSummaryData[HEALTHY_ROLLING_SLO], }; diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_list_items.stories.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_list_items.stories.tsx index 59465a2a07005..560353e483960 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_list_items.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_list_items.stories.tsx @@ -10,7 +10,7 @@ import { ComponentStory } from '@storybook/react'; import { KibanaReactStorybookDecorator } from '../../../utils/kibana_react.storybook_decorator'; import { SloListItems as Component, Props } from './slo_list_items'; -import { aForecastedSLO, anSLO } from '../../../data/slo/slo'; +import { sloList } from '../../../data/slo/slo'; export default { component: Component, @@ -21,7 +21,7 @@ export default { const Template: ComponentStory = (props: Props) => ; const defaultProps: Props = { - sloList: [anSLO, anSLO, aForecastedSLO], + sloList: sloList.results, loading: false, error: false, onDeleted: () => {}, diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_summary.stories.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_summary.stories.tsx index 8c7a9f7cab909..0998c8b1d4edf 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_summary.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_summary.stories.tsx @@ -13,7 +13,7 @@ import { HEALTHY_ROLLING_SLO, historicalSummaryData, } from '../../../data/slo/historical_summary_data'; -import { createSLO } from '../../../data/slo/slo'; +import { buildSlo } from '../../../data/slo/slo'; import { SloSummary as Component, Props } from './slo_summary'; export default { @@ -25,7 +25,7 @@ export default { const Template: ComponentStory = (props: Props) => ; const defaultProps = { - slo: createSLO(), + slo: buildSlo(), historicalSummary: historicalSummaryData[HEALTHY_ROLLING_SLO], historicalSummaryLoading: false, }; diff --git a/x-pack/plugins/observability/public/pages/rule_details/helpers/get_alert_summary_time_range.test.tsx b/x-pack/plugins/observability/public/utils/alert_summary_widget/get_alert_summary_time_range.test.tsx similarity index 100% rename from x-pack/plugins/observability/public/pages/rule_details/helpers/get_alert_summary_time_range.test.tsx rename to x-pack/plugins/observability/public/utils/alert_summary_widget/get_alert_summary_time_range.test.tsx diff --git a/x-pack/plugins/observability/public/pages/rule_details/helpers/get_alert_summary_time_range.tsx b/x-pack/plugins/observability/public/utils/alert_summary_widget/get_alert_summary_time_range.tsx similarity index 89% rename from x-pack/plugins/observability/public/pages/rule_details/helpers/get_alert_summary_time_range.tsx rename to x-pack/plugins/observability/public/utils/alert_summary_widget/get_alert_summary_time_range.tsx index decfa03fb6f8c..a39388391278f 100644 --- a/x-pack/plugins/observability/public/pages/rule_details/helpers/get_alert_summary_time_range.tsx +++ b/x-pack/plugins/observability/public/utils/alert_summary_widget/get_alert_summary_time_range.tsx @@ -10,8 +10,8 @@ import { getAbsoluteTimeRange, TimeBuckets } from '@kbn/data-plugin/common'; import { TimeRange } from '@kbn/es-query'; import { FormattedMessage } from '@kbn/i18n-react'; import type { AlertSummaryTimeRange } from '@kbn/triggers-actions-ui-plugin/public'; -import { getAbsoluteTime } from '../../../utils/date'; -import { getBucketSize } from '../../../utils/get_bucket_size'; +import { getAbsoluteTime } from '../date'; +import { getBucketSize } from '../get_bucket_size'; export const getDefaultAlertSummaryTimeRange = (): AlertSummaryTimeRange => { const { to, from } = getAbsoluteTimeRange({ @@ -48,7 +48,7 @@ export const getAlertSummaryTimeRange = ( }; }; -const getFixedInterval = ({ to, from }: TimeRange) => { +const getFixedInterval = ({ from, to }: TimeRange) => { const start = getAbsoluteTime(from); const end = getAbsoluteTime(to, { roundUp: true }); diff --git a/x-pack/plugins/observability/public/pages/rule_details/helpers/index.ts b/x-pack/plugins/observability/public/utils/alert_summary_widget/index.ts similarity index 100% rename from x-pack/plugins/observability/public/pages/rule_details/helpers/index.ts rename to x-pack/plugins/observability/public/utils/alert_summary_widget/index.ts diff --git a/x-pack/plugins/observability/server/routes/slo/route.ts b/x-pack/plugins/observability/server/routes/slo/route.ts index 90fa8b82fbca2..dc3a51250f6a7 100644 --- a/x-pack/plugins/observability/server/routes/slo/route.ts +++ b/x-pack/plugins/observability/server/routes/slo/route.ts @@ -12,6 +12,7 @@ import { fetchHistoricalSummaryParamsSchema, findSLOParamsSchema, getSLOParamsSchema, + manageSLOParamsSchema, updateSLOParamsSchema, } from '@kbn/slo-schema'; import { @@ -36,6 +37,7 @@ import { DefaultHistoricalSummaryClient } from '../../services/slo/historical_su import { FetchHistoricalSummary } from '../../services/slo/fetch_historical_summary'; import type { IndicatorTypes } from '../../domain/models'; import type { ObservabilityRequestHandlerContext } from '../../types'; +import { ManageSLO } from '../../services/slo/manage_slo'; const transformGenerators: Record = { 'sli.apm.transactionDuration': new ApmTransactionDurationTransformGenerator(), @@ -142,6 +144,54 @@ const getSLORoute = createObservabilityServerRoute({ }, }); +const enableSLORoute = createObservabilityServerRoute({ + endpoint: 'POST /api/observability/slos/{id}/enable', + options: { + tags: [], + }, + params: manageSLOParamsSchema, + handler: async ({ context, params, logger }) => { + if (!isLicenseAtLeastPlatinum(context)) { + throw badRequest('Platinum license or higher is needed to make use of this feature.'); + } + + const soClient = (await context.core).savedObjects.client; + const esClient = (await context.core).elasticsearch.client.asCurrentUser; + + const repository = new KibanaSavedObjectsSLORepository(soClient); + const transformManager = new DefaultTransformManager(transformGenerators, esClient, logger); + const manageSLO = new ManageSLO(repository, transformManager); + + const response = await manageSLO.enable(params.path.id); + + return response; + }, +}); + +const disableSLORoute = createObservabilityServerRoute({ + endpoint: 'POST /api/observability/slos/{id}/disable', + options: { + tags: [], + }, + params: manageSLOParamsSchema, + handler: async ({ context, params, logger }) => { + if (!isLicenseAtLeastPlatinum(context)) { + throw badRequest('Platinum license or higher is needed to make use of this feature.'); + } + + const soClient = (await context.core).savedObjects.client; + const esClient = (await context.core).elasticsearch.client.asCurrentUser; + + const repository = new KibanaSavedObjectsSLORepository(soClient); + const transformManager = new DefaultTransformManager(transformGenerators, esClient, logger); + const manageSLO = new ManageSLO(repository, transformManager); + + const response = await manageSLO.disable(params.path.id); + + return response; + }, +}); + const findSLORoute = createObservabilityServerRoute({ endpoint: 'GET /api/observability/slos', options: { @@ -191,8 +241,10 @@ const fetchHistoricalSummary = createObservabilityServerRoute({ export const slosRouteRepository = { ...createSLORoute, ...deleteSLORoute, + ...disableSLORoute, + ...enableSLORoute, + ...fetchHistoricalSummary, ...findSLORoute, ...getSLORoute, - ...fetchHistoricalSummary, ...updateSLORoute, }; diff --git a/x-pack/plugins/observability/server/saved_objects/slo.ts b/x-pack/plugins/observability/server/saved_objects/slo.ts index 9c64616b8e393..13db16bb57bdd 100644 --- a/x-pack/plugins/observability/server/saved_objects/slo.ts +++ b/x-pack/plugins/observability/server/saved_objects/slo.ts @@ -55,6 +55,7 @@ export const slo: SavedObjectsType = { }, }, revision: { type: 'short' }, + enabled: { type: 'boolean' }, createdAt: { type: 'date' }, updatedAt: { type: 'date' }, }, diff --git a/x-pack/plugins/observability/server/services/slo/create_slo.ts b/x-pack/plugins/observability/server/services/slo/create_slo.ts index cc92b8c0bd5e7..57f6ef50cfb25 100644 --- a/x-pack/plugins/observability/server/services/slo/create_slo.ts +++ b/x-pack/plugins/observability/server/services/slo/create_slo.ts @@ -62,6 +62,7 @@ export class CreateSLO { frequency: params.settings?.frequency ?? new Duration(1, DurationUnit.Minute), }, revision: 1, + enabled: true, createdAt: now, updatedAt: now, }; diff --git a/x-pack/plugins/observability/server/services/slo/find_slo.test.ts b/x-pack/plugins/observability/server/services/slo/find_slo.test.ts index 13477c3fbf3f6..ea1a18c0c178e 100644 --- a/x-pack/plugins/observability/server/services/slo/find_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/find_slo.test.ts @@ -81,6 +81,7 @@ describe('FindSLO', () => { }, createdAt: slo.createdAt.toISOString(), updatedAt: slo.updatedAt.toISOString(), + enabled: slo.enabled, revision: slo.revision, }, ], diff --git a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts index 3a097cc0a8381..008004369fe83 100644 --- a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts +++ b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts @@ -80,6 +80,7 @@ const defaultSLO: Omit = { syncDelay: new Duration(1, DurationUnit.Minute), frequency: new Duration(1, DurationUnit.Minute), }, + enabled: true, }; export const createSLOParams = (params: Partial = {}): CreateSLOParams => ({ diff --git a/x-pack/plugins/observability/server/services/slo/get_slo.test.ts b/x-pack/plugins/observability/server/services/slo/get_slo.test.ts index 33416d42a776c..e92cea621236b 100644 --- a/x-pack/plugins/observability/server/services/slo/get_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/get_slo.test.ts @@ -81,6 +81,7 @@ describe('GetSLO', () => { }, createdAt: slo.createdAt.toISOString(), updatedAt: slo.updatedAt.toISOString(), + enabled: slo.enabled, revision: slo.revision, }); }); diff --git a/x-pack/plugins/observability/server/services/slo/manage_slo.test.ts b/x-pack/plugins/observability/server/services/slo/manage_slo.test.ts new file mode 100644 index 0000000000000..78396fa74cbee --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/manage_slo.test.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createSLO } from './fixtures/slo'; +import { ManageSLO } from './manage_slo'; +import { createSLORepositoryMock, createTransformManagerMock } from './mocks'; +import { SLORepository } from './slo_repository'; +import { TransformManager } from './transform_manager'; + +describe('ManageSLO', () => { + let mockRepository: jest.Mocked; + let mockTransformManager: jest.Mocked; + let manageSLO: ManageSLO; + + beforeEach(() => { + mockRepository = createSLORepositoryMock(); + mockTransformManager = createTransformManagerMock(); + manageSLO = new ManageSLO(mockRepository, mockTransformManager); + }); + + describe('Enable', () => { + it('does nothing when slo is already enabled', async () => { + const slo = createSLO({ enabled: true }); + mockRepository.findById.mockResolvedValue(slo); + + await manageSLO.enable(slo.id); + + expect(mockTransformManager.start).not.toHaveBeenCalled(); + expect(mockRepository.save).not.toHaveBeenCalled(); + }); + + it('enables the slo when disabled', async () => { + const slo = createSLO({ enabled: false }); + mockRepository.findById.mockResolvedValue(slo); + + await manageSLO.enable(slo.id); + + expect(mockTransformManager.start).toHaveBeenCalled(); + expect(mockRepository.save).toHaveBeenCalledWith(expect.objectContaining({ enabled: true })); + }); + }); + + describe('Disable', () => { + it('does nothing when slo is already disabled', async () => { + const slo = createSLO({ enabled: false }); + mockRepository.findById.mockResolvedValue(slo); + + await manageSLO.disable(slo.id); + + expect(mockTransformManager.stop).not.toHaveBeenCalled(); + expect(mockRepository.save).not.toHaveBeenCalled(); + }); + + it('disables the slo when enabled', async () => { + const slo = createSLO({ enabled: true }); + mockRepository.findById.mockResolvedValue(slo); + + await manageSLO.disable(slo.id); + + expect(mockTransformManager.stop).toHaveBeenCalled(); + expect(mockRepository.save).toHaveBeenCalledWith(expect.objectContaining({ enabled: false })); + }); + }); +}); diff --git a/x-pack/plugins/observability/server/services/slo/manage_slo.ts b/x-pack/plugins/observability/server/services/slo/manage_slo.ts new file mode 100644 index 0000000000000..4db8e8b893aba --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/manage_slo.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getSLOTransformId } from '../../assets/constants'; +import { SLORepository } from './slo_repository'; +import { TransformManager } from './transform_manager'; + +export class ManageSLO { + constructor(private repository: SLORepository, private transformManager: TransformManager) {} + + async enable(sloId: string) { + const slo = await this.repository.findById(sloId); + if (slo.enabled) { + return; + } + + await this.transformManager.start(getSLOTransformId(slo.id, slo.revision)); + slo.enabled = true; + slo.updatedAt = new Date(); + await this.repository.save(slo); + } + + async disable(sloId: string) { + const slo = await this.repository.findById(sloId); + if (!slo.enabled) { + return; + } + + await this.transformManager.stop(getSLOTransformId(slo.id, slo.revision)); + slo.enabled = false; + slo.updatedAt = new Date(); + await this.repository.save(slo); + } +} diff --git a/x-pack/plugins/observability/server/services/slo/update_slo.ts b/x-pack/plugins/observability/server/services/slo/update_slo.ts index 9f03b12137ccb..9b4aa4e7dc213 100644 --- a/x-pack/plugins/observability/server/services/slo/update_slo.ts +++ b/x-pack/plugins/observability/server/services/slo/update_slo.ts @@ -93,18 +93,6 @@ export class UpdateSLO { } private toResponse(slo: SLO): UpdateSLOResponse { - return updateSLOResponseSchema.encode({ - id: slo.id, - name: slo.name, - description: slo.description, - indicator: slo.indicator, - budgetingMethod: slo.budgetingMethod, - timeWindow: slo.timeWindow, - objective: slo.objective, - settings: slo.settings, - revision: slo.revision, - createdAt: slo.createdAt, - updatedAt: slo.updatedAt, - }); + return updateSLOResponseSchema.encode(slo); } } diff --git a/x-pack/plugins/osquery/public/packs/utils.tsx b/x-pack/plugins/osquery/public/packs/utils.tsx index 9da90ec602b90..68f9682f5c30a 100644 --- a/x-pack/plugins/osquery/public/packs/utils.tsx +++ b/x-pack/plugins/osquery/public/packs/utils.tsx @@ -5,4 +5,4 @@ * 2.0. */ -export const overflowCss = { overflow: 'auto' }; +export const overflowCss = { overflow: 'hidden' }; diff --git a/x-pack/plugins/osquery/public/shared_components/osquery_action/use_is_osquery_available_simple.tsx b/x-pack/plugins/osquery/public/shared_components/osquery_action/use_is_osquery_available_simple.tsx index 6b1a8cb0b4b0c..574ca04480c69 100644 --- a/x-pack/plugins/osquery/public/shared_components/osquery_action/use_is_osquery_available_simple.tsx +++ b/x-pack/plugins/osquery/public/shared_components/osquery_action/use_is_osquery_available_simple.tsx @@ -26,7 +26,7 @@ export const useIsOsqueryAvailableSimple = ({ agentId }: IProps) => { `/internal/osquery/fleet_wrapper/agents/${agentId}` ); const { item: packageInfo }: { item: AgentPolicy } = await http.get( - `/internal/osquery/fleet_wrapper/agent_policies/${agentInfo.policy_id}/` + `/internal/osquery/fleet_wrapper/agent_policies/${agentInfo.policy_id}` ); const osqueryPackageInstalled = find(packageInfo?.package_policies, [ 'package.name', diff --git a/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.test.ts b/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.test.ts index ea51c0104d775..e8e6fb3426559 100644 --- a/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.test.ts +++ b/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.test.ts @@ -235,7 +235,7 @@ describe('RuleDataClient', () => { // getting the writer again at this point should throw another error await expect(() => ruleDataClient.getWriter()).rejects.toThrowErrorMatchingInlineSnapshot( - `"Rule registry writing is disabled due to an error during Rule Data Client initialization."` + `"There has been a catastrophic error trying to install index level resources for the following registration context: observability.apm. This may have been due to a non-additive change to the mappings, removal and type changes are not permitted. Full error: Error: could not get cluster client"` ); expect(logger.debug).toHaveBeenCalledWith( `Writing is disabled, bulk() will not write any data.` @@ -267,7 +267,7 @@ describe('RuleDataClient', () => { // getting the writer again at this point should throw another error await expect(() => ruleDataClient.getWriter()).rejects.toThrowErrorMatchingInlineSnapshot( - `"Rule registry writing is disabled due to an error during Rule Data Client initialization."` + `"There has been a catastrophic error trying to install namespace level resources for the following registration context: observability.apm. This may have been due to a non-additive change to the mappings, removal and type changes are not permitted. Full error: Error: bad resource installation"` ); expect(logger.debug).toHaveBeenCalledWith( `Writing is disabled, bulk() will not write any data.` diff --git a/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.ts b/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.ts index 92ae633cf16de..09f14fffeafb2 100644 --- a/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.ts +++ b/x-pack/plugins/rule_registry/server/rule_data_client/rule_data_client.ts @@ -38,7 +38,7 @@ export type WaitResult = Either; export class RuleDataClient implements IRuleDataClient { private _isWriteEnabled: boolean = false; - private _isWriteInitializationFailed: boolean = false; + private _writeInitializationError: RuleDataWriterInitializationError | undefined = undefined; private _isWriterCacheEnabled: boolean = true; // Writers cached by namespace @@ -72,12 +72,12 @@ export class RuleDataClient implements IRuleDataClient { this._isWriteEnabled = isEnabled; } - private get writeInitializationFailed(): boolean { - return this._isWriteInitializationFailed; + private get writeInitializationError(): RuleDataWriterInitializationError | undefined { + return this._writeInitializationError; } - private set writeInitializationFailed(isFailed: boolean) { - this._isWriteInitializationFailed = isFailed; + private set writeInitializationError(error: RuleDataWriterInitializationError | undefined) { + this._writeInitializationError = error; } public isWriteEnabled(): boolean { @@ -172,10 +172,9 @@ export class RuleDataClient implements IRuleDataClient { private async initializeWriter(namespace: string): Promise { const isWriteEnabled = () => this.writeEnabled; - const isWriteInitializationError = () => this.writeInitializationFailed; - const turnOffWriteDueToInitializationError = () => { + const turnOffWriteDueToInitializationError = (error: RuleDataWriterInitializationError) => { this.writeEnabled = false; - this.writeInitializationFailed = true; + this.writeInitializationError = error; }; const { indexInfo, resourceInstaller } = this.options; @@ -184,10 +183,18 @@ export class RuleDataClient implements IRuleDataClient { // Wait until both index and namespace level resources have been installed / updated. if (!isWriteEnabled()) { this.options.logger.debug(`Writing is disabled, bulk() will not write any data.`); - throw new RuleDataWriteDisabledError({ - reason: isWriteInitializationError() ? 'error' : 'config', - registrationContext: indexInfo.indexOptions.registrationContext, - }); + if (this.writeInitializationError != null) { + throw new RuleDataWriteDisabledError({ + reason: 'error', + registrationContext: indexInfo.indexOptions.registrationContext, + message: this.writeInitializationError.message, + }); + } else { + throw new RuleDataWriteDisabledError({ + reason: 'config', + registrationContext: indexInfo.indexOptions.registrationContext, + }); + } } try { @@ -217,7 +224,7 @@ export class RuleDataClient implements IRuleDataClient { this.options.logger.error( `The writer for the Rule Data Client for the ${indexInfo.indexOptions.registrationContext} registration context was not initialized properly, bulk() cannot continue, and writing will be disabled.` ); - turnOffWriteDueToInitializationError(); + turnOffWriteDueToInitializationError(error); } throw error; diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index 1af1cdd9a06a8..bed4347c83651 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -79,7 +79,7 @@ export const allowedExperimentalValues = Object.freeze({ /** * Enables the `get-file` endpoint response action */ - responseActionGetFileEnabled: false, + responseActionGetFileEnabled: true, /** * Enables top charts on Alerts Page diff --git a/x-pack/plugins/security_solution/public/common/__mocks__/experimental_features_service.ts b/x-pack/plugins/security_solution/public/common/__mocks__/experimental_features_service.ts index a22ecb45a4f53..94735febd0248 100644 --- a/x-pack/plugins/security_solution/public/common/__mocks__/experimental_features_service.ts +++ b/x-pack/plugins/security_solution/public/common/__mocks__/experimental_features_service.ts @@ -14,7 +14,6 @@ const ExperimentalFeaturesServiceMock = { get: jest.fn(() => { const ff: ExperimentalFeatures = { ...allowedExperimentalValues, - responseActionGetFileEnabled: true, }; return ff; diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/get_alert_summary_rows.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/get_alert_summary_rows.tsx index 96f2fcac7a541..793cba6810645 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/get_alert_summary_rows.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/get_alert_summary_rows.tsx @@ -24,7 +24,10 @@ import { ALERT_NEW_TERMS, ALERT_THRESHOLD_RESULT, } from '../../../../common/field_maps/field_names'; -import { AGENT_STATUS_FIELD_NAME } from '../../../timelines/components/timeline/body/renderers/constants'; +import { + AGENT_STATUS_FIELD_NAME, + QUARANTINED_PATH_FIELD_NAME, +} from '../../../timelines/components/timeline/body/renderers/constants'; import type { AlertSummaryRow } from './helpers'; import { getEnrichedFieldInfo } from './helpers'; import type { EventSummaryField, EnrichedFieldInfo } from './types'; @@ -130,6 +133,14 @@ function getFieldsByEventCode( case EventCode.MEMORY_SIGNATURE: // Resolve more fields based on the source event return getFieldsByCategory({ ...eventCategories, primaryEventCategory: undefined }); + case EventCode.MALICIOUS_FILE: + return [ + { + id: 'file.Ext.quarantine_path', + overrideField: QUARANTINED_PATH_FIELD_NAME, + label: i18n.QUARANTINED_FILE_PATH, + }, + ]; default: return []; } diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx index 97ccc01a8e179..711ffc34e49d7 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/helpers.tsx @@ -19,7 +19,10 @@ import type { TimelineEventsDetailsItem } from '../../../../common/search_strate import type { EnrichedFieldInfo, EventSummaryField } from './types'; import * as i18n from './translations'; -import { AGENT_STATUS_FIELD_NAME } from '../../../timelines/components/timeline/body/renderers/constants'; +import { + AGENT_STATUS_FIELD_NAME, + QUARANTINED_PATH_FIELD_NAME, +} from '../../../timelines/components/timeline/body/renderers/constants'; /** * Defines the behavior of the search input that appears above the table of data @@ -176,6 +179,7 @@ export function getEnrichedFieldInfo({ */ export const FIELDS_WITHOUT_ACTIONS: { [field: string]: boolean } = { [AGENT_STATUS_FIELD_NAME]: true, + [QUARANTINED_PATH_FIELD_NAME]: true, }; /** diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/translations.ts b/x-pack/plugins/security_solution/public/common/components/event_details/translations.ts index 9f0bf67a25c67..a781de77369c2 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/translations.ts +++ b/x-pack/plugins/security_solution/public/common/components/event_details/translations.ts @@ -106,6 +106,13 @@ export const AGENT_STATUS = i18n.translate('xpack.securitySolution.detections.al defaultMessage: 'Agent status', }); +export const QUARANTINED_FILE_PATH = i18n.translate( + 'xpack.securitySolution.detections.alerts.quarantinedFilePath', + { + defaultMessage: 'Quarantined file path', + } +); + export const RULE_TYPE = i18n.translate('xpack.securitySolution.detections.alerts.ruleType', { defaultMessage: 'Rule type', }); diff --git a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/osquery/plugin.tsx b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/osquery/plugin.tsx index de433c3602831..7e12c1c42d001 100644 --- a/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/osquery/plugin.tsx +++ b/x-pack/plugins/security_solution/public/common/components/markdown_editor/plugins/osquery/plugin.tsx @@ -110,17 +110,19 @@ const OsqueryEditorComponent = ({ <> - {isEditMode ? ( - - ) : ( - - )} +

+ {isEditMode ? ( + + ) : ( + + )} +

diff --git a/x-pack/plugins/security_solution/public/common/components/sourcerer/update_default_data_view_modal.tsx b/x-pack/plugins/security_solution/public/common/components/sourcerer/update_default_data_view_modal.tsx index 29cace7f075de..53b9e035a5357 100644 --- a/x-pack/plugins/security_solution/public/common/components/sourcerer/update_default_data_view_modal.tsx +++ b/x-pack/plugins/security_solution/public/common/components/sourcerer/update_default_data_view_modal.tsx @@ -45,9 +45,7 @@ export const UpdateDefaultDataViewModal = React.memo( isShowing ? ( - -

{i18n.UPDATE_SECURITY_DATA_VIEW}

-
+ {i18n.UPDATE_SECURITY_DATA_VIEW}
diff --git a/x-pack/plugins/security_solution/public/explore/components/authentication/__snapshots__/authentications_host_table.test.tsx.snap b/x-pack/plugins/security_solution/public/explore/components/authentication/__snapshots__/authentications_host_table.test.tsx.snap index 08ca630fc3d67..e99916498b22d 100644 --- a/x-pack/plugins/security_solution/public/explore/components/authentication/__snapshots__/authentications_host_table.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/explore/components/authentication/__snapshots__/authentications_host_table.test.tsx.snap @@ -180,7 +180,7 @@ exports[`Authentication Host Table Component rendering it renders the host authe
@@ -346,7 +346,9 @@ exports[`Authentication Host Table Component rendering it renders the host authe - + diff --git a/x-pack/plugins/security_solution/public/explore/components/authentication/__snapshots__/authentications_user_table.test.tsx.snap b/x-pack/plugins/security_solution/public/explore/components/authentication/__snapshots__/authentications_user_table.test.tsx.snap index 38a6936e156ca..dfcedad275512 100644 --- a/x-pack/plugins/security_solution/public/explore/components/authentication/__snapshots__/authentications_user_table.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/explore/components/authentication/__snapshots__/authentications_user_table.test.tsx.snap @@ -180,7 +180,7 @@ exports[`Authentication User Table Component rendering it renders the user authe
@@ -346,7 +346,9 @@ exports[`Authentication User Table Component rendering it renders the user authe - + diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_create_extension/endpoint_policy_create_extension.test.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_create_extension/endpoint_policy_create_extension.test.tsx index 552cc86e7a808..d1875b4492a04 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_create_extension/endpoint_policy_create_extension.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_create_extension/endpoint_policy_create_extension.test.tsx @@ -22,7 +22,6 @@ jest.mock('../../../../../../common/lib/kibana'); jest.mock('../../../../../../common/hooks/use_license', () => { const licenseServiceInstance = { isPlatinumPlus: jest.fn(), - isGoldPlus: jest.fn(), isEnterprise: jest.fn(() => true), }; return { @@ -102,13 +101,14 @@ describe('Onboarding Component new section', () => { expect(mockedOnChange).toHaveBeenCalledTimes(2); }); - it('make sure NGAV is the default value for endpoint environment', async () => { + it('make sure EDR Complete is the default value for endpoint environment', async () => { renderResult = mockedContext.render( ); - expect(renderResult.getByDisplayValue('NGAV')).toBeChecked(); + expect(renderResult.getByDisplayValue('DataCollection')).not.toBeChecked(); + expect(renderResult.getByDisplayValue('NGAV')).not.toBeChecked(); expect(renderResult.getByDisplayValue('EDREssential')).not.toBeChecked(); - expect(renderResult.getByDisplayValue('EDRComplete')).not.toBeChecked(); + expect(renderResult.getByDisplayValue('EDRComplete')).toBeChecked(); }); it('make sure interactive only is the default value for cloud environment', async () => { @@ -120,49 +120,43 @@ describe('Onboarding Component new section', () => { expect(renderResult.getByDisplayValue('INTERACTIVE_ONLY')).toBeChecked(); }); - it('all license should be able to see EDR Licese', async () => { - const licenseServiceMock = licenseService as jest.Mocked; - - licenseServiceMock.isEnterprise.mockReturnValue(false); - renderResult = mockedContext.render( - - ); - userEvent.click(screen.getByDisplayValue('EDREssential')); - expect(renderResult.getByDisplayValue('EDREssential')).toBeChecked(); - expect( - renderResult.getByText( - 'Note: advanced protections require a platinum license, and full response capabilities require an enterprise license.', - { exact: false } - ) - ).toBeInTheDocument(); - }); - - it('gold license below users will be able to see NGAV notes', async () => { - const licenseServiceMock = licenseService as jest.Mocked; - - licenseServiceMock.isGoldPlus.mockReturnValue(true); - renderResult = mockedContext.render( - - ); - expect( - renderResult.getByText('Note: advanced protections require a platinum license level.', { - exact: false, - }) - ).toBeInTheDocument(); - }); - - it('platinum license users will not be able to see NGAV notes', async () => { - const licenseServiceMock = licenseService as jest.Mocked; - - licenseServiceMock.isPlatinumPlus.mockReturnValue(true); - renderResult = mockedContext.render( - - ); - expect( - renderResult.queryByText('Note: advanced protections require a platinum license level.', { - exact: false, - }) - ).not.toBeInTheDocument(); + describe('showing license notes for config presets', () => { + it.each` + preset | license | result | text + ${'EDREssential'} | ${'below platinum'} | ${'should see'} | ${'Note: advanced protections require a platinum license, and full response capabilities require an enterprise license.'} + ${'EDREssential'} | ${'platinum'} | ${'should see'} | ${'Note: advanced protections require a platinum license, and full response capabilities require an enterprise license.'} + ${'EDREssential'} | ${'enterprise'} | ${'should NOT see'} | ${''} + ${'EDRComplete'} | ${'below platinum'} | ${'should see'} | ${'Note: advanced protections require a platinum license, and full response capabilities require an enterprise license.'} + ${'EDRComplete'} | ${'platinum'} | ${'should see'} | ${'Note: advanced protections require a platinum license, and full response capabilities require an enterprise license.'} + ${'EDRComplete'} | ${'enterprise'} | ${'should NOT see'} | ${''} + ${'NGAV'} | ${'below platinum'} | ${'should see'} | ${'Note: advanced protections require a platinum license level.'} + ${'NGAV'} | ${'platinum'} | ${'should NOT see'} | ${''} + ${'NGAV'} | ${'enterprise'} | ${'should NOT see'} | ${''} + ${'DataCollection'} | ${'below platinum'} | ${'should NOT see'} | ${''} + ${'DataCollection'} | ${'platinum'} | ${'should NOT see'} | ${''} + ${'DataCollection'} | ${'enterprise'} | ${'should NOT see'} | ${''} + `('$preset: $license users $result notes', ({ license, preset, result, text }) => { + const isEnterprise = license === 'enterprise'; + const isPlatinumPlus = ['platinum', 'enterprise'].includes(license); + + const licenseServiceMock = licenseService as jest.Mocked; + licenseServiceMock.isEnterprise.mockReturnValue(isEnterprise); + licenseServiceMock.isPlatinumPlus.mockReturnValue(isPlatinumPlus); + + renderResult = mockedContext.render( + + ); + userEvent.click(screen.getByDisplayValue(preset)); + expect(renderResult.getByDisplayValue(preset)).toBeChecked(); + + if (result === 'should see') { + expect(renderResult.getByText(text, { exact: false })).toBeInTheDocument(); + } else { + expect( + renderResult.queryByTestId('create-endpoint-policy-license-note') + ).not.toBeInTheDocument(); + } + }); }); }); }); diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_create_extension/endpoint_policy_create_extension.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_create_extension/endpoint_policy_create_extension.tsx index 6f509f232def2..b67e1d6d0dca2 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_create_extension/endpoint_policy_create_extension.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/ingest_manager_integration/endpoint_policy_create_extension/endpoint_policy_create_extension.tsx @@ -32,6 +32,7 @@ import { INTERACTIVE_ONLY, NGAV_NOTE, EDR_NOTE, + DATA_COLLECTION, } from './translations'; const PREFIX = 'endpoint_policy_create_extension'; @@ -56,6 +57,10 @@ const endpointPresetsMapping = { label: EDR_COMPLETE, note: EDR_NOTE, }, + DataCollection: { + label: DATA_COLLECTION, + note: null, + }, }; const cloudEventMapping = { @@ -85,16 +90,15 @@ export const EndpointPolicyCreateExtension = memo('NGAV'); + const [endpointPreset, setEndpointPreset] = useState('EDRComplete'); const [selectedCloudEvent, setSelectedCloudEvent] = useState('INTERACTIVE_ONLY'); const [selectedEnvironment, setSelectedEnvironment] = useState('endpoint'); // Show NGAV license note when Gold and below - // Show other licenses note when Platinum and Below + // Show EDR licenses note when Platinum and Below const showNote = (endpointPreset === 'NGAV' && !isPlatinumPlus) || - (endpointPreset !== 'NGAV' && !isEnterprise); + (['EDREssential', 'EDRComplete'].includes(endpointPreset) && !isEnterprise); // Fleet will initialize the create form with a default name for the integrating policy, however, // for endpoint security, we want the user to explicitly type in a name, so we blank it out @@ -242,6 +246,20 @@ export const EndpointPolicyCreateExtension = memo + + + + } + > + + + - +

{endpointPresetsMapping[endpointPreset].note}{' '} { }); const OSTypes = ['linux', 'mac', 'windows'] as const; + it('Should return PolicyConfig for events only when preset is DataCollection', () => { + const defaultPolicy = policyFactory(); + const config = createEndpointConfig({ preset: 'DataCollection' }); + const policy = createDefaultPolicyCallback(config); + + // events are the same + expect(policy.windows.events).toEqual(defaultPolicy.windows.events); + expect(policy.linux.events).toEqual(defaultPolicy.linux.events); + expect(policy.mac.events).toEqual(defaultPolicy.mac.events); + + // check some of the protections to be disabled + const disabledButSupported = { mode: ProtectionModes.off, supported: true }; + expect(policy.windows.behavior_protection).toEqual(disabledButSupported); + expect(policy.mac.memory_protection).toEqual(disabledButSupported); + expect(policy.linux.behavior_protection).toEqual(disabledButSupported); + + // malware popups should be disabled + expect(policy.windows.popup.malware.enabled).toBeFalsy(); + expect(policy.mac.popup.malware.enabled).toBeFalsy(); + expect(policy.linux.popup.malware.enabled).toBeFalsy(); + }); + it('Should return only process event enabled on policy when preset is NGAV', () => { const config = createEndpointConfig({ preset: 'NGAV' }); const policy = createDefaultPolicyCallback(config); diff --git a/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts b/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts index d74cc6b0973e0..233abc25d0357 100644 --- a/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts +++ b/x-pack/plugins/security_solution/server/fleet_integration/handlers/create_default_policy.ts @@ -16,6 +16,7 @@ import { ENDPOINT_CONFIG_PRESET_EDR_COMPLETE, ENDPOINT_CONFIG_PRESET_EDR_ESSENTIAL, ENDPOINT_CONFIG_PRESET_NGAV, + ENDPOINT_CONFIG_PRESET_DATA_COLLECTION, } from '../constants'; import { disableProtections } from '../../../common/endpoint/models/policy_config_helpers'; @@ -52,8 +53,10 @@ const getEndpointPolicyConfigPreset = (config: PolicyCreateEndpointConfig | unde const isNGAV = config?.endpointConfig?.preset === ENDPOINT_CONFIG_PRESET_NGAV; const isEDREssential = config?.endpointConfig?.preset === ENDPOINT_CONFIG_PRESET_EDR_ESSENTIAL; const isEDRComplete = config?.endpointConfig?.preset === ENDPOINT_CONFIG_PRESET_EDR_COMPLETE; + const isDataCollection = + config?.endpointConfig?.preset === ENDPOINT_CONFIG_PRESET_DATA_COLLECTION; - return { isNGAV, isEDREssential, isEDRComplete }; + return { isNGAV, isEDREssential, isEDRComplete, isDataCollection }; }; /** @@ -63,7 +66,8 @@ const getEndpointPolicyWithIntegrationConfig = ( policy: PolicyConfig, config: PolicyCreateEndpointConfig | undefined ): PolicyConfig => { - const { isNGAV, isEDREssential, isEDRComplete } = getEndpointPolicyConfigPreset(config); + const { isNGAV, isEDREssential, isEDRComplete, isDataCollection } = + getEndpointPolicyConfigPreset(config); if (isEDRComplete) { return policy; @@ -98,6 +102,8 @@ const getEndpointPolicyWithIntegrationConfig = ( }, }, }; + } else if (isDataCollection) { + return disableProtections(policy); } // data collection by default diff --git a/x-pack/plugins/security_solution/server/fleet_integration/handlers/validate_integration_config.ts b/x-pack/plugins/security_solution/server/fleet_integration/handlers/validate_integration_config.ts index bc58358565817..711b46babbc54 100644 --- a/x-pack/plugins/security_solution/server/fleet_integration/handlers/validate_integration_config.ts +++ b/x-pack/plugins/security_solution/server/fleet_integration/handlers/validate_integration_config.ts @@ -7,6 +7,7 @@ import type { Logger } from '@kbn/core/server'; import { + ENDPOINT_CONFIG_PRESET_DATA_COLLECTION, ENDPOINT_CONFIG_PRESET_EDR_COMPLETE, ENDPOINT_CONFIG_PRESET_EDR_ESSENTIAL, ENDPOINT_CONFIG_PRESET_NGAV, @@ -39,6 +40,7 @@ const validateEndpointIntegrationConfig = ( ENDPOINT_CONFIG_PRESET_NGAV, ENDPOINT_CONFIG_PRESET_EDR_COMPLETE, ENDPOINT_CONFIG_PRESET_EDR_ESSENTIAL, + ENDPOINT_CONFIG_PRESET_DATA_COLLECTION, ].includes(config.endpointConfig.preset) ) { logger.warn(`invalid endpointConfig preset: ${config.endpointConfig.preset}`); diff --git a/x-pack/plugins/security_solution/server/fleet_integration/types.ts b/x-pack/plugins/security_solution/server/fleet_integration/types.ts index 0c7a7c17951e6..d3c1ae9f799b2 100644 --- a/x-pack/plugins/security_solution/server/fleet_integration/types.ts +++ b/x-pack/plugins/security_solution/server/fleet_integration/types.ts @@ -8,7 +8,7 @@ export interface PolicyCreateEndpointConfig { type: 'endpoint'; endpointConfig: { - preset: 'NGAV' | 'EDREssential' | 'EDRComplete'; + preset: 'NGAV' | 'EDREssential' | 'EDRComplete' | 'DataCollection'; }; } diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/__mocks__/index.ts b/x-pack/plugins/security_solution/server/lib/telemetry/__mocks__/index.ts index 7d269c92aeda9..ced44ebfa0658 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/__mocks__/index.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/__mocks__/index.ts @@ -87,6 +87,7 @@ export const createMockTelemetryReceiver = ( fetchEndpointMetrics: jest.fn().mockReturnValue(stubEndpointMetricsResponse), fetchEndpointPolicyResponses: jest.fn(), fetchPrebuiltRuleAlerts: jest.fn().mockReturnValue(prebuiltRuleAlertsResponse), + fetchDetectionRulesPackageVersion: jest.fn(), fetchTrustedApplications: jest.fn(), fetchEndpointList: jest.fn(), fetchDetectionRules: jest.fn().mockReturnValue({ body: null }), diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/endpoint_alerts.ts b/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/endpoint_alerts.ts index a70dcf21d346c..1174ad013dec4 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/endpoint_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/endpoint_alerts.ts @@ -146,5 +146,6 @@ export const endpointAllowlistFields: AllowlistFields = { host: { os: true, }, + package_version: true, ...allowlistBaseEventFields, }; diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/index.test.ts b/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/index.test.ts index 8a006be7a7960..1b55b153ff735 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/index.test.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/index.test.ts @@ -25,6 +25,7 @@ describe('Security Telemetry filters', () => { 'event.outcome': true, 'event.provider': true, 'event.type': true, + package_version: true, }; it('filters top level', () => { @@ -160,6 +161,7 @@ describe('Security Telemetry filters', () => { 'event.outcome': 'success', 'event.provider': 'iam.amazonaws.com', 'event.type': ['user', 'creation'], + package_version: '3.4.1', }; expect(copyAllowlistedFields(allowlist, event)).toStrictEqual({ 'event.id': '36857486973080746231799376445175633955031786243637182487', @@ -169,6 +171,7 @@ describe('Security Telemetry filters', () => { 'event.outcome': 'success', 'event.provider': 'iam.amazonaws.com', 'event.type': ['user', 'creation'], + package_version: '3.4.1', }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/prebuilt_rules_alerts.ts b/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/prebuilt_rules_alerts.ts index eea310ce2ad01..97d5adfd62144 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/prebuilt_rules_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/filterlists/prebuilt_rules_alerts.ts @@ -10,6 +10,7 @@ import type { AllowlistFields } from './types'; export const prebuiltRuleAllowlistFields: AllowlistFields = { _id: true, id: true, + package_version: true, '@timestamp': true, // Base alert fields 'kibana.alert.ancestors': true, diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts b/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts index 60b472ec45b4d..293d900a08ebd 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/receiver.ts @@ -29,8 +29,12 @@ import { THRESHOLD_RULE_TYPE_ID, } from '@kbn/securitysolution-rules'; import type { TransportResult } from '@elastic/elasticsearch'; -import type { Agent, AgentPolicy } from '@kbn/fleet-plugin/common'; -import type { AgentClient, AgentPolicyServiceInterface } from '@kbn/fleet-plugin/server'; +import type { Agent, AgentPolicy, Installation } from '@kbn/fleet-plugin/common'; +import type { + AgentClient, + AgentPolicyServiceInterface, + PackageService, +} from '@kbn/fleet-plugin/server'; import type { ExceptionListClient } from '@kbn/lists-plugin/server'; import type { EndpointAppContextService } from '../../endpoint/endpoint_app_context_services'; import { @@ -66,11 +70,14 @@ export interface ITelemetryReceiver { kibanaIndex?: string, alertsIndex?: string, endpointContextService?: EndpointAppContextService, - exceptionListClient?: ExceptionListClient + exceptionListClient?: ExceptionListClient, + packageService?: PackageService ): Promise; getClusterInfo(): ESClusterInfo | undefined; + fetchDetectionRulesPackageVersion(): Promise; + fetchFleetAgents(): Promise< | { agents: Agent[]; @@ -178,6 +185,7 @@ export class TelemetryReceiver implements ITelemetryReceiver { private alertsIndex?: string; private clusterInfo?: ESClusterInfo; private processTreeFetcher?: Fetcher; + private packageService?: PackageService; private readonly maxRecords = 10_000 as const; constructor(logger: Logger) { @@ -189,7 +197,8 @@ export class TelemetryReceiver implements ITelemetryReceiver { kibanaIndex?: string, alertsIndex?: string, endpointContextService?: EndpointAppContextService, - exceptionListClient?: ExceptionListClient + exceptionListClient?: ExceptionListClient, + packageService?: PackageService ) { this.kibanaIndex = kibanaIndex; this.alertsIndex = alertsIndex; @@ -197,6 +206,7 @@ export class TelemetryReceiver implements ITelemetryReceiver { this.agentPolicyService = endpointContextService?.getInternalFleetServices().agentPolicy; this.esClient = core?.elasticsearch.client.asInternalUser; this.exceptionListClient = exceptionListClient; + this.packageService = packageService; this.soClient = core?.savedObjects.createInternalRepository() as unknown as SavedObjectsClientContract; this.clusterInfo = await this.fetchClusterInfo(); @@ -209,6 +219,10 @@ export class TelemetryReceiver implements ITelemetryReceiver { return this.clusterInfo; } + public async fetchDetectionRulesPackageVersion(): Promise { + return this.packageService?.asInternalUser.getInstallation('security_detection_engine'); + } + public async fetchFleetAgents() { if (this.esClient === undefined || this.esClient === null) { throw Error('elasticsearch client is unavailable: cannot retrieve fleet agents'); diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/tasks/prebuilt_rule_alerts.test.ts b/x-pack/plugins/security_solution/server/lib/telemetry/tasks/prebuilt_rule_alerts.test.ts index a7eaa3ca58b12..de5219a7f1fa2 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/tasks/prebuilt_rule_alerts.test.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/tasks/prebuilt_rule_alerts.test.ts @@ -41,6 +41,7 @@ describe('security telemetry - detection rule alerts task test', () => { mockTelemetryEventsSender, testTaskExecutionPeriod ); + expect(mockTelemetryReceiver.fetchDetectionRulesPackageVersion).toHaveBeenCalled(); expect(mockTelemetryReceiver.fetchPrebuiltRuleAlerts).toHaveBeenCalled(); expect(mockTelemetryEventsSender.getTelemetryUsageCluster).toHaveBeenCalled(); expect(mockTelemetryEventsSender.getTelemetryUsageCluster()?.incrementCounter).toBeCalledTimes( diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/tasks/prebuilt_rule_alerts.ts b/x-pack/plugins/security_solution/server/lib/telemetry/tasks/prebuilt_rule_alerts.ts index 68b5ca6b01ce9..a7fab953dad38 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/tasks/prebuilt_rule_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/tasks/prebuilt_rule_alerts.ts @@ -31,9 +31,10 @@ export function createTelemetryPrebuiltRuleAlertsTaskConfig(maxTelemetryBatch: n const startTime = Date.now(); const taskName = 'Security Solution - Prebuilt Rule and Elastic ML Alerts Telemetry'; try { - const [clusterInfoPromise, licenseInfoPromise] = await Promise.allSettled([ + const [clusterInfoPromise, licenseInfoPromise, packageVersion] = await Promise.allSettled([ receiver.fetchClusterInfo(), receiver.fetchLicenseInfo(), + receiver.fetchDetectionRulesPackageVersion(), ]); const clusterInfo = @@ -44,6 +45,8 @@ export function createTelemetryPrebuiltRuleAlertsTaskConfig(maxTelemetryBatch: n licenseInfoPromise.status === 'fulfilled' ? licenseInfoPromise.value : ({} as ESLicense | undefined); + const packageInfo = + packageVersion.status === 'fulfilled' ? packageVersion.value : undefined; const { events: telemetryEvents, count: totalPrebuiltAlertCount } = await receiver.fetchPrebuiltRuleAlerts(); @@ -73,6 +76,7 @@ export function createTelemetryPrebuiltRuleAlertsTaskConfig(maxTelemetryBatch: n licence_id: licenseInfo?.uid, cluster_uuid: clusterInfo?.cluster_uuid, cluster_name: clusterInfo?.cluster_name, + package_version: packageInfo?.version, }) ); diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/types.ts b/x-pack/plugins/security_solution/server/lib/telemetry/types.ts index 51396684bf3b2..5566a118a6e90 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/types.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/types.ts @@ -52,6 +52,7 @@ export interface TelemetryEvent { }; cluster_name?: string; cluster_uuid?: string; + package_version?: string; file?: { [key: string]: SearchTypes; Ext?: { diff --git a/x-pack/plugins/security_solution/server/plugin.ts b/x-pack/plugins/security_solution/server/plugin.ts index e3521a2160e47..6db71726b3b50 100644 --- a/x-pack/plugins/security_solution/server/plugin.ts +++ b/x-pack/plugins/security_solution/server/plugin.ts @@ -513,7 +513,8 @@ export class Plugin implements ISecuritySolutionPlugin { this.kibanaIndex!, DEFAULT_ALERTS_INDEX, this.endpointAppContextService, - exceptionListClient + exceptionListClient, + packageService ); artifactService.start(this.telemetryReceiver); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_now_mode.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_now_mode.journey.ts index b770e82d153e4..67ee9f278b9bf 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_now_mode.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/test_now_mode.journey.ts @@ -56,9 +56,7 @@ journey(`TestNowMode`, async ({ page, params }) => { type: 'http', urls: 'https://www.google.com', custom_heartbeat_id: 'b9d9e146-746f-427f-bbf5-6e786b5b4e73', - locations: [ - { id: 'Test private location', label: 'Test private location', isServiceManaged: true }, - ], + locations: [{ id: 'us_central_qa', label: 'US Central QA', isServiceManaged: true }], }); await services.addTestSummaryDocument({ timestamp: firstCheckTime }); }); @@ -85,7 +83,7 @@ journey(`TestNowMode`, async ({ page, params }) => { await services.addTestSummaryDocument({ testRunId }); await page.waitForSelector('text=Completed'); await page.waitForSelector('text=Took 155 ms'); - await page.waitForSelector('text=Test private location'); + await page.waitForSelector('text=US Central QA'); }); step('Displays data in expanded row', async () => { @@ -104,9 +102,7 @@ journey(`TestNowMode`, async ({ page, params }) => { 'source.inline.script': "step('Go to https://www.google.com', async () => {\n await page.goto('https://www.google.com');\n});\n\nstep('Go to https://www.google.com', async () => {\n await page.goto('https://www.google.com');\n});", urls: 'https://www.google.com', - locations: [ - { id: 'Test private location', label: 'Test private location', isServiceManaged: true }, - ], + locations: [{ id: 'us_central_qa', label: 'US Central QA', isServiceManaged: true }], }); await page.click(byTestId('syntheticsMonitorManagementTab')); @@ -132,7 +128,7 @@ journey(`TestNowMode`, async ({ page, params }) => { await page.waitForTimeout(1000); await services.addTestSummaryDocument({ testRunId, docType: 'journeyStart' }); await page.waitForTimeout(1000); - await page.waitForSelector('text=Test private location'); + await page.waitForSelector('text=US Central QA'); await page.waitForSelector('text=IN PROGRESS'); }); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/thershold_indicator.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/thershold_indicator.tsx index e24b4cd52a2d9..26ebe47e045fa 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/thershold_indicator.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/thershold_indicator.tsx @@ -7,25 +7,37 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiText, EuiToolTip } from '@elastic/eui'; -export const getDeltaPercent = (current: number, previous: number) => { - if (previous === 0) { +import { + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiLoadingContent, + EuiText, + EuiToolTip, +} from '@elastic/eui'; +export const getDeltaPercent = (current: number, previous: number | null) => { + if (previous === 0 || previous === null) { return 0; } return Number((((current - previous) / previous) * 100).toFixed(0)); }; export const ThresholdIndicator = ({ + loading, current, previous, previousFormatted, currentFormatted, }: { + loading: boolean; current: number; - previous: number; + previous: number | null; previousFormatted: string; currentFormatted: string; }) => { + if (loading) { + return ; + } const delta = getDeltaPercent(current, previous); const getToolTipContent = () => { @@ -44,7 +56,7 @@ export const ThresholdIndicator = ({ }) : i18n.translate('xpack.synthetics.stepDetails.palette.decreased', { defaultMessage: '{delta}% lower', - values: { delta }, + values: { delta: Math.abs(delta) }, }), }, }); @@ -60,27 +72,29 @@ export const ThresholdIndicator = ({ const hasDelta = Math.abs(delta) > 0; return ( - + {currentFormatted} - - - {hasDelta ? ( - 0 ? 'sortUp' : 'sortDown'} size="m" color={getColor()} /> - ) : ( - - )} - - + {previous !== null && ( + + + {hasDelta ? ( + 0 ? 'sortUp' : 'sortDown'} size="m" color={getColor()} /> + ) : ( + + )} + + + )} ); }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/result_details.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/result_details.tsx index 043a302b13aeb..6f0c5453f920a 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/result_details.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/result_details.tsx @@ -6,7 +6,7 @@ */ import React from 'react'; -import { EuiDescriptionList, EuiLoadingContent, EuiSpacer } from '@elastic/eui'; +import { EuiDescriptionList, EuiSpacer } from '@elastic/eui'; import { formatBytes } from '../../step_details_page/hooks/use_object_metrics'; import { ThresholdIndicator } from '../components/thershold_indicator'; import { useNetworkTimings } from '../../step_details_page/hooks/use_network_timings'; @@ -46,17 +46,16 @@ export const TimingDetails = ({ step }: { step: JourneyStep }) => { timingsWithLabels: prevTimingsWithLabels, loading, transferSizePrev, - } = useNetworkTimingsPrevious24Hours(step.synthetics.step?.index); + } = useNetworkTimingsPrevious24Hours(step.synthetics.step?.index, step['@timestamp']); const items = timingsWithLabels?.map((item) => { const prevValueItem = prevTimingsWithLabels?.find((prev) => prev.label === item.label); const prevValue = prevValueItem?.value ?? 0; return { title: item.label, - description: loading ? ( - - ) : ( + description: ( { items.push({ title: transferSize.label, - description: loading ? ( - - ) : ( + description: ( { setInProgress(true); setTestRun({ id: uuidv4(), + name: config.name, monitor: format(config) as MonitorFieldsType, }); } @@ -80,6 +81,7 @@ export const RunTestButton = () => { errors={data?.errors ?? []} isPushing={Boolean(isPushing)} testRun={testRun} + name={testRun.name} inProgress={inProgress} onClose={() => { setTestRun(undefined); @@ -125,10 +127,10 @@ export const TEST_SCHEDULED_LABEL = i18n.translate( } ); -const PRIVATE_AVAILABLE_LABEL = i18n.translate( - 'xpack.synthetics.monitorList.testNow.available.private', +export const PRIVATE_AVAILABLE_LABEL = i18n.translate( + 'xpack.synthetics.app.testNow.available.private', { - defaultMessage: `You can't currently test monitors running on private locations on demand.`, + defaultMessage: `You can't manually start tests on a private location.`, } ); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/run_test_manually.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/run_test_manually.tsx index 3c61057ba1f18..f60423ae2bf4b 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/run_test_manually.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/run_test_manually.tsx @@ -38,7 +38,9 @@ export const RunTestManually = () => { isLoading={!Boolean(monitor) || testInProgress} onClick={() => { if (monitor) { - dispatch(manualTestMonitorAction.get(monitor.config_id)); + dispatch( + manualTestMonitorAction.get({ configId: monitor.config_id, name: monitor.name }) + ); } }} > diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx index 95295c534c559..495902b454527 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx @@ -13,10 +13,13 @@ import { useEuiShadow, EuiPanel, EuiLoadingSpinner, + EuiContextMenuPanelItemDescriptor, + EuiToolTip, } from '@elastic/eui'; import { FETCH_STATUS } from '@kbn/observability-plugin/public'; import { useDispatch, useSelector } from 'react-redux'; import styled from 'styled-components'; +import { PRIVATE_AVAILABLE_LABEL } from '../../../monitor_add_edit/form/run_test_btn'; import { manualTestMonitorAction, manualTestRunInProgressSelector, @@ -98,7 +101,10 @@ export function ActionsPopover({ }: Props) { const euiShadow = useEuiShadow('l'); const dispatch = useDispatch(); - const locationName = useLocationName({ locationId: monitor.location.id }); + const location = useLocationName({ locationId: monitor.location.id }); + const locationName = location?.label || monitor.location.id; + + const isPrivateLocation = !Boolean(location?.isServiceManaged); const detailUrl = useMonitorDetailLocator({ configId: monitor.configId, @@ -160,7 +166,7 @@ export function ActionsPopover({ const alertLoading = alertStatus(monitor.configId) === FETCH_STATUS.LOADING; - let popoverItems = [ + let popoverItems: EuiContextMenuPanelItemDescriptor[] = [ { name: actionsMenuGoToMonitorName, icon: 'sortRight', @@ -168,11 +174,17 @@ export function ActionsPopover({ }, quickInspectPopoverItem, { - name: runTestManually, + name: isPrivateLocation ? ( + + {runTestManually} + + ) : ( + runTestManually + ), icon: 'beaker', - disabled: testInProgress, + disabled: testInProgress || isPrivateLocation, onClick: () => { - dispatch(manualTestMonitorAction.get(monitor.configId)); + dispatch(manualTestMonitorAction.get({ configId: monitor.configId, name: monitor.name })); dispatch(setFlyoutConfig(null)); setIsPopoverOpen(false); }, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item.tsx index ee6ee4629a201..f6e4dceaea59b 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item.tsx @@ -60,7 +60,8 @@ export const MetricItem = ({ }) => { const [isMouseOver, setIsMouseOver] = useState(false); const [isPopoverOpen, setIsPopoverOpen] = useState(false); - const locationName = useLocationName({ locationId: monitor.location?.id }); + const locationName = + useLocationName({ locationId: monitor.location?.id })?.label || monitor.location?.id; const { status, timestamp, ping, configIdByLocation } = useStatusByLocationOverview( monitor.configId, locationName diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/common/network_data/data_formatting.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/common/network_data/data_formatting.ts index aa1a64d9eb447..4ca92c3390f1d 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/common/network_data/data_formatting.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/common/network_data/data_formatting.ts @@ -498,5 +498,5 @@ export const formatMillisecond = ( if (ms < maxMillis) { return `${ms.toFixed(digits ?? 0)} ms`; } - return `${(ms / 1000).toFixed(digits ?? 1)} s`; + return `${(ms / 1000).toFixed(digits ?? 2)} s`; }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts index a00c7223d3b1b..0962bf7aeebf3 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts @@ -60,9 +60,6 @@ export const useNetworkTimings = (checkGroupIdArg?: string, stepIndexArg?: numbe size: 0, runtime_mappings: { ...runTimeMappings, - 'synthetics.payload.is_navigation_request': { - type: 'boolean', - }, 'synthetics.payload.transfer_size': { type: 'long', }, @@ -75,11 +72,6 @@ export const useNetworkTimings = (checkGroupIdArg?: string, stepIndexArg?: numbe 'synthetics.type': 'journey/network_info', }, }, - { - term: { - 'synthetics.payload.is_navigation_request': true, - }, - }, ...useStepFilters(checkGroupId, stepIndex), ], }, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings_prev.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings_prev.ts index 7a33aaf1975f5..d59a551e58767 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings_prev.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings_prev.ts @@ -18,6 +18,8 @@ import { SYNTHETICS_TOTAL_TIMINGS, SYNTHETICS_WAIT_TIMINGS, } from '@kbn/observability-plugin/common'; +import moment from 'moment'; +import { useJourneySteps } from '../../monitor_details/hooks/use_journey_steps'; import { SYNTHETICS_INDEX_PATTERN } from '../../../../../../common/constants'; import { useReduxEsSearch } from '../../../hooks/use_redux_es_search'; @@ -36,13 +38,17 @@ export const useStepFilters = (checkGroupId: string, stepIndex: number) => { ]; }; -export const useNetworkTimingsPrevious24Hours = (stepIndexArg?: number) => { +export const useNetworkTimingsPrevious24Hours = (stepIndexArg?: number, timestampArg?: string) => { const params = useParams<{ checkGroupId: string; stepIndex: string; monitorId: string }>(); const configId = params.monitorId; const checkGroupId = params.checkGroupId; const stepIndex = stepIndexArg ?? Number(params.stepIndex); + const { currentStep } = useJourneySteps(); + + const timestamp = timestampArg ?? currentStep?.['@timestamp']; + const runTimeMappings = NETWORK_TIMINGS_FIELDS.reduce( (acc, field) => ({ ...acc, @@ -60,9 +66,6 @@ export const useNetworkTimingsPrevious24Hours = (stepIndexArg?: number) => { size: 0, runtime_mappings: { ...runTimeMappings, - 'synthetics.payload.is_navigation_request': { - type: 'boolean', - }, 'synthetics.payload.transfer_size': { type: 'long', }, @@ -73,16 +76,11 @@ export const useNetworkTimingsPrevious24Hours = (stepIndexArg?: number) => { { range: { '@timestamp': { - lte: 'now', - gte: 'now-24h/h', + lte: moment(timestamp).toISOString(), + gte: moment(timestamp).subtract(24, 'hours').toISOString(), }, }, }, - { - term: { - 'synthetics.payload.is_navigation_request': true, - }, - }, { term: { 'synthetics.type': 'journey/network_info', @@ -109,78 +107,100 @@ export const useNetworkTimingsPrevious24Hours = (stepIndexArg?: number) => { }, }, aggs: { - dns: { - percentiles: { - field: SYNTHETICS_DNS_TIMINGS, - percents: [50], - }, - }, - ssl: { - percentiles: { - field: SYNTHETICS_SSL_TIMINGS, - percents: [50], + testRuns: { + terms: { + field: 'monitor.check_group', + size: 10000, }, - }, - blocked: { - percentiles: { - field: SYNTHETICS_BLOCKED_TIMINGS, - percents: [50], - }, - }, - connect: { - percentiles: { - field: SYNTHETICS_CONNECT_TIMINGS, - percents: [50], - }, - }, - receive: { - percentiles: { - field: SYNTHETICS_RECEIVE_TIMINGS, - percents: [50], - }, - }, - send: { - percentiles: { - field: SYNTHETICS_SEND_TIMINGS, - percents: [50], - }, - }, - wait: { - percentiles: { - field: SYNTHETICS_WAIT_TIMINGS, - percents: [50], - }, - }, - total: { - percentiles: { - field: SYNTHETICS_TOTAL_TIMINGS, - percents: [50], - }, - }, - transferSize: { - percentiles: { - field: 'synthetics.payload.transfer_size', - percents: [50], + aggs: { + dns: { + sum: { + field: SYNTHETICS_DNS_TIMINGS, + }, + }, + ssl: { + sum: { + field: SYNTHETICS_SSL_TIMINGS, + }, + }, + blocked: { + sum: { + field: SYNTHETICS_BLOCKED_TIMINGS, + }, + }, + connect: { + sum: { + field: SYNTHETICS_CONNECT_TIMINGS, + }, + }, + receive: { + sum: { + field: SYNTHETICS_RECEIVE_TIMINGS, + }, + }, + send: { + sum: { + field: SYNTHETICS_SEND_TIMINGS, + }, + }, + wait: { + sum: { + field: SYNTHETICS_WAIT_TIMINGS, + }, + }, + total: { + sum: { + field: SYNTHETICS_TOTAL_TIMINGS, + }, + }, + transferSize: { + sum: { + field: 'synthetics.payload.transfer_size', + }, + }, }, }, }, }, }, [configId, stepIndex, checkGroupId], - { name: `stepNetworkPreviousTimings/${configId}/${stepIndex}` } + { + name: `stepNetworkPreviousTimings/${configId}/${stepIndex}`, + isRequestReady: Boolean(timestamp), + } ); const aggs = data?.aggregations; + const dns: number[] = []; + const connect: number[] = []; + const receive: number[] = []; + const send: number[] = []; + const wait: number[] = []; + const blocked: number[] = []; + const ssl: number[] = []; + const transferSize: number[] = []; + + aggs?.testRuns.buckets.forEach((bucket) => { + dns.push(bucket.dns.value ?? 0); + connect.push(bucket.connect.value ?? 0); + receive.push(bucket.receive.value ?? 0); + send.push(bucket.send.value ?? 0); + wait.push(bucket.wait.value ?? 0); + blocked.push(bucket.blocked.value ?? 0); + ssl.push(bucket.ssl.value ?? 0); + transferSize.push(bucket.transferSize.value ?? 0); + }); + const timings = { - dns: aggs?.dns.values['50.0'] ?? 0, - connect: aggs?.connect.values['50.0'] ?? 0, - receive: aggs?.receive.values['50.0'] ?? 0, - send: aggs?.send.values['50.0'] ?? 0, - wait: aggs?.wait.values['50.0'] ?? 0, - blocked: aggs?.blocked.values['50.0'] ?? 0, - ssl: aggs?.ssl.values['50.0'] ?? 0, - transferSize: aggs?.transferSize.values['50.0'] ?? 0, + dns: median(dns), + connect: median(connect), + receive: median(receive), + send: median(send), + wait: median(wait), + blocked: median(blocked), + ssl: median(ssl), + transferSize: median(transferSize), }; return { @@ -223,6 +243,13 @@ export const useNetworkTimingsPrevious24Hours = (stepIndexArg?: number) => { }; }; +const median = (arr: number[]): number => { + if (!arr.length) return 0; + const s = [...arr].sort((a, b) => a - b); + const mid = Math.floor(s.length / 2); + return s.length % 2 === 0 ? (s[mid - 1] + s[mid]) / 2 : s[mid]; +}; + const SYNTHETICS_CONNECT_TIMINGS_LABEL = i18n.translate('xpack.synthetics.connect.label', { defaultMessage: 'Connect', }); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_detail_page.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_detail_page.tsx index 33d3fc740eb81..4f008ceac4f35 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_detail_page.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_detail_page.tsx @@ -68,14 +68,14 @@ export const StepDetailPage = () => { - - + + - + - + diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_timing_breakdown/breakdown_legend.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_timing_breakdown/breakdown_legend.tsx index 6e2e0a144755c..1b0dab1126a84 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_timing_breakdown/breakdown_legend.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_timing_breakdown/breakdown_legend.tsx @@ -6,37 +6,52 @@ */ import React from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiHealth, EuiSpacer, EuiText } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiHealth, EuiSpacer } from '@elastic/eui'; import { useTheme } from '@kbn/observability-plugin/public'; +import { ThresholdIndicator } from '../../common/components/thershold_indicator'; +import { useNetworkTimingsPrevious24Hours } from '../hooks/use_network_timings_prev'; import { formatMillisecond } from '../common/network_data/data_formatting'; import { useNetworkTimings } from '../hooks/use_network_timings'; export const BreakdownLegend = () => { const networkTimings = useNetworkTimings(); + const { timingsWithLabels: prevTimingsWithLabels, loading } = useNetworkTimingsPrevious24Hours(); + const theme = useTheme(); return ( <> - {networkTimings.timingsWithLabels.map(({ label, value }, index) => ( - - - )[`euiColorVis${index + 1}`]} - > - {label} - - - - - {formatMillisecond(value, {})} - - - - ))} + {networkTimings.timingsWithLabels.map(({ label, value }, index) => { + const prevValueItem = prevTimingsWithLabels?.find((prev) => prev.label === label); + const prevValue = prevValueItem?.value; + + return ( + + + )[`euiColorVis${index + 1}`] + } + > + {label} + + + + + + + ); + })} ); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_timing_breakdown/network_timings_donut.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_timing_breakdown/network_timings_donut.tsx index 075ae8a4ce84d..dd9a4312bf647 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_timing_breakdown/network_timings_donut.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_timing_breakdown/network_timings_donut.tsx @@ -16,7 +16,14 @@ import { PartitionLayout, Settings, } from '@elastic/charts'; -import { EuiLoadingSpinner, EuiSpacer, EuiTitle } from '@elastic/eui'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiIconTip, + EuiLoadingSpinner, + EuiSpacer, + EuiTitle, +} from '@elastic/eui'; import { useTheme } from '@kbn/observability-plugin/public'; import { formatMillisecond } from '../common/network_data/data_formatting'; @@ -47,9 +54,18 @@ export const NetworkTimingsDonut = () => { return ( <> - -

{TIMINGS_BREAKDOWN}

- + + + +

{TIMINGS_BREAKDOWN}

+
+
+ + + + +
+ @@ -81,3 +97,7 @@ export const NetworkTimingsDonut = () => { const TIMINGS_BREAKDOWN = i18n.translate('xpack.synthetics.stepDetailsRoute.timingsBreakdown', { defaultMessage: 'Timing breakdown', }); + +const SUM_TIMINGS = i18n.translate('xpack.synthetics.stepDetailsRoute.timingsBreakdown.info', { + defaultMessage: 'Sum of all network request timings', +}); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/middle_truncated_text.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/middle_truncated_text.tsx index 9c96c78e74649..1ff4f1b6c78ba 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/middle_truncated_text.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/middle_truncated_text.tsx @@ -97,8 +97,8 @@ export const getChunks = (text: string = '') => { }; // Helper component for adding middle text truncation, e.g. -// really-really-really-long....ompressed.js -// Can be used to accomodate content in sidebar item rendering. +// really-really-really-long....Compressed.js +// Can be used to accommodate content in sidebar item rendering. export const MiddleTruncatedText = ({ index, ariaLabel, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/sidebar.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/sidebar.tsx index 7909c47802bd3..56b398c902431 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/sidebar.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/sidebar.tsx @@ -30,7 +30,7 @@ export const Sidebar: React.FC = ({ items, render }) => { > props.theme.eui.euiColorDarkestShade}; + background-color: ${({ theme: { eui, darkMode } }) => + darkMode ? eui.euiColorDarkestShade : eui.euiColorEmptyShade}; border-radius: ${(props) => props.theme.eui.euiBorderRadius}; - color: ${(props) => props.theme.eui.euiColorLightestShade}; + color: ${({ theme: { eui, darkMode } }) => + !darkMode ? eui.euiColorDarkestShade : eui.euiColorLightestShade}; padding: ${(props) => props.theme.eui.euiSizeS}; .euiToolTip__arrow { - background-color: ${(props) => props.theme.eui.euiColorDarkestShade}; + background-color: ${({ theme: { eui, darkMode } }) => + darkMode ? eui.euiColorDarkestShade : eui.euiColorEmptyShade}; } `; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_bar_chart.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_bar_chart.tsx index 124b64793678b..1250bb02f8a2e 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_bar_chart.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_bar_chart.tsx @@ -95,7 +95,7 @@ export const WaterfallBarChart = ({ boundary: document.getElementById('app-fixed-viewport') ?? undefined, customTooltip: Tooltip, }} - theme={theme} + theme={{ ...theme, tooltip: { maxWidth: 500 } }} onProjectionClick={handleProjectionClick} onElementClick={handleElementClick} /> diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_chart.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_chart.tsx index 9ea2ff0cd4b5b..ef191a2bfccbe 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_chart.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_chart.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useRef } from 'react'; +import React from 'react'; import { TickFormatter, DomainRange, BarStyleAccessor } from '@elastic/charts'; import { EuiFlexGroup, EuiFlexItem, useEuiTheme } from '@elastic/eui'; @@ -62,8 +62,6 @@ export const WaterfallChart = ({ fetchedNetworkRequests, } = useWaterfallContext(); - const chartWrapperDivRef = useRef(null); - const shouldRenderSidebar = !!(sidebarItems && renderSidebarItem); const chartsToDisplay = useBarCharts({ data }); @@ -112,10 +110,7 @@ export const WaterfallChart = ({ /> - + {shouldRenderSidebar ? ( diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_sidebar_item.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_sidebar_item.tsx index cff7853b2bcd6..60898420c84b2 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_sidebar_item.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_sidebar_item.tsx @@ -20,12 +20,12 @@ interface SidebarItemProps { highestIndex: number; } -export const WaterfallSidebarItem = ({ +export const WaterfallSidebarItem = React.memo(function WaterfallSidebarItem({ item, highestIndex, renderFilterScreenReaderText, onClick, -}: SidebarItemProps) => { +}: SidebarItemProps) { const [buttonRef, setButtonRef] = useState>(); const { status, offsetIndex, index, isHighlighted, url } = item; @@ -91,4 +91,4 @@ export const WaterfallSidebarItem = ({ )} ); -}; +}); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_tooltip_content.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_tooltip_content.tsx index 23ad238a71864..b4e4ff040d6c6 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_tooltip_content.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/step_waterfall_chart/waterfall/waterfall_tooltip_content.tsx @@ -33,14 +33,14 @@ export const WaterfallTooltipContent: React.FC = ({ text, url }) => { datum.config.showTooltip ); return ( - <> - {text} +
+ {text} {tooltipMetrics.map((item, idx) => ( {renderTooltipItem(item.config.tooltipProps)} ))} - +
); }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/test_now_mode_flyout.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/test_now_mode_flyout.tsx index 422f10a9d71fe..616c13b1a9529 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/test_now_mode_flyout.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/test_now_mode_flyout.tsx @@ -25,10 +25,12 @@ import { TestNowMode } from './test_now_mode'; export interface TestRun { id: string; + name: string; monitor: MonitorFields; } export function TestNowModeFlyout({ + name, testRun, onClose, onDone, @@ -37,6 +39,7 @@ export function TestNowModeFlyout({ errors, serviceError, }: { + name: string; serviceError?: Error; errors: ServiceLocationErrors; testRun?: TestRun; @@ -56,7 +59,9 @@ export function TestNowModeFlyout({ > -

{TEST_RESULTS}

+

+ {name}-{TEST_RESULTS} +

diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/test_now_mode_flyout_container.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/test_now_mode_flyout_container.tsx index 3b8ac12a7ac36..a0b7e4c6b3047 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/test_now_mode_flyout_container.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/test_now_mode_flyout_container.tsx @@ -61,9 +61,14 @@ export function TestNowModeFlyoutContainer() { { +describe('useLocationName', () => { beforeEach(() => { jest.clearAllMocks(); }); @@ -51,7 +51,14 @@ describe('useMonitorListFilters', () => { }), { wrapper: WrapperWithState } ); - expect(result.current).toEqual('US Central'); + expect(result.current).toEqual({ + geo: { lat: 41.25, lon: -95.86 }, + id: 'us_central', + isServiceManaged: true, + label: 'US Central', + status: 'ga', + url: 'mockUrl', + }); }); it('returns the location id if matching location cannot be found', () => { @@ -91,6 +98,6 @@ describe('useMonitorListFilters', () => { }), { wrapper: WrapperWithState } ); - expect(result.current).toEqual('us_west'); + expect(result.current).toEqual(undefined); }); }); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_name.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_name.tsx index 31b4ca6bd5324..31782083541e2 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_name.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_location_name.tsx @@ -22,7 +22,7 @@ export function useLocationName({ locationId }: { locationId: string }) { if (!locationsLoaded) { return undefined; } else { - return locations.find((location) => location.id === locationId)?.label || locationId; + return locations.find((location) => location.id === locationId); } }, [locationsLoaded, locations, locationId]); } diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/actions.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/actions.ts index 6d3220f5a3ee0..b1eb68738bc50 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/actions.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/actions.ts @@ -13,9 +13,10 @@ import { createAsyncAction } from '../utils/actions'; export const toggleTestNowFlyoutAction = createAction('TOGGLE TEST NOW FLYOUT ACTION'); export const hideTestNowFlyoutAction = createAction('HIDE ALL TEST NOW FLYOUT ACTION'); -export const manualTestMonitorAction = createAsyncAction( - 'TEST_NOW_MONITOR_ACTION' -); +export const manualTestMonitorAction = createAsyncAction< + { configId: string; name: string }, + TestNowResponse | undefined +>('TEST_NOW_MONITOR_ACTION'); export const manualTestRunUpdateAction = createAction< Partial & { testRunId: string } diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/api.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/api.ts index 1314d656acb71..35cd0fda1ee05 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/api.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/api.ts @@ -10,9 +10,12 @@ import { TestNowResponse } from '../../../../../common/types'; import { apiService } from '../../../../utils/api_service'; import { API_URLS } from '../../../../../common/constants'; -export const triggerTestNowMonitor = async ( - configId: string -): Promise => { +export const triggerTestNowMonitor = async ({ + configId, +}: { + configId: string; + name: string; +}): Promise => { return await apiService.get(API_URLS.TRIGGER_MONITOR + `/${configId}`); }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/index.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/index.ts index c8b31ff1fcefe..9f1d5a3296f00 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/index.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/manual_test_runs/index.ts @@ -33,6 +33,7 @@ export enum TestRunStatus { export interface ManualTestRun { configId: string; + name: string; testRunId?: string; status: TestRunStatus; schedule: SyntheticsMonitorSchedule; @@ -53,7 +54,10 @@ export const manualTestRunsReducer = createReducer(initialState, (builder) => { builder .addCase( String(manualTestMonitorAction.get), - (state: WritableDraft, action: PayloadAction) => { + ( + state: WritableDraft, + action: PayloadAction<{ configId: string; name: string }> + ) => { state = Object.values(state).reduce((acc, curr) => { acc[curr.configId] = { ...curr, @@ -63,8 +67,9 @@ export const manualTestRunsReducer = createReducer(initialState, (builder) => { return acc; }, state); - state[action.payload] = { - configId: action.payload, + state[action.payload.configId] = { + configId: action.payload.configId, + name: action.payload.name, status: TestRunStatus.LOADING, schedule: { unit: ScheduleUnit.MINUTES, number: '3' }, locations: [], @@ -84,6 +89,7 @@ export const manualTestRunsReducer = createReducer(initialState, (builder) => { locations: payload.locations, isTestNowFlyoutOpen: true, monitor: payload.monitor, + name: payload.monitor.name, }; } ) diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap b/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap index 5be2524c6ebce..7b8cb38a08d11 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap +++ b/x-pack/plugins/synthetics/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap @@ -172,7 +172,7 @@ exports[`PingListExpandedRow renders link to docs if body is not recorded but it
docs diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index b492d7e67edfc..f01cfb837f9fc 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2272,7 +2272,6 @@ "discover.fieldList.flyoutBackIcon": "Retour", "discover.fieldList.flyoutHeading": "Liste des champs", "discover.grid.closePopover": "Fermer la fenêtre contextuelle", - "discover.grid.copyClipboardButton": "Copier dans le presse-papiers", "discover.grid.copyColumnNameToClipboard.toastTitle": "Copié dans le presse-papiers", "discover.grid.copyColumnNameToClipBoardButton": "Copier le nom", "discover.grid.copyColumnValuesToClipBoardButton": "Copier la colonne", @@ -3973,7 +3972,6 @@ "indexPatternFieldEditor.editor.form.advancedSettings.hideButtonLabel": "Masquer les paramètres avancés", "indexPatternFieldEditor.editor.form.advancedSettings.showButtonLabel": "Afficher les paramètres avancés", "indexPatternFieldEditor.editor.form.changeWarning": "Modifier le nom ou le type peut affecter les recherches et les visualisations utilisant ce champ.", - "indexPatternFieldEditor.editor.form.customLabelDescription": "Créez une étiquette à afficher à la place du nom du champ dans Discover, Maps et Visualize. Utile pour raccourcir un nom de champ long. Les requêtes et les filtres utilisent le nom de champ d'origine.", "indexPatternFieldEditor.editor.form.customLabelLabel": "Étiquette personnalisée", "indexPatternFieldEditor.editor.form.customLabelTitle": "Définir une étiquette personnalisée", "indexPatternFieldEditor.editor.form.defineFieldLabel": "Définir un script", @@ -6737,7 +6735,6 @@ "xpack.apm.transactionDetails.errorCount": "{errorCount, number} {errorCount, plural, one {erreur} other {erreurs}}", "xpack.apm.transactionDetails.transFlyout.callout.agentDroppedSpansMessage": "L'agent APM qui a signalé cette transaction a abandonné {dropped} intervalles ou plus, d'après sa configuration.", "xpack.apm.transactionRateLabel": "{displayedValue} tpm", - "xpack.apm.transactionsTable.cardinalityWarning.body": "Le nombre de noms de transactions uniques dépasse la valeur configurée de {bucketSize}. Essayez de reconfigurer vos agents de façon à regrouper les transactions similaires ou augmentez la valeur de {codeBlock}", "xpack.apm.tutorial.config_otel.description1": "(1) Les agents et SDK OpenTelemetry doivent prendre en charge les variables {otelExporterOtlpEndpoint}, {otelExporterOtlpHeaders} et {otelResourceAttributes}. Certains composants instables peuvent ne pas encore répondre à cette exigence.", "xpack.apm.tutorial.config_otel.description3": "La liste exhaustive des variables d'environnement, les paramètres de ligne de commande et les extraits de code de configuration (conformes à la spécification OpenTelemetry) se trouvent dans le {otelInstrumentationGuide}. Certains clients OpenTelemetry instables peuvent ne pas prendre en charge toutes les fonctionnalités et nécessitent peut-être d'autres mécanismes de configuration.", "xpack.apm.tutorial.djangoClient.configure.commands.setCustomApmServerUrlComment": "Définir l'URL personnalisée du serveur APM (par défaut : {defaultApmServerUrl})", @@ -7977,8 +7974,6 @@ "xpack.apm.transactions.latency.chart.95thPercentileLabel": "95e centile", "xpack.apm.transactions.latency.chart.99thPercentileLabel": "99e centile", "xpack.apm.transactions.latency.chart.averageLabel": "Moyenne", - "xpack.apm.transactionsTable.cardinalityWarning.docsLink": "En savoir plus dans la documentation", - "xpack.apm.transactionsTable.cardinalityWarning.title": "Cette vue présente un sous-ensemble de transactions signalées.", "xpack.apm.transactionsTable.errorMessage": "Impossible de récupérer", "xpack.apm.transactionsTable.linkText": "Afficher les transactions", "xpack.apm.transactionsTable.title": "Transactions", @@ -20638,7 +20633,6 @@ "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationDetails.singleBucketTooltip.high": "La différence entre les valeurs actuelles et typiques de ce compartiment a un impact élevé.", "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationDetails.singleBucketTooltip.low": "La différence entre les valeurs actuelles et typiques de ce compartiment a un impact modéré.", "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationDetails.singleBucketTooltip.medium": "La différence entre les valeurs actuelles et typiques de ce compartiment a un impact significatif.", - "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationTitle": "Explication des anomalies", "xpack.ml.anomaliesTable.anomalyDetails.categoryExamplesTitle": "Exemples de catégorie", "xpack.ml.anomaliesTable.anomalyDetails.descriptionTitle": "Description", "xpack.ml.anomaliesTable.anomalyDetails.detailsOnHighestSeverityAnomalyTitle": "Détails sur l'anomalie la plus sévère", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 0320c5a29db5f..6667f6d281993 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2270,7 +2270,6 @@ "discover.fieldList.flyoutBackIcon": "戻る", "discover.fieldList.flyoutHeading": "フィールドリスト", "discover.grid.closePopover": "ポップオーバーを閉じる", - "discover.grid.copyClipboardButton": "クリップボードにコピー", "discover.grid.copyColumnNameToClipboard.toastTitle": "クリップボードにコピーされました", "discover.grid.copyColumnNameToClipBoardButton": "名前をコピー", "discover.grid.copyColumnValuesToClipBoardButton": "列をコピー", @@ -3970,7 +3969,6 @@ "indexPatternFieldEditor.editor.form.advancedSettings.hideButtonLabel": "高度な SIEM 設定の非表示化", "indexPatternFieldEditor.editor.form.advancedSettings.showButtonLabel": "高度なSIEM設定の表示", "indexPatternFieldEditor.editor.form.changeWarning": "名前または型を変更すると、このフィールドに依存する検索およびビジュアライゼーションが破損する可能性があります。", - "indexPatternFieldEditor.editor.form.customLabelDescription": "Discover、Maps、Visualizeでフィールド名の代わりに表示するラベルを作成します。長いフィールド名を短くする際に役立ちます。 クエリとフィルターは元のフィールド名を使用します。", "indexPatternFieldEditor.editor.form.customLabelLabel": "カスタムラベル", "indexPatternFieldEditor.editor.form.customLabelTitle": "カスタムラベルを設定", "indexPatternFieldEditor.editor.form.defineFieldLabel": "スクリプトを定義", @@ -6727,7 +6725,6 @@ "xpack.apm.transactionDetails.errorCount": "{errorCount, number} {errorCount, plural, other {エラー}}", "xpack.apm.transactionDetails.transFlyout.callout.agentDroppedSpansMessage": "このトランザクションを報告した APM エージェントが、構成に基づき {dropped} 個以上のスパンをドロップしました。", "xpack.apm.transactionRateLabel": "{displayedValue} tpm", - "xpack.apm.transactionsTable.cardinalityWarning.body": "一意のトランザクション名の数が構成された値{bucketSize}を超えています。エージェントを再構成し、類似したトランザクションをグループ化するか、{codeBlock}の値を増やしてください。", "xpack.apm.tutorial.config_otel.description1": "(1) OpenTelemetryエージェントとSDKは、{otelExporterOtlpEndpoint}、{otelExporterOtlpHeaders}、および{otelResourceAttributes}変数をサポートする必要があります。一部の不安定なコンポーネントは、まだこの要件を満たしていない場合があります。", "xpack.apm.tutorial.config_otel.description3": "環境変数、コマンドラインパラメーター、構成コードスニペット(OpenTelemetry仕様に準拠)の網羅的な一覧は、{otelInstrumentationGuide}をご覧ください。一部の不安定なOpenTelemetryクライアントでは、一部の機能がサポートされておらず、別の構成メカニズムが必要になる場合があります。", "xpack.apm.tutorial.djangoClient.configure.commands.setCustomApmServerUrlComment": "カスタム APM Server URL(デフォルト:{defaultApmServerUrl})を設定します", @@ -7966,8 +7963,6 @@ "xpack.apm.transactions.latency.chart.95thPercentileLabel": "95 パーセンタイル", "xpack.apm.transactions.latency.chart.99thPercentileLabel": "99 パーセンタイル", "xpack.apm.transactions.latency.chart.averageLabel": "平均", - "xpack.apm.transactionsTable.cardinalityWarning.docsLink": "詳細はドキュメントをご覧ください", - "xpack.apm.transactionsTable.cardinalityWarning.title": "このビューには、報告されたトランザクションのサブセットが表示されます。", "xpack.apm.transactionsTable.errorMessage": "取得できませんでした", "xpack.apm.transactionsTable.linkText": "トランザクションを表示", "xpack.apm.transactionsTable.title": "トランザクション", @@ -20618,7 +20613,6 @@ "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationDetails.singleBucketTooltip.high": "このバケットの実際の値と標準の値の間で見られる差異の影響が大きくなります。", "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationDetails.singleBucketTooltip.low": "このバケットの実際の値と標準の値の間で見られる差異の影響が中程度になります。", "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationDetails.singleBucketTooltip.medium": "このバケットの実際の値と標準の値の間で見られる差異の影響が非常に大きくなります。", - "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationTitle": "異常の説明", "xpack.ml.anomaliesTable.anomalyDetails.categoryExamplesTitle": "カテゴリーの例", "xpack.ml.anomaliesTable.anomalyDetails.descriptionTitle": "説明", "xpack.ml.anomaliesTable.anomalyDetails.detailsOnHighestSeverityAnomalyTitle": "深刻度が高い異常の詳細", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index cbd6bbdfc4b44..8926486697269 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2274,7 +2274,6 @@ "discover.fieldList.flyoutBackIcon": "返回", "discover.fieldList.flyoutHeading": "字段列表", "discover.grid.closePopover": "关闭弹出框", - "discover.grid.copyClipboardButton": "复制到剪贴板", "discover.grid.copyColumnNameToClipboard.toastTitle": "已复制到剪贴板", "discover.grid.copyColumnNameToClipBoardButton": "复制名称", "discover.grid.copyColumnValuesToClipBoardButton": "复制列", @@ -3975,7 +3974,6 @@ "indexPatternFieldEditor.editor.form.advancedSettings.hideButtonLabel": "隐藏高级设置", "indexPatternFieldEditor.editor.form.advancedSettings.showButtonLabel": "显示高级设置", "indexPatternFieldEditor.editor.form.changeWarning": "更改名称或类型会中断依赖此字段的搜索和可视化。", - "indexPatternFieldEditor.editor.form.customLabelDescription": "创建要代替 Discover、Maps 和 Visualize 中的字段名称显示的标签。用于缩短长字段名称。 查询和筛选使用原始字段名称。", "indexPatternFieldEditor.editor.form.customLabelLabel": "定制标签", "indexPatternFieldEditor.editor.form.customLabelTitle": "设置定制标签", "indexPatternFieldEditor.editor.form.defineFieldLabel": "定义脚本", @@ -6740,7 +6738,6 @@ "xpack.apm.transactionDetails.errorCount": "{errorCount, number} 个 {errorCount, plural, other {错误}}", "xpack.apm.transactionDetails.transFlyout.callout.agentDroppedSpansMessage": "报告此事务的 APM 代理基于其配置丢弃了 {dropped} 个跨度。", "xpack.apm.transactionRateLabel": "{displayedValue} tpm", - "xpack.apm.transactionsTable.cardinalityWarning.body": "唯一事务名称的数目超过 {bucketSize} 的已配置值。尝试重新配置您的代理以对类似的事务分组或增大 {codeBlock} 的值", "xpack.apm.tutorial.config_otel.description1": "(1) OpenTelemetry 代理和 SDK 必须支持 {otelExporterOtlpEndpoint}、{otelExporterOtlpHeaders} 和 {otelResourceAttributes} 变量;某些不稳定的组件可能尚未遵循此要求。", "xpack.apm.tutorial.config_otel.description3": "{otelInstrumentationGuide}中提供了环境变量、命令行参数和配置代码片段(根据 OpenTelemetry 规范)的详细列表。某些不稳定的 OpenTelemetry 客户端可能不支持所有功能,并可能需要备选配置机制。", "xpack.apm.tutorial.djangoClient.configure.commands.setCustomApmServerUrlComment": "设置定制 APM Server URL(默认值:{defaultApmServerUrl})", @@ -7980,8 +7977,6 @@ "xpack.apm.transactions.latency.chart.95thPercentileLabel": "第 95 个百分位", "xpack.apm.transactions.latency.chart.99thPercentileLabel": "第 99 个百分位", "xpack.apm.transactions.latency.chart.averageLabel": "平均值", - "xpack.apm.transactionsTable.cardinalityWarning.docsLink": "在文档中了解详情", - "xpack.apm.transactionsTable.cardinalityWarning.title": "此视图显示已报告事务的子集。", "xpack.apm.transactionsTable.errorMessage": "无法提取", "xpack.apm.transactionsTable.linkText": "查看事务", "xpack.apm.transactionsTable.title": "事务", @@ -20648,7 +20643,6 @@ "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationDetails.singleBucketTooltip.high": "此存储桶中的实际值与典型值之间的差异会产生较大影响。", "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationDetails.singleBucketTooltip.low": "此存储桶中的实际值与典型值之间的差异会产生适度影响。", "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationDetails.singleBucketTooltip.medium": "此存储桶中的实际值与典型值之间的差异会产生重大影响。", - "xpack.ml.anomaliesTable.anomalyDetails.anomalyExplanationTitle": "异常解释", "xpack.ml.anomaliesTable.anomalyDetails.categoryExamplesTitle": "类别示例", "xpack.ml.anomaliesTable.anomalyDetails.descriptionTitle": "描述", "xpack.ml.anomaliesTable.anomalyDetails.detailsOnHighestSeverityAnomalyTitle": "有关最高严重性异常的详情", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx index 702fbad50a85c..b80a5361f4d5e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/rules_setting/rules_settings_modal.tsx @@ -261,13 +261,11 @@ export const RulesSettingsModal = memo((props: RulesSettingsModalProps) => { return ( - -

- -

+ +
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.scss b/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.scss index 601f09df1de8b..85d161d5c978a 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.scss +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.scss @@ -12,4 +12,12 @@ .actAccordionActionForm__button { padding: $euiSizeM; + padding-left: $euiSizeL; } + +.actAccordionActionForm .euiAccordion__iconButton { + transform: translateX($euiSizeM) rotate(0deg) !important; +} +.actAccordionActionForm .euiAccordion__iconButton.euiAccordion__iconButton-isOpen { + transform: translateX($euiSizeM) rotate(90deg) !important; +} \ No newline at end of file diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rule_types.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rule_types.ts index 71b7bc4fd3798..05b36c8c36b83 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rule_types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/rule_types.ts @@ -24,6 +24,7 @@ const rewriteBodyReq: RewriteRequestCase = ({ rule_task_timeout: ruleTaskTimeout, does_set_recovery_context: doesSetRecoveryContext, default_schedule_interval: defaultScheduleInterval, + has_get_summarized_alerts: hasGetSummarizedAlerts, ...rest }: AsApiContract) => ({ enabledInLicense, @@ -36,6 +37,7 @@ const rewriteBodyReq: RewriteRequestCase = ({ ruleTaskTimeout, doesSetRecoveryContext, defaultScheduleInterval, + hasGetSummarizedAlerts, ...rest, }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx index 17b27bf509d3b..d75ff43eddd6c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx @@ -35,7 +35,11 @@ import { ActionTypeForm } from './action_type_form'; import { AddConnectorInline } from './connector_add_inline'; import { actionTypeCompare } from '../../lib/action_type_compare'; import { checkActionFormActionTypeEnabled } from '../../lib/check_action_type_enabled'; -import { DEFAULT_FREQUENCY, VIEW_LICENSE_OPTIONS_LINK } from '../../../common/constants'; +import { + DEFAULT_FREQUENCY_WITH_SUMMARY, + DEFAULT_FREQUENCY_WITHOUT_SUMMARY, + VIEW_LICENSE_OPTIONS_LINK, +} from '../../../common/constants'; import { useKibana } from '../../../common/lib/kibana'; import { ConnectorAddModal } from '.'; import { suspendedComponentWithProps } from '../../lib/suspended_component_with_props'; @@ -65,6 +69,7 @@ export interface ActionAccordionFormProps { isActionGroupDisabledForActionType?: (actionGroupId: string, actionTypeId: string) => boolean; hideActionHeader?: boolean; hideNotifyWhen?: boolean; + hasSummary?: boolean; minimumThrottleInterval?: [number | undefined, string]; } @@ -92,6 +97,7 @@ export const ActionForm = ({ isActionGroupDisabledForActionType, hideActionHeader, hideNotifyWhen, + hasSummary, minimumThrottleInterval, }: ActionAccordionFormProps) => { const { @@ -216,7 +222,7 @@ export const ActionForm = ({ actionTypeId: actionTypeModel.id, group: defaultActionGroupId, params: {}, - frequency: DEFAULT_FREQUENCY, + frequency: hasSummary ? DEFAULT_FREQUENCY_WITH_SUMMARY : DEFAULT_FREQUENCY_WITHOUT_SUMMARY, }); setActionIdByIndex(actionTypeConnectors[0].id, actions.length - 1); } @@ -228,7 +234,7 @@ export const ActionForm = ({ actionTypeId: actionTypeModel.id, group: defaultActionGroupId, params: {}, - frequency: DEFAULT_FREQUENCY, + frequency: hasSummary ? DEFAULT_FREQUENCY_WITH_SUMMARY : DEFAULT_FREQUENCY_WITHOUT_SUMMARY, }); setActionIdByIndex(actions.length.toString(), actions.length - 1); setEmptyActionsIds([...emptyActionsIds, actions.length.toString()]); @@ -391,18 +397,15 @@ export const ActionForm = ({ (_item: RuleAction, i: number) => i !== index ); setActions(updatedActions); - setIsAddActionPanelOpen( - updatedActions.filter((item: RuleAction) => item.id !== actionItem.id).length === - 0 - ); + setIsAddActionPanelOpen(updatedActions.length === 0); setActiveActionItem(undefined); }} hideNotifyWhen={hideNotifyWhen} + hasSummary={hasSummary} minimumThrottleInterval={minimumThrottleInterval} /> ); })} - {isAddActionPanelOpen ? ( <> @@ -452,9 +455,11 @@ export const ActionForm = ({ ) : ( - + setIsAddActionPanelOpen(true)} > diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_notify_when.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_notify_when.test.tsx new file mode 100644 index 0000000000000..8fd286784824c --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_notify_when.test.tsx @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; +import { EuiSuperSelectProps } from '@elastic/eui'; +import { act } from 'react-dom/test-utils'; +import { RuleAction } from '../../../types'; +import { ActionNotifyWhen } from './action_notify_when'; +import { RuleNotifyWhen } from '@kbn/alerting-plugin/common'; +import { + DEFAULT_FREQUENCY_WITHOUT_SUMMARY, + DEFAULT_FREQUENCY_WITH_SUMMARY, +} from '../../../common/constants'; + +describe('action_notify_when', () => { + async function setup( + frequency: RuleAction['frequency'] = DEFAULT_FREQUENCY_WITH_SUMMARY, + hasSummary: boolean = true + ) { + const wrapper = mountWithIntl( + + ); + + // Wait for active space to resolve before requesting the component to update + await act(async () => { + await nextTick(); + wrapper.update(); + }); + + return wrapper; + } + + it('renders the passed-in frequency on load', async () => { + const wrapperDefault = await setup(); + { + const summaryOrPerRuleSelect = wrapperDefault.find( + '[data-test-subj="summaryOrPerRuleSelect"]' + ); + expect(summaryOrPerRuleSelect.exists()).toBeTruthy(); + expect(summaryOrPerRuleSelect.first().props()['aria-label']).toEqual('Summary of alerts'); + + const notifyWhenSelect = wrapperDefault.find('[data-test-subj="notifyWhenSelect"]'); + expect(notifyWhenSelect.exists()).toBeTruthy(); + expect((notifyWhenSelect.first().props() as EuiSuperSelectProps<''>).valueOfSelected).toEqual( + RuleNotifyWhen.ACTIVE + ); + } + const wrapperForEach = await setup(DEFAULT_FREQUENCY_WITHOUT_SUMMARY); + { + const summaryOrPerRuleSelect = wrapperForEach.find( + '[data-test-subj="summaryOrPerRuleSelect"]' + ); + expect(summaryOrPerRuleSelect.exists()).toBeTruthy(); + expect(summaryOrPerRuleSelect.first().props()['aria-label']).toEqual('For each alert'); + + const notifyWhenSelect = wrapperForEach.find('[data-test-subj="notifyWhenSelect"]'); + expect(notifyWhenSelect.exists()).toBeTruthy(); + expect((notifyWhenSelect.first().props() as EuiSuperSelectProps<''>).valueOfSelected).toEqual( + RuleNotifyWhen.CHANGE + ); + } + const wrapperSummaryThrottle = await setup({ + ...DEFAULT_FREQUENCY_WITH_SUMMARY, + throttle: '5h', + notifyWhen: RuleNotifyWhen.THROTTLE, + }); + { + const summaryOrPerRuleSelect = wrapperSummaryThrottle.find( + '[data-test-subj="summaryOrPerRuleSelect"]' + ); + expect(summaryOrPerRuleSelect.exists()).toBeTruthy(); + expect(summaryOrPerRuleSelect.first().props()['aria-label']).toEqual('Summary of alerts'); + + const notifyWhenSelect = wrapperSummaryThrottle.find('[data-test-subj="notifyWhenSelect"]'); + expect(notifyWhenSelect.exists()).toBeTruthy(); + expect((notifyWhenSelect.first().props() as EuiSuperSelectProps<''>).valueOfSelected).toEqual( + RuleNotifyWhen.THROTTLE + ); + } + expect( + wrapperSummaryThrottle.find('[data-test-subj="throttleInput"]').first().props().value + ).toEqual(5); + expect( + wrapperSummaryThrottle.find('[data-test-subj="throttleUnitInput"]').first().props().value + ).toEqual('h'); + }); + + it('hides the summary selector when hasSummary is false', async () => { + const wrapper = await setup(DEFAULT_FREQUENCY_WITHOUT_SUMMARY, false); + const summaryOrPerRuleSelect = wrapper.find('[data-test-subj="summaryOrPerRuleSelect"]'); + expect(summaryOrPerRuleSelect.exists()).toBeFalsy(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_notify_when.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_notify_when.tsx index 624ced0843bd4..5735568df592d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_notify_when.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_notify_when.tsx @@ -6,13 +6,13 @@ */ import { RuleNotifyWhen } from '@kbn/alerting-plugin/common'; -import React, { useState, useEffect, useCallback } from 'react'; +import React, { useState, useEffect, useCallback, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { euiStyled } from '@kbn/kibana-react-plugin/common'; import { EuiFlexGroup, EuiFlexItem, - EuiIconTip, EuiFormRow, EuiFieldNumber, EuiSelect, @@ -20,14 +20,19 @@ import { EuiSpacer, EuiSuperSelect, EuiSuperSelectOption, + EuiPopover, + EuiButtonEmpty, + EuiContextMenuPanel, + EuiContextMenuItem, } from '@elastic/eui'; import { some, filter, map } from 'fp-ts/lib/Option'; import { pipe } from 'fp-ts/lib/pipeable'; import { getTimeOptions } from '../../../common/lib/get_time_options'; import { RuleNotifyWhenType, RuleAction } from '../../../types'; -import { DEFAULT_FREQUENCY } from '../../../common/constants'; - -const DEFAULT_NOTIFY_WHEN_VALUE: RuleNotifyWhenType = 'onActionGroupChange'; +import { + DEFAULT_FREQUENCY_WITH_SUMMARY, + DEFAULT_FREQUENCY_WITHOUT_SUMMARY, +} from '../../../common/constants'; export const NOTIFY_WHEN_OPTIONS: Array> = [ { @@ -116,28 +121,60 @@ export const NOTIFY_WHEN_OPTIONS: Array }, ]; -interface RuleNotifyWhenProps { +interface ActionNotifyWhenProps { frequency: RuleAction['frequency']; throttle: number | null; throttleUnit: string; onNotifyWhenChange: (notifyWhen: RuleNotifyWhenType) => void; onThrottleChange: (throttle: number | null, throttleUnit: string) => void; + onSummaryChange: (summary: boolean) => void; + hasSummary?: boolean; showMinimumThrottleWarning?: boolean; showMinimumThrottleUnitWarning?: boolean; } export const ActionNotifyWhen = ({ - frequency = DEFAULT_FREQUENCY, + hasSummary, + frequency = hasSummary ? DEFAULT_FREQUENCY_WITH_SUMMARY : DEFAULT_FREQUENCY_WITHOUT_SUMMARY, throttle, throttleUnit, onNotifyWhenChange, onThrottleChange, + onSummaryChange, showMinimumThrottleWarning, showMinimumThrottleUnitWarning, -}: RuleNotifyWhenProps) => { +}: ActionNotifyWhenProps) => { const [showCustomThrottleOpts, setShowCustomThrottleOpts] = useState(false); - const [notifyWhenValue, setNotifyWhenValue] = - useState(DEFAULT_NOTIFY_WHEN_VALUE); + const [notifyWhenValue, setNotifyWhenValue] = useState( + hasSummary + ? DEFAULT_FREQUENCY_WITH_SUMMARY.notifyWhen + : DEFAULT_FREQUENCY_WITHOUT_SUMMARY.notifyWhen + ); + + // Track whether the user has changed the notify when value from default. This is necessary because the + // "default" notifyWhen value for summary: true is the second menu item for summary: false. We want the UX to be: + // Case A + // - User opens the form with summary: false, notifyWhen: CHANGE + // - User switches to summary: true, necessitating a switch to notifyWhen: ACTIVE + // - User doesn't touch notifyWhen: ACTIVE, switches back to summary: false. notifyWhen should switch to CHANGE, the 1st menu option + // Case B + // - User opens the form with summary: false, notifyWhen: ACTIVE (not the "default") + // - User switches to summary: true + // - User switches back to summary: false. notifyWhen stays ACTIVE + // Case C + // - User opens the form with summary: true, notifyWhen: ACTIVE (the "default") + // - User doesn't change notifyWhen, just sets summary: false. notifyWhen should switch to CHANGE + // Case D + // - User opens the form with summary: true, notifyWhen: THROTTLE, or summary: false, notifyWhen: !CHANGE + // - When user changes summary, leave notifyWhen unchanged + const [notifyWhenValueChangedFromDefault, setNotifyWhenValueChangedFromDefault] = useState( + // Check if the initial notifyWhen value is different from the default value for its summary type + frequency.summary + ? frequency.notifyWhen !== DEFAULT_FREQUENCY_WITH_SUMMARY.notifyWhen + : frequency.notifyWhen !== DEFAULT_FREQUENCY_WITHOUT_SUMMARY.notifyWhen + ); + + const [summaryMenuOpen, setSummaryMenuOpen] = useState(false); useEffect(() => { if (frequency.notifyWhen) { @@ -149,54 +186,137 @@ export const ActionNotifyWhen = ({ }, [frequency]); useEffect(() => { - setShowCustomThrottleOpts(notifyWhenValue === 'onThrottleInterval'); + setShowCustomThrottleOpts(notifyWhenValue === RuleNotifyWhen.THROTTLE); }, [notifyWhenValue]); const onNotifyWhenValueChange = useCallback( (newValue: RuleNotifyWhenType) => { onNotifyWhenChange(newValue); setNotifyWhenValue(newValue); + setNotifyWhenValueChangedFromDefault(true); // Calling onNotifyWhenChange and onThrottleChange at the same time interferes with the React state lifecycle // so wait for onNotifyWhenChange to process before calling onThrottleChange setTimeout( () => - onThrottleChange(newValue === 'onThrottleInterval' ? throttle ?? 1 : null, throttleUnit), + onThrottleChange( + newValue === RuleNotifyWhen.THROTTLE ? throttle ?? 1 : null, + throttleUnit + ), 100 ); }, - [onNotifyWhenChange, setNotifyWhenValue, onThrottleChange, throttle, throttleUnit] + [onNotifyWhenChange, onThrottleChange, throttle, throttleUnit] + ); + + const selectSummaryOption = useCallback( + (summary: boolean) => { + onSummaryChange(summary); + setSummaryMenuOpen(false); + if (summary && frequency.notifyWhen === RuleNotifyWhen.CHANGE) { + // Call onNotifyWhenChange DIRECTLY to bypass setNotifyWhenValueChangedFromDefault + onNotifyWhenChange(RuleNotifyWhen.ACTIVE); + // In cases like this: + // 1. User opens form with notifyWhen: THROTTLE + // 2. User sets notifyWhen: CHANGE, notifyWhenValueChangedFromDefault is now true + // 3. User sets summary: true, notifyWhen gets set to CHANGE + // 4. User sets summary: false, notifyWhen should probably get set back to CHANGE + // To make step 4 possible, we have to reset notifyWhenValueChangedFromDefault: + setNotifyWhenValueChangedFromDefault(false); + } else if ( + !summary && + frequency.notifyWhen === RuleNotifyWhen.ACTIVE && + !notifyWhenValueChangedFromDefault + ) { + onNotifyWhenChange(RuleNotifyWhen.CHANGE); + } + }, + [onSummaryChange, frequency.notifyWhen, onNotifyWhenChange, notifyWhenValueChangedFromDefault] + ); + + const summaryOptions = useMemo( + () => [ + selectSummaryOption(true)} + icon={frequency.summary ? 'check' : 'empty'} + id="actionNotifyWhen-option-summary" + > + {SUMMARY_OF_ALERTS} + , + selectSummaryOption(false)} + icon={!frequency.summary ? 'check' : 'empty'} + id="actionNotifyWhen-option-for_each" + > + {FOR_EACH_ALERT} + , + ], + [frequency.summary, selectSummaryOption] ); - const labelForRuleRenotify = [ - i18n.translate('xpack.triggersActionsUI.sections.ruleForm.renotifyFieldLabel', { - defaultMessage: 'Notify', - }), - , - ]; + const summaryOrPerRuleSelect = ( + setSummaryMenuOpen(false), [setSummaryMenuOpen])} + panelPaddingSize="none" + anchorPosition="downLeft" + aria-label={frequency.summary ? SUMMARY_OF_ALERTS : FOR_EACH_ALERT} + aria-roledescription={i18n.translate( + 'xpack.triggersActionsUI.sections.ruleForm.actionNotifyWhen.summaryOrRulePerSelectRoleDescription', + { defaultMessage: 'Action frequency type select' } + )} + button={ + setSummaryMenuOpen(!summaryMenuOpen), [summaryMenuOpen])} + > + {frequency.summary ? SUMMARY_OF_ALERTS : FOR_EACH_ALERT} + + } + > + + + ); + + const notifyWhenOptions = useMemo( + () => + frequency.summary + ? NOTIFY_WHEN_OPTIONS.filter((o) => o.value !== RuleNotifyWhen.CHANGE) + : NOTIFY_WHEN_OPTIONS, + [frequency.summary] + ); return ( - <> + } data-test-subj="notifyWhenSelect" - options={NOTIFY_WHEN_OPTIONS} + options={notifyWhenOptions} valueOfSelected={notifyWhenValue} onChange={onNotifyWhenValueChange} /> {showCustomThrottleOpts && ( <> - + + - + ); }; + +const FOR_EACH_ALERT = i18n.translate( + 'xpack.triggersActionsUI.sections.ruleForm.actionNotifyWhen.forEachOption', + { defaultMessage: 'For each alert' } +); +const SUMMARY_OF_ALERTS = i18n.translate( + 'xpack.triggersActionsUI.sections.ruleForm.actionNotifyWhen.summaryOption', + { defaultMessage: 'Summary of alerts' } +); + +const SummaryContextMenuOption = euiStyled(EuiContextMenuItem)` + min-width: 300px; +`; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx index 1541dc09323ef..c3271a0a05324 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx @@ -25,6 +25,8 @@ import { EuiErrorBoundary, EuiToolTip, EuiBetaBadge, + EuiSplitPanel, + useEuiTheme, } from '@elastic/eui'; import { isEmpty, partition, some } from 'lodash'; import { ActionVariable, RuleActionParam } from '@kbn/alerting-plugin/common'; @@ -66,6 +68,7 @@ export type ActionTypeFormProps = { recoveryActionGroup?: string; isActionGroupDisabledForActionType?: (actionGroupId: string, actionTypeId: string) => boolean; hideNotifyWhen?: boolean; + hasSummary?: boolean; minimumThrottleInterval?: [number | undefined, string]; } & Pick< ActionAccordionFormProps, @@ -104,11 +107,13 @@ export const ActionTypeForm = ({ isActionGroupDisabledForActionType, recoveryActionGroup, hideNotifyWhen = false, + hasSummary, minimumThrottleInterval, }: ActionTypeFormProps) => { const { application: { capabilities }, } = useKibana().services; + const { euiTheme } = useEuiTheme(); const [isOpen, setIsOpen] = useState(true); const [availableActionVariables, setAvailableActionVariables] = useState([]); const defaultActionGroup = actionGroups?.find(({ id }) => id === defaultActionGroupId); @@ -233,6 +238,7 @@ export const ActionTypeForm = ({ frequency={actionItem.frequency} throttle={actionThrottle} throttleUnit={actionThrottleUnit} + hasSummary={hasSummary} onNotifyWhenChange={useCallback( (notifyWhen) => { setActionFrequencyProperty('notifyWhen', notifyWhen, index); @@ -251,6 +257,12 @@ export const ActionTypeForm = ({ }, [setActionFrequencyProperty, index] )} + onSummaryChange={useCallback( + (summary: boolean) => { + setActionFrequencyProperty('summary', summary, index); + }, + [setActionFrequencyProperty, index] + )} showMinimumThrottleWarning={showMinimumThrottleWarning} showMinimumThrottleUnitWarning={showMinimumThrottleUnitWarning} /> @@ -269,204 +281,238 @@ export const ActionTypeForm = ({ connectors.filter((connector) => connector.isPreconfigured) ); - const showSelectActionGroup = actionGroups && selectedActionGroup && setActionGroupIdByIndex; + const showSelectActionGroup = + actionGroups && + selectedActionGroup && + setActionGroupIdByIndex && + !actionItem.frequency?.summary; const accordionContent = checkEnabledResult.isEnabled ? ( <> - {showSelectActionGroup && ( - <> - + + + } + labelAppend={ + canSave && + actionTypesIndex && + actionTypesIndex[actionConnector.actionTypeId].enabledInConfig ? ( + - - } - fullWidth - id={`addNewActionConnectorActionGroup-${actionItem.actionTypeId}`} - data-test-subj={`addNewActionConnectorActionGroup-${index}`} - options={actionGroups.map(({ id: value, name }) => ({ - value, - inputDisplay: actionGroupDisplay(value, name, actionItem.actionTypeId), - disabled: isActionGroupDisabled(value, actionItem.actionTypeId), - 'data-test-subj': `addNewActionConnectorActionGroup-${index}-option-${value}`, - }))} - valueOfSelected={selectedActionGroup.id} - onChange={(group) => { - setActionGroupIdByIndex(group, index); - setActionGroup(group); - }} - /> - {!hideNotifyWhen && } - - )} - {!hideNotifyWhen && actionNotifyWhen} - {(showSelectActionGroup || !hideNotifyWhen) && } - + ) : null + } + > + - } - labelAppend={ - canSave && - actionTypesIndex && - actionTypesIndex[actionConnector.actionTypeId].enabledInConfig ? ( - - - - ) : null - } - > - - - - {ParamsFieldsComponent ? ( - - - + + {!hideNotifyWhen && actionNotifyWhen} + {showSelectActionGroup && ( + <> + {!hideNotifyWhen && } + + + + } + fullWidth + id={`addNewActionConnectorActionGroup-${actionItem.actionTypeId}`} + data-test-subj={`addNewActionConnectorActionGroup-${index}`} + options={actionGroups.map(({ id: value, name }) => ({ + value, + inputDisplay: actionGroupDisplay(value, name, actionItem.actionTypeId), + disabled: isActionGroupDisabled(value, actionItem.actionTypeId), + 'data-test-subj': `addNewActionConnectorActionGroup-${index}-option-${value}`, + }))} + valueOfSelected={selectedActionGroup.id} + onChange={(group) => { + setActionGroupIdByIndex(group, index); + setActionGroup(group); + }} /> - - - ) : null} + + )} + + + {ParamsFieldsComponent ? ( + + + + + + ) : null} + ) : ( checkEnabledResult.messageCard ); return ( - - {showActionGroupErrorIcon() ? ( - - - - - - ) : ( - - - - )} - - -
- - - + + + {showActionGroupErrorIcon() ? ( + + + - - {selectedActionGroup && !isOpen && ( - - {selectedActionGroup.name} - - )} - - {checkEnabledResult.isEnabled === false && ( - <> - + + ) : ( + + + + )} + + +
+ + + - - )} - - -
-
-
- {actionTypeRegistered && actionTypeRegistered.isExperimental && ( - - - - )} -
- } - extraAction={ - - } - > - {accordionContent} - + + {(selectedActionGroup || actionItem.frequency?.summary) && !isOpen && ( + + + {actionItem.frequency?.summary + ? i18n.translate( + 'xpack.triggersActionsUI.sections.actionTypeForm.summaryGroupTitle', + { + defaultMessage: 'Summary of alerts', + } + ) + : i18n.translate( + 'xpack.triggersActionsUI.sections.actionTypeForm.runWhenGroupTitle', + { + defaultMessage: 'Run when {groupName}', + values: { + groupName: selectedActionGroup!.name.toLocaleLowerCase(), + }, + } + )} + + + )} + + {checkEnabledResult.isEnabled === false && ( + <> + + + )} + + +
+
+
+ {actionTypeRegistered && actionTypeRegistered.isExperimental && ( + + + + )} +
+ } + extraAction={ + + } + > + {accordionContent} + + + + ); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_add_modal.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_add_modal.tsx index 0fefaef24129e..4f704af65827d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_add_modal.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_add_modal.tsx @@ -15,7 +15,6 @@ import { EuiModalHeaderTitle, EuiModalBody, EuiModalFooter, - EuiTitle, EuiFlexItem, EuiIcon, EuiFlexGroup, @@ -135,40 +134,36 @@ const ConnectorAddModal = ({ return ( - - - {actionTypeModel && actionTypeModel.iconClass ? ( - - - - ) : null} + + {actionTypeModel && actionTypeModel.iconClass ? ( - - - -

- -

-
-
- {actionTypeModel && actionTypeModel.isExperimental && ( - - - - )} -
+
-
-
+ ) : null} + + + + + + + + {actionTypeModel && actionTypeModel.isExperimental && ( + + + + )} + + +
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/field_browser_modal.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/field_browser_modal.tsx index 2a6a8634ba666..cff489c3c15be 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/field_browser_modal.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/field_browser/field_browser_modal.tsx @@ -133,9 +133,7 @@ const FieldBrowserModalComponent: React.FC = ({
- -

{i18n.FIELDS_BROWSER}

-
+ {i18n.FIELDS_BROWSER}
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx index 8a0ad49e936f4..291e81fc14e51 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_form.tsx @@ -647,6 +647,7 @@ export const RuleForm = ({ setHasActionsWithBrokenConnector={setHasActionsWithBrokenConnector} messageVariables={selectedRuleType.actionVariables} defaultActionGroupId={defaultActionGroupId} + hasSummary={selectedRuleType.hasGetSummarizedAlerts} featureId={connectorFeatureId} isActionGroupDisabledForActionType={(actionGroupId: string, actionTypeId: string) => isActionGroupDisabledForActionType(selectedRuleType, actionGroupId, actionTypeId) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts index 55ce45d592d00..01f14ba6ff789 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_reducer.ts @@ -10,7 +10,7 @@ import { isEqual } from 'lodash'; import { Reducer } from 'react'; import { RuleActionParam, IntervalSchedule } from '@kbn/alerting-plugin/common'; import { Rule, RuleAction } from '../../../types'; -import { DEFAULT_FREQUENCY } from '../../../common/constants'; +import { DEFAULT_FREQUENCY_WITHOUT_SUMMARY } from '../../../common/constants'; export type InitialRule = Partial & Pick; @@ -201,7 +201,7 @@ export const ruleReducer = ( const updatedAction = { ...oldAction, frequency: { - ...(oldAction.frequency ?? DEFAULT_FREQUENCY), + ...(oldAction.frequency ?? DEFAULT_FREQUENCY_WITHOUT_SUMMARY), [key]: value, }, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/bulk_snooze_modal.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/bulk_snooze_modal.tsx index fb50934e4d6b1..5e6dcf3ab0d2d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/bulk_snooze_modal.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/bulk_snooze_modal.tsx @@ -166,8 +166,8 @@ export const BulkSnoozeModal = (props: BulkSnoozeModalProps) => { id="xpack.triggersActionsUI.sections.rulesList.bulkSnoozeModal.modalTitle" defaultMessage="Add snooze now" /> - + id="xpack.triggersActionsUI.sections.rulesList.bulkSnoozeScheduleModal.modalTitle" defaultMessage="Add snooze schedule" /> - + ; enabledInLicense: boolean; + hasGetSummarizedAlerts?: boolean; } export type SanitizedRuleType = Omit; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/rule_types.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/rule_types.ts index e9d8175f9066e..f1773dfd857b0 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/rule_types.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group1/tests/alerting/rule_types.ts @@ -37,6 +37,7 @@ export default function listAlertTypes({ getService }: FtrProviderContext) { name: 'Recovered', }, enabled_in_license: true, + has_get_summarized_alerts: false, rule_task_timeout: '5m', }; @@ -62,6 +63,7 @@ export default function listAlertTypes({ getService }: FtrProviderContext) { minimum_license_required: 'basic', is_exportable: true, enabled_in_license: true, + has_get_summarized_alerts: false, rule_task_timeout: '5m', }; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts index 9fb84117347df..2bd37598fe1b2 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group2/tests/alerting/alerts.ts @@ -33,8 +33,7 @@ export default function alertTests({ getService }: FtrProviderContext) { const esTestIndexTool = new ESTestIndexTool(es, retry); const taskManagerUtils = new TaskManagerUtils(es, retry); - // FLAKY: https://github.com/elastic/kibana/issues/148092 - describe.skip('alerts', () => { + describe('alerts', () => { const authorizationIndex = '.kibana-test-authorization'; const alertAsDataIndex = '.internal.alerts-observability.test.alerts.alerts-default-000001'; const objectRemover = new ObjectRemover(supertest); @@ -1453,9 +1452,12 @@ instanceStateValue: true expect( event?.kibana?.alert?.rule?.execution?.metrics?.rule_type_run_duration_ms ).to.be.greaterThan(0); + // Process alerts is fast enough that it will sometimes report 0ms + const procesAlertsDurationMs = + event?.kibana?.alert?.rule?.execution?.metrics?.process_alerts_duration_ms; expect( - event?.kibana?.alert?.rule?.execution?.metrics?.process_alerts_duration_ms - ).to.be.greaterThan(0); + (typeof procesAlertsDurationMs === 'number' ? procesAlertsDurationMs : -1) >= 0 + ).to.be.ok(); expect( event?.kibana?.alert?.rule?.execution?.metrics?.trigger_actions_duration_ms ).to.be.greaterThan(0); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/rule_types.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/rule_types.ts index d9b3035ac05dd..c3d2f11c580e7 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/rule_types.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/rule_types.ts @@ -45,6 +45,7 @@ export default function listAlertTypes({ getService }: FtrProviderContext) { minimum_license_required: 'basic', is_exportable: true, enabled_in_license: true, + has_get_summarized_alerts: false, rule_task_timeout: '5m', }); expect(Object.keys(authorizedConsumers)).to.contain('alertsFixture'); @@ -132,6 +133,7 @@ export default function listAlertTypes({ getService }: FtrProviderContext) { minimumLicenseRequired: 'basic', isExportable: true, enabledInLicense: true, + hasGetSummarizedAlerts: false, ruleTaskTimeout: '5m', }); expect(Object.keys(authorizedConsumers)).to.contain('alertsFixture'); diff --git a/x-pack/test/api_integration/apis/monitoring/elasticsearch/index.js b/x-pack/test/api_integration/apis/monitoring/elasticsearch/index.js index ad864979a15fe..b47cf59b42651 100644 --- a/x-pack/test/api_integration/apis/monitoring/elasticsearch/index.js +++ b/x-pack/test/api_integration/apis/monitoring/elasticsearch/index.js @@ -8,20 +8,12 @@ export default function ({ loadTestFile }) { describe('Elasticsearch', () => { loadTestFile(require.resolve('./overview')); - loadTestFile(require.resolve('./overview_mb')); loadTestFile(require.resolve('./nodes')); - loadTestFile(require.resolve('./nodes_mb')); loadTestFile(require.resolve('./node_detail')); - loadTestFile(require.resolve('./node_detail_mb')); loadTestFile(require.resolve('./node_detail_advanced')); - loadTestFile(require.resolve('./node_detail_advanced_mb')); loadTestFile(require.resolve('./indices')); - loadTestFile(require.resolve('./indices_mb')); loadTestFile(require.resolve('./index_detail')); - loadTestFile(require.resolve('./index_detail_mb')); loadTestFile(require.resolve('./ccr')); - loadTestFile(require.resolve('./ccr_mb')); loadTestFile(require.resolve('./ccr_shard')); - loadTestFile(require.resolve('./ccr_shard_mb')); }); } diff --git a/x-pack/test/api_integration/apis/monitoring/elasticsearch/indices_mb.js b/x-pack/test/api_integration/apis/monitoring/elasticsearch/indices_mb.js deleted file mode 100644 index 4c21921560537..0000000000000 --- a/x-pack/test/api_integration/apis/monitoring/elasticsearch/indices_mb.js +++ /dev/null @@ -1,104 +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 expect from '@kbn/expect'; -import relocatingShardsFixture from './fixtures/indices_shards_relocating.json'; -import relocationShardsAllFixture from './fixtures/indices_shards_relocating_all.json'; -import indicesRedClusterFixture from './fixtures/indices_red_cluster.json'; -import indicesRedClusterAllFixture from './fixtures/indices_red_cluster_all.json'; -import { getLifecycleMethods } from '../data_stream'; - -export default function ({ getService }) { - const supertest = getService('supertest'); - const { setup, tearDown } = getLifecycleMethods(getService); - - // Failing: See https://github.com/elastic/kibana/issues/146068 - // Failing: See https://github.com/elastic/kibana/issues/146067 - describe.skip('indices - metricbeat and package', () => { - ['mb', 'package'].forEach((source) => { - describe(`indices ${source}`, () => { - describe('shard-relocation', () => { - const archive = `x-pack/test/functional/es_archives/monitoring/singlecluster_three_nodes_shard_relocation_${source}`; - const timeRange = { - min: '2017-10-05T20:31:48.000Z', - max: '2017-10-05T20:35:12.000Z', - }; - - before('load archive', () => { - return setup(archive); - }); - - after('unload archive', () => { - return tearDown(archive); - }); - - it('should summarize the non-system indices with stats', async () => { - const { body } = await supertest - .post( - '/api/monitoring/v1/clusters/YCxj-RAgSZCP6GuOQ8M1EQ/elasticsearch/indices?show_system_indices=false' - ) - .set('kbn-xsrf', 'xxx') - .send({ timeRange }) - .expect(200); - expect(body).to.eql(relocatingShardsFixture); - }); - - it('should summarize all indices with stats', async () => { - const { body } = await supertest - .post( - '/api/monitoring/v1/clusters/YCxj-RAgSZCP6GuOQ8M1EQ/elasticsearch/indices?show_system_indices=true' - ) - .set('kbn-xsrf', 'xxx') - .send({ timeRange }) - .expect(200); - - expect(body).to.eql(relocationShardsAllFixture); - }); - }); - - describe('health-red', () => { - const archive = `x-pack/test/functional/es_archives/monitoring/singlecluster_red_platinum_${source}`; - const timeRange = { - min: '2017-10-06T19:53:06.000Z', - max: '2017-10-06T20:15:30.000Z', - }; - - before('load clusters archive', () => { - return setup(archive); - }); - - after('unload clusters archive', () => { - return tearDown(archive); - }); - - it('should summarize the non-system indices with stats', async () => { - const { body } = await supertest - .post( - '/api/monitoring/v1/clusters/1LYuyvCCQFS3FAO_h65PQw/elasticsearch/indices?show_system_indices=false' - ) - .set('kbn-xsrf', 'xxx') - .send({ timeRange }) - .expect(200); - expect(body).to.eql(indicesRedClusterFixture); - }); - - it('should summarize all indices with stats', async () => { - const { body } = await supertest - .post( - '/api/monitoring/v1/clusters/1LYuyvCCQFS3FAO_h65PQw/elasticsearch/indices?show_system_indices=true' - ) - .set('kbn-xsrf', 'xxx') - .send({ timeRange }) - .expect(200); - - expect(body).to.eql(indicesRedClusterAllFixture); - }); - }); - }); - }); - }); -} diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts index ba81febadfece..9fae13d374ddc 100644 --- a/x-pack/test/api_integration/apis/security/privileges.ts +++ b/x-pack/test/api_integration/apis/security/privileges.ts @@ -50,6 +50,7 @@ export default function ({ getService }: FtrProviderContext) { 'actions_log_management_read', 'host_isolation_all', 'process_operations_all', + 'file_operations_all', ], uptime: ['all', 'read', 'minimal_all', 'minimal_read'], securitySolutionCases: ['all', 'read', 'minimal_all', 'minimal_read', 'cases_delete'], diff --git a/x-pack/test/api_integration/apis/security/privileges_basic.ts b/x-pack/test/api_integration/apis/security/privileges_basic.ts index 36cb665c838f4..9762ab2e343e1 100644 --- a/x-pack/test/api_integration/apis/security/privileges_basic.ts +++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts @@ -120,6 +120,7 @@ export default function ({ getService }: FtrProviderContext) { 'read', 'trusted_applications_all', 'trusted_applications_read', + 'file_operations_all', ], uptime: ['all', 'read', 'minimal_all', 'minimal_read'], securitySolutionCases: ['all', 'read', 'minimal_all', 'minimal_read', 'cases_delete'], diff --git a/x-pack/test/apm_api_integration/tests/cold_start/cold_start.spec.ts b/x-pack/test/apm_api_integration/tests/cold_start/cold_start.spec.ts index 721f178a6413e..101741c5f0ad7 100644 --- a/x-pack/test/apm_api_integration/tests/cold_start/cold_start.spec.ts +++ b/x-pack/test/apm_api_integration/tests/cold_start/cold_start.spec.ts @@ -5,7 +5,7 @@ * 2.0. */ import expect from '@kbn/expect'; -import { first, last } from 'lodash'; +import { first, last, uniq } from 'lodash'; import moment from 'moment'; import { APIReturnType, @@ -180,15 +180,18 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); it('returns an array of transaction cold start rates', () => { - expect(body.currentPeriod.transactionColdstartRate).to.have.length(3); - expect(body.currentPeriod.transactionColdstartRate.every(({ y }) => y === 0.25)).to.be( - true + const currentValuesUnique = uniq( + body.currentPeriod.transactionColdstartRate.map(({ y }) => y) + ); + const prevValuesUnique = uniq( + body.previousPeriod.transactionColdstartRate.map(({ y }) => y) ); + expect(currentValuesUnique).to.eql([0.25]); + expect(body.currentPeriod.transactionColdstartRate).to.have.length(3); + + expect(prevValuesUnique).to.eql([0.5]); expect(body.previousPeriod.transactionColdstartRate).to.have.length(3); - expect(body.previousPeriod.transactionColdstartRate.every(({ y }) => y === 0.5)).to.be( - true - ); }); it('has same average value for both periods', () => { diff --git a/x-pack/test/apm_api_integration/tests/data_view/static.spec.ts b/x-pack/test/apm_api_integration/tests/data_view/static.spec.ts index fad3386a29210..23eb05acf315e 100644 --- a/x-pack/test/apm_api_integration/tests/data_view/static.spec.ts +++ b/x-pack/test/apm_api_integration/tests/data_view/static.spec.ts @@ -22,7 +22,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { const dataViewPattern = 'traces-apm*,apm-*,logs-apm*,apm-*,metrics-apm*,apm-*'; function createDataViewWithWriteUser() { - return apmApiClient.writeUser({ endpoint: 'POST /internal/apm/data_view/static' }); + return apmApiClient.writeUser({ + endpoint: 'POST /internal/apm/data_view/static', + }); } function createDataViewWithReadUser() { diff --git a/x-pack/test/apm_api_integration/tests/mobile/mobile_http_requests_timeseries.spec.ts b/x-pack/test/apm_api_integration/tests/mobile/mobile_http_requests_timeseries.spec.ts index 5e9507618c3a4..49545963b5ebc 100644 --- a/x-pack/test/apm_api_integration/tests/mobile/mobile_http_requests_timeseries.spec.ts +++ b/x-pack/test/apm_api_integration/tests/mobile/mobile_http_requests_timeseries.spec.ts @@ -47,18 +47,22 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); } - registry.when('without data loaded', { config: 'basic', archives: [] }, () => { - describe('when no data', () => { - it('handles empty state', async () => { - const response = await getHttpRequestsChart({ serviceName: 'foo' }); - expect(response.body.currentPeriod.timeseries).to.eql([]); - expect(response.body.previousPeriod.timeseries).to.eql([]); - expect(response.status).to.be(200); + registry.when( + 'Mobile HTTP requests without data loaded', + { config: 'basic', archives: [] }, + () => { + describe('when no data', () => { + it('handles empty state', async () => { + const response = await getHttpRequestsChart({ serviceName: 'foo' }); + expect(response.body.currentPeriod.timeseries).to.eql([]); + expect(response.body.previousPeriod.timeseries).to.eql([]); + expect(response.status).to.be(200); + }); }); - }); - }); + } + ); - registry.when('with data loaded', { config: 'basic', archives: [] }, () => { + registry.when('Mobile HTTP requests with data loaded', { config: 'basic', archives: [] }, () => { before(async () => { await generateMobileData({ synthtraceEsClient, diff --git a/x-pack/test/apm_api_integration/tests/service_overview/dependencies/es_utils.ts b/x-pack/test/apm_api_integration/tests/service_overview/dependencies/es_utils.ts index 08549609f3b67..3fe59f4aeaea4 100644 --- a/x-pack/test/apm_api_integration/tests/service_overview/dependencies/es_utils.ts +++ b/x-pack/test/apm_api_integration/tests/service_overview/dependencies/es_utils.ts @@ -57,6 +57,9 @@ export function createServiceDependencyDocs({ event: { outcome, }, + metricset: { + name: 'service_destination', + }, span: { destination: { service: { @@ -122,6 +125,14 @@ export const apmDependenciesMapping: MappingTypeMapping = { '@timestamp': { type: 'date', }, + metricset: { + dynamic: false, + properties: { + name: { + type: 'keyword', + }, + }, + }, event: { dynamic: false, properties: { diff --git a/x-pack/test/apm_api_integration/tests/transactions/transactions_groups_main_statistics.spec.ts b/x-pack/test/apm_api_integration/tests/transactions/transactions_groups_main_statistics.spec.ts index 0ec024f1c0489..7b42fc4063fb9 100644 --- a/x-pack/test/apm_api_integration/tests/transactions/transactions_groups_main_statistics.spec.ts +++ b/x-pack/test/apm_api_integration/tests/transactions/transactions_groups_main_statistics.spec.ts @@ -46,7 +46,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const transctionsGroupsPrimaryStatistics = response.body as TransactionsGroupsPrimaryStatistics; expect(transctionsGroupsPrimaryStatistics.transactionGroups).to.empty(); - expect(transctionsGroupsPrimaryStatistics.isAggregationAccurate).to.be(true); + expect(transctionsGroupsPrimaryStatistics.maxTransactionGroupsExceeded).to.be(false); }); } ); diff --git a/x-pack/test/cases_api_integration/common/lib/user_actions.ts b/x-pack/test/cases_api_integration/common/lib/user_actions.ts index 8c3723aab731f..54e528b4336ba 100644 --- a/x-pack/test/cases_api_integration/common/lib/user_actions.ts +++ b/x-pack/test/cases_api_integration/common/lib/user_actions.ts @@ -9,9 +9,9 @@ import { UserActionFindResponse, getCaseFindUserActionsUrl, UserActionFindRequest, - CaseUserActionsResponse, getCaseUserActionUrl, - CaseUserActionResponse, + CaseUserActionDeprecatedResponse, + CaseUserActionsDeprecatedResponse, } from '@kbn/cases-plugin/common/api'; import type SuperTest from 'supertest'; import { User } from './authentication/types'; @@ -20,11 +20,11 @@ import { superUser } from './authentication/users'; import { getSpaceUrlPrefix, removeServerGeneratedPropertiesFromObject } from './utils'; export const removeServerGeneratedPropertiesFromUserAction = ( - attributes: CaseUserActionResponse + attributes: CaseUserActionDeprecatedResponse ) => { - const keysToRemove: Array = ['action_id', 'created_at']; + const keysToRemove: Array = ['action_id', 'created_at']; return removeServerGeneratedPropertiesFromObject< - CaseUserActionResponse, + CaseUserActionDeprecatedResponse, typeof keysToRemove[number] >(attributes, keysToRemove); }; @@ -39,7 +39,7 @@ export const getCaseUserActions = async ({ caseID: string; expectedHttpCode?: number; auth?: { user: User; space: string | null }; -}): Promise => { +}): Promise => { const { body: userActions } = await supertest .get(`${getSpaceUrlPrefix(auth.space)}${getCaseUserActionUrl(caseID)}`) .auth(auth.user.username, auth.user.password) diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/import_export.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/import_export.ts index 20e7a5a9309a3..ecfbe3a369a95 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/import_export.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/import_export.ts @@ -21,13 +21,13 @@ import { CaseAttributes, CaseUserActionAttributes, CasePostRequest, - CaseUserActionResponse, PushedUserAction, ConnectorUserAction, CommentUserAction, CreateCaseUserAction, CaseStatuses, CaseSeverity, + CaseUserActionDeprecatedResponse, } from '@kbn/cases-plugin/common/api'; import { ESCaseSeverity, ESCaseStatus } from '@kbn/cases-plugin/server/services/cases/types'; import { ObjectRemover as ActionsRemover } from '../../../../../alerting_api_integration/common/lib'; @@ -163,11 +163,11 @@ const expectImportToHaveOneCase = async (supertestService: supertest.SuperTest { +const expectImportToHaveCreateCaseUserAction = (userAction: CaseUserActionDeprecatedResponse) => { expect(userAction.action).to.eql('create'); }; -const expectImportToHavePushUserAction = (userAction: CaseUserActionResponse) => { +const expectImportToHavePushUserAction = (userAction: CaseUserActionDeprecatedResponse) => { const pushedUserAction = userAction as PushedUserAction; expect(userAction.action).to.eql('push_to_service'); expect(userAction.type).to.eql('pushed'); @@ -178,7 +178,7 @@ const expectImportToHavePushUserAction = (userAction: CaseUserActionResponse) => ); }; -const expectImportToHaveUpdateConnector = (userAction: CaseUserActionResponse) => { +const expectImportToHaveUpdateConnector = (userAction: CaseUserActionDeprecatedResponse) => { const connectorUserAction = userAction as ConnectorUserAction; expect(userAction.action).to.eql('update'); expect(userAction.type).to.eql('connector'); diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts index 61bee280378ec..311c245c11984 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/index.ts @@ -46,6 +46,7 @@ export default ({ loadTestFile }: FtrProviderContext): void => { loadTestFile(require.resolve('./internal/bulk_create_attachments')); loadTestFile(require.resolve('./internal/bulk_get_cases')); + loadTestFile(require.resolve('./internal/get_connectors')); /** * Attachments framework diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/get_connectors.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/get_connectors.ts new file mode 100644 index 0000000000000..8d3642b005642 --- /dev/null +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/internal/get_connectors.ts @@ -0,0 +1,32 @@ +/* + * 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 '../../../../common/ftr_provider_context'; +import { createCase, deleteAllCaseItems } from '../../../../common/lib/utils'; +import { getPostCaseRequest } from '../../../../common/lib/mock'; +import { getConnectors } from '../../../../common/lib/connectors'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const supertest = getService('supertest'); + const es = getService('es'); + + describe('get_connectors', () => { + afterEach(async () => { + await deleteAllCaseItems(es); + }); + + it('does not return the connectors for a case that does not have connectors', async () => { + const postedCase = await createCase(supertest, getPostCaseRequest()); + + const connectors = await getConnectors({ caseId: postedCase.id, supertest }); + expect(Object.keys(connectors).length).to.be(0); + }); + }); +}; diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/user_actions/migrations.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/user_actions/migrations.ts index e351948eb21a2..90d8f3986648e 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/user_actions/migrations.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/user_actions/migrations.ts @@ -7,7 +7,11 @@ import expect from '@kbn/expect'; import { CASES_URL, SECURITY_SOLUTION_OWNER } from '@kbn/cases-plugin/common/constants'; -import { ActionTypes, CaseUserActionsResponse, CommentType } from '@kbn/cases-plugin/common/api'; +import { + ActionTypes, + CaseUserActionsDeprecatedResponse, + CommentType, +} from '@kbn/cases-plugin/common/api'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; import { deleteAllCaseItems } from '../../../../common/lib/utils'; import { getCaseUserActions } from '../../../../common/lib/user_actions'; @@ -256,7 +260,7 @@ export default function createGetTests({ getService }: FtrProviderContext) { }); describe('7.13 connector id extraction', () => { - let userActions: CaseUserActionsResponse; + let userActions: CaseUserActionsDeprecatedResponse; before(async () => { await esArchiver.load( @@ -1220,6 +1224,6 @@ export default function createGetTests({ getService }: FtrProviderContext) { }); } -function getUserActionById(userActions: CaseUserActionsResponse, id: string): any { +function getUserActionById(userActions: CaseUserActionsDeprecatedResponse, id: string): any { return userActions.find((userAction) => userAction.action_id === id); } diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/cases/user_actions/get_all_user_actions.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/cases/user_actions/get_all_user_actions.ts index 4b7bb93f541df..a39584861c7a7 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/cases/user_actions/get_all_user_actions.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/trial/cases/user_actions/get_all_user_actions.ts @@ -7,7 +7,11 @@ import http from 'http'; import expect from '@kbn/expect'; -import { UserActionWithResponse, PushedUserAction, User } from '@kbn/cases-plugin/common/api'; +import { + PushedUserAction, + User, + UserActionWithDeprecatedResponse, +} from '@kbn/cases-plugin/common/api'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; import { defaultUser, getPostCaseRequest } from '../../../../../common/lib/mock'; @@ -72,7 +76,7 @@ export default ({ getService }: FtrProviderContext): void => { }); const userActions = await getCaseUserActions({ supertest, caseID: theCase.id }); - const pushUserAction = userActions[1] as UserActionWithResponse; + const pushUserAction = userActions[1] as UserActionWithDeprecatedResponse; expect(userActions.length).to.eql(2); expect(pushUserAction.type).to.eql('pushed'); @@ -181,7 +185,7 @@ export default ({ getService }: FtrProviderContext): void => { }); const userActions = await getCaseUserActions({ supertest, caseID: postedCase.id }); - const pushUserAction = userActions[1] as UserActionWithResponse; + const pushUserAction = userActions[1] as UserActionWithDeprecatedResponse; expect(pushUserAction.payload.externalService.pushed_by).to.eql(superUserWithProfile); }); @@ -200,7 +204,7 @@ export default ({ getService }: FtrProviderContext): void => { }); const userActions = await getCaseUserActions({ supertest, caseID: postedCase.id }); - const pushUserAction = userActions[1] as UserActionWithResponse; + const pushUserAction = userActions[1] as UserActionWithDeprecatedResponse; expect(pushUserAction.payload.externalService.pushed_by).to.eql(superUserInfo); }); diff --git a/x-pack/test/cloud_security_posture_api/config.ts b/x-pack/test/cloud_security_posture_api/config.ts new file mode 100644 index 0000000000000..8d210835d726c --- /dev/null +++ b/x-pack/test/cloud_security_posture_api/config.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const xpackFunctionalConfig = await readConfigFile( + require.resolve('../functional/config.base.js') + ); + + return { + ...xpackFunctionalConfig.getAll(), + testFiles: [require.resolve('./telemetry/telemetry.ts')], + junit: { + reportName: 'X-Pack Cloud Security Posture API Tests', + }, + kbnTestServer: { + ...xpackFunctionalConfig.get('kbnTestServer'), + serverArgs: [ + ...xpackFunctionalConfig.get('kbnTestServer.serverArgs'), + /** + * Package version is fixed (not latest) so FTR won't suddenly break when package is changed. + * + * test a new package: + * 1. build the package and start the registry with elastic-package and uncomment the 'registryUrl' flag below + * 2. locally checkout the kibana version that matches the new package + * 3. update the package version below to use the new package version + * 4. run tests with NODE_EXTRA_CA_CERTS pointing to the elastic-package certificate. example: + * NODE_EXTRA_CA_CERTS=HOME/.elastic-package/profiles/default/certs/kibana/ca-cert.pem yarn start + * 5. when test pass: + * 1. release a new package to EPR + * 2. merge the updated version number change to kibana + */ + `--xpack.fleet.packages.0.name=cloud_security_posture`, + `--xpack.fleet.packages.0.version=1.2.8`, + // `--xpack.fleet.registryUrl=https://localhost:8080`, + ], + }, + }; +} diff --git a/x-pack/test/cloud_security_posture_api/ftr_provider_context.d.ts b/x-pack/test/cloud_security_posture_api/ftr_provider_context.d.ts new file mode 100644 index 0000000000000..63c97af0ed22a --- /dev/null +++ b/x-pack/test/cloud_security_posture_api/ftr_provider_context.d.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 { GenericFtrProviderContext } from '@kbn/test'; + +import { services } from '../api_integration/services'; + +export type FtrProviderContext = GenericFtrProviderContext; diff --git a/x-pack/test/cloud_security_posture_api/telemetry/data.ts b/x-pack/test/cloud_security_posture_api/telemetry/data.ts new file mode 100644 index 0000000000000..2550982ea5ac6 --- /dev/null +++ b/x-pack/test/cloud_security_posture_api/telemetry/data.ts @@ -0,0 +1,143 @@ +/* + * 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 interface MockTelemetryFindings { + rule: { + benchmark: { id: string; posture_type?: string | undefined; version: string; name: string }; + }; + resource: { type: string; sub_type: string; id: string }; + agent: { id: string }; + result: { evaluation: string }; + host: { name: string }; + cluster_id?: string; + cloud?: { account: { id: string } }; +} + +export interface MockTelemetryData { + [key: string]: MockTelemetryFindings[]; +} + +export const data: MockTelemetryData = { + cspmFindings: [ + { + rule: { + benchmark: { + id: 'cis_aws', + posture_type: 'cspm', + version: 'v1.5.0', + name: 'CIS Amazon Web Services Foundations', + }, + }, + resource: { + type: 'identifyingType', + sub_type: 'aws-password-policy', + id: '15e450b7-8980-5bca-ade2-a0c795f9ea9d', + }, + agent: { id: '07bd3686-98ef-4b23-99cb-9ff544b25ae2' }, + result: { evaluation: 'failed' }, + cloud: { account: { id: 'my-aws-12345' } }, + host: { name: 'docker-fleet-agent' }, + }, + { + rule: { + benchmark: { + id: 'cis_aws', + posture_type: 'cspm', + version: 'v1.5.0', + name: 'CIS Amazon Web Services Foundations', + }, + }, + resource: { + type: 'identifyingType', + sub_type: 'aws-password-policy', + id: '15e450b7-8980-5bca-ade2-a0c795f9ea99', + }, + agent: { id: '07bd3686-98ef-4b23-99cb-9ff544b25ae2' }, + result: { evaluation: 'passed' }, + cloud: { account: { id: 'my-aws-12345' } }, + host: { name: 'docker-fleet-agent' }, + }, + ], + kspmFindings: [ + { + cluster_id: 'my-k8s-cluster-5555', + rule: { + benchmark: { + id: 'cis_k8s', + version: 'v1.0.0', + name: 'CIS Kubernetes V1.23', + posture_type: 'kspm', + }, + }, + resource: { + type: 'k8s_object', + sub_type: 'ServiceAccount', + id: '1111', + }, + agent: { id: '07bd3686-98ef-4b23-99cb-9ff544b25ae2' }, + result: { evaluation: 'passed' }, + host: { name: 'docker-fleet-agent' }, + }, + { + cluster_id: 'my-k8s-cluster-5555', + rule: { + benchmark: { + id: 'cis_k8s', + version: 'v1.0.0', + name: 'CIS Kubernetes V1.23', + posture_type: 'kspm', + }, + }, + resource: { + type: 'process', + sub_type: 'process', + id: '1111', + }, + agent: { id: '07bd3686-98ef-4b23-99cb-9ff544b25ae3' }, + result: { evaluation: 'passed' }, + host: { name: 'control-plane' }, + }, + ], + kspmFindingsNoPostureType: [ + { + cluster_id: 'my-k8s-cluster-5555', + rule: { + benchmark: { + id: 'cis_k8s', + version: 'v1.0.0', + name: 'CIS Kubernetes V1.23', + }, + }, + resource: { + type: 'k8s_object', + sub_type: 'ServiceAccount', + id: '1111', + }, + agent: { id: '07bd3686-98ef-4b23-99cb-9ff544b25ae2' }, + result: { evaluation: 'passed' }, + host: { name: 'docker-fleet-agent' }, + }, + { + cluster_id: 'my-k8s-cluster-5555', + rule: { + benchmark: { + id: 'cis_k8s', + version: 'v1.0.0', + name: 'CIS Kubernetes V1.23', + }, + }, + resource: { + type: 'process', + sub_type: 'process', + id: '1111', + }, + agent: { id: '07bd3686-98ef-4b23-99cb-9ff544b25ae3' }, + result: { evaluation: 'passed' }, + host: { name: 'control-plane' }, + }, + ], +}; diff --git a/x-pack/test/cloud_security_posture_api/telemetry/telemetry.ts b/x-pack/test/cloud_security_posture_api/telemetry/telemetry.ts new file mode 100644 index 0000000000000..49f1cd39ae787 --- /dev/null +++ b/x-pack/test/cloud_security_posture_api/telemetry/telemetry.ts @@ -0,0 +1,358 @@ +/* + * 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 { data, MockTelemetryFindings } from './data'; +import type { FtrProviderContext } from '../ftr_provider_context'; + +const FINDINGS_INDEX = 'logs-cloud_security_posture.findings_latest-default'; + +// eslint-disable-next-line import/no-default-export +export default function ({ getService }: FtrProviderContext) { + const retry = getService('retry'); + const es = getService('es'); + const supertest = getService('supertest'); + const log = getService('log'); + + /** + * required before indexing findings + */ + const waitForPluginInitialized = (): Promise => + retry.try(async () => { + log.debug('Check CSP plugin is initialized'); + const response = await supertest + .get('/internal/cloud_security_posture/status?check=init') + .expect(200); + expect(response.body).to.eql({ isPluginInitialized: true }); + log.debug('CSP plugin is initialized'); + }); + + const index = { + remove: () => + es.deleteByQuery({ + index: FINDINGS_INDEX, + query: { match_all: {} }, + refresh: true, + }), + + add: async (mockTelemetryFindings: MockTelemetryFindings[]) => { + const operations = mockTelemetryFindings.flatMap((doc) => [ + { index: { _index: FINDINGS_INDEX } }, + doc, + ]); + + const response = await es.bulk({ refresh: 'wait_for', index: FINDINGS_INDEX, operations }); + expect(response.errors).to.eql(false); + }, + }; + + describe('Verify cloud_security_posture telemetry payloads', async () => { + before(async () => { + await waitForPluginInitialized(); + }); + + afterEach(async () => { + await index.remove(); + }); + + it('includes only KSPM findings', async () => { + await index.add(data.kspmFindings); + + const { + body: [{ stats: apiResponse }], + } = await supertest + .post(`/api/telemetry/v2/clusters/_stats`) + .set('kbn-xsrf', 'xxxx') + .send({ + unencrypted: true, + refreshCache: true, + }) + .expect(200); + + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.accounts_stats).to.eql([ + { + account_id: 'my-k8s-cluster-5555', + latest_findings_doc_count: 2, + posture_score: 100, + passed_findings_count: 2, + failed_findings_count: 0, + benchmark_name: 'CIS Kubernetes V1.23', + benchmark_id: 'cis_k8s', + benchmark_version: 'v1.0.0', + agents_count: 2, + nodes_count: 2, + pods_count: 0, + }, + ]); + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.resources_stats).to.eql([ + { + account_id: 'my-k8s-cluster-5555', + resource_type: 'k8s_object', + resource_type_doc_count: 1, + resource_sub_type: 'ServiceAccount', + resource_sub_type_doc_count: 1, + passed_findings_count: 1, + failed_findings_count: 0, + }, + { + account_id: 'my-k8s-cluster-5555', + resource_type: 'process', + resource_type_doc_count: 1, + resource_sub_type: 'process', + resource_sub_type_doc_count: 1, + passed_findings_count: 1, + failed_findings_count: 0, + }, + ]); + }); + + it('includes only CSPM findings', async () => { + await index.add(data.cspmFindings); + + const { + body: [{ stats: apiResponse }], + } = await supertest + .post(`/api/telemetry/v2/clusters/_stats`) + .set('kbn-xsrf', 'xxxx') + .send({ + unencrypted: true, + refreshCache: true, + }) + .expect(200); + + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.accounts_stats).to.eql([ + { + account_id: 'my-aws-12345', + latest_findings_doc_count: 2, + posture_score: 50, + passed_findings_count: 1, + failed_findings_count: 1, + benchmark_name: 'CIS Amazon Web Services Foundations', + benchmark_id: 'cis_aws', + benchmark_version: 'v1.5.0', + agents_count: 1, + nodes_count: 1, + pods_count: 0, + }, + ]); + + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.resources_stats).to.eql([ + { + account_id: 'my-aws-12345', + resource_type: 'identifyingType', + resource_type_doc_count: 2, + resource_sub_type: 'aws-password-policy', + resource_sub_type_doc_count: 2, + passed_findings_count: 1, + failed_findings_count: 1, + }, + ]); + }); + + it('includes CSPM and KSPM findings', async () => { + await index.add(data.kspmFindings); + await index.add(data.cspmFindings); + + const { + body: [{ stats: apiResponse }], + } = await supertest + .post(`/api/telemetry/v2/clusters/_stats`) + .set('kbn-xsrf', 'xxxx') + .send({ + unencrypted: true, + refreshCache: true, + }) + .expect(200); + + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.accounts_stats).to.eql([ + { + account_id: 'my-aws-12345', + latest_findings_doc_count: 2, + posture_score: 50, + passed_findings_count: 1, + failed_findings_count: 1, + benchmark_name: 'CIS Amazon Web Services Foundations', + benchmark_id: 'cis_aws', + benchmark_version: 'v1.5.0', + agents_count: 1, + nodes_count: 1, + pods_count: 0, + }, + { + account_id: 'my-k8s-cluster-5555', + latest_findings_doc_count: 2, + posture_score: 100, + passed_findings_count: 2, + failed_findings_count: 0, + benchmark_name: 'CIS Kubernetes V1.23', + benchmark_id: 'cis_k8s', + benchmark_version: 'v1.0.0', + agents_count: 2, + nodes_count: 2, + pods_count: 0, + }, + ]); + + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.resources_stats).to.eql([ + { + account_id: 'my-aws-12345', + resource_type: 'identifyingType', + resource_type_doc_count: 2, + resource_sub_type: 'aws-password-policy', + resource_sub_type_doc_count: 2, + passed_findings_count: 1, + failed_findings_count: 1, + }, + { + account_id: 'my-k8s-cluster-5555', + resource_type: 'k8s_object', + resource_type_doc_count: 1, + resource_sub_type: 'ServiceAccount', + resource_sub_type_doc_count: 1, + passed_findings_count: 1, + failed_findings_count: 0, + }, + { + account_id: 'my-k8s-cluster-5555', + resource_type: 'process', + resource_type_doc_count: 1, + resource_sub_type: 'process', + resource_sub_type_doc_count: 1, + passed_findings_count: 1, + failed_findings_count: 0, + }, + ]); + }); + + it('includes only KSPM findings without posture_type', async () => { + await index.add(data.kspmFindingsNoPostureType); + + const { + body: [{ stats: apiResponse }], + } = await supertest + .post(`/api/telemetry/v2/clusters/_stats`) + .set('kbn-xsrf', 'xxxx') + .send({ + unencrypted: true, + refreshCache: true, + }) + .expect(200); + + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.accounts_stats).to.eql([ + { + account_id: 'my-k8s-cluster-5555', + latest_findings_doc_count: 2, + posture_score: 100, + passed_findings_count: 2, + failed_findings_count: 0, + benchmark_name: 'CIS Kubernetes V1.23', + benchmark_id: 'cis_k8s', + benchmark_version: 'v1.0.0', + agents_count: 2, + nodes_count: 2, + pods_count: 0, + }, + ]); + + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.resources_stats).to.eql([ + { + account_id: 'my-k8s-cluster-5555', + resource_type: 'k8s_object', + resource_type_doc_count: 1, + resource_sub_type: 'ServiceAccount', + resource_sub_type_doc_count: 1, + passed_findings_count: 1, + failed_findings_count: 0, + }, + { + account_id: 'my-k8s-cluster-5555', + resource_type: 'process', + resource_type_doc_count: 1, + resource_sub_type: 'process', + resource_sub_type_doc_count: 1, + passed_findings_count: 1, + failed_findings_count: 0, + }, + ]); + }); + + it('includes KSPM findings without posture_type and CSPM findings as well', async () => { + await index.add(data.kspmFindingsNoPostureType); + await index.add(data.cspmFindings); + + const { + body: [{ stats: apiResponse }], + } = await supertest + .post(`/api/telemetry/v2/clusters/_stats`) + .set('kbn-xsrf', 'xxxx') + .send({ + unencrypted: true, + refreshCache: true, + }) + .expect(200); + + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.accounts_stats).to.eql([ + { + account_id: 'my-aws-12345', + latest_findings_doc_count: 2, + posture_score: 50, + passed_findings_count: 1, + failed_findings_count: 1, + benchmark_name: 'CIS Amazon Web Services Foundations', + benchmark_id: 'cis_aws', + benchmark_version: 'v1.5.0', + agents_count: 1, + nodes_count: 1, + pods_count: 0, + }, + { + account_id: 'my-k8s-cluster-5555', + latest_findings_doc_count: 2, + posture_score: 100, + passed_findings_count: 2, + failed_findings_count: 0, + benchmark_name: 'CIS Kubernetes V1.23', + benchmark_id: 'cis_k8s', + benchmark_version: 'v1.0.0', + agents_count: 2, + nodes_count: 2, + pods_count: 0, + }, + ]); + + expect(apiResponse.stack_stats.kibana.plugins.cloud_security_posture.resources_stats).to.eql([ + { + account_id: 'my-aws-12345', + resource_type: 'identifyingType', + resource_type_doc_count: 2, + resource_sub_type: 'aws-password-policy', + resource_sub_type_doc_count: 2, + passed_findings_count: 1, + failed_findings_count: 1, + }, + { + account_id: 'my-k8s-cluster-5555', + resource_type: 'k8s_object', + resource_type_doc_count: 1, + resource_sub_type: 'ServiceAccount', + resource_sub_type_doc_count: 1, + passed_findings_count: 1, + failed_findings_count: 0, + }, + { + account_id: 'my-k8s-cluster-5555', + resource_type: 'process', + resource_type_doc_count: 1, + resource_sub_type: 'process', + resource_sub_type_doc_count: 1, + passed_findings_count: 1, + failed_findings_count: 0, + }, + ]); + }); + }); +} diff --git a/x-pack/test/fleet_api_integration/apis/agents/uploads.ts b/x-pack/test/fleet_api_integration/apis/agents/uploads.ts index c0f32104d24f9..6f548d3d955d0 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/uploads.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/uploads.ts @@ -68,6 +68,8 @@ export default function (providerContext: FtrProviderContext) { doc_as_upsert: true, doc: { upload_id: 'file1', + action_id: 'action1', + agent_id: 'agent1', file: { ChunkSize: 4194304, extension: 'zip', @@ -96,7 +98,7 @@ export default function (providerContext: FtrProviderContext) { expect(body.items[0]).to.eql({ actionId: 'action1', - createTime: '2022-10-07T12:00:00.000Z', + createTime: '2022-10-07T11:00:00.000Z', filePath: '/api/fleet/agents/files/file1/elastic-agent-diagnostics-2022-10-07T12-00-00Z-00.zip', id: 'file1', @@ -130,5 +132,49 @@ export default function (providerContext: FtrProviderContext) { 'attachment; filename="elastic-agent-diagnostics-2022-10-07T12-00-00Z-00.zip"' ); }); + + it('should return failed status with error message', async () => { + await esClient.create({ + index: AGENT_ACTIONS_INDEX, + id: new Date().toISOString(), + refresh: true, + body: { + type: 'REQUEST_DIAGNOSTICS', + action_id: 'action2', + agents: ['agent2'], + '@timestamp': '2022-10-07T11:00:00.000Z', + }, + }); + await esClient.create( + { + index: AGENT_ACTIONS_RESULTS_INDEX, + id: new Date().toISOString(), + refresh: true, + body: { + action_id: 'action2', + agent_id: 'agent2', + '@timestamp': '2022-10-07T12:00:00.000Z', + data: {}, + error: 'rate limit exceeded', + }, + }, + ES_INDEX_OPTIONS + ); + + const { body } = await supertest + .get(`/api/fleet/agents/agent2/uploads`) + .set('kbn-xsrf', 'xxx') + .expect(200); + + expect(body.items[0]).to.eql({ + actionId: 'action2', + createTime: '2022-10-07T11:00:00.000Z', + filePath: '', + id: 'action2', + name: 'elastic-agent-diagnostics-2022-10-07T11-00-00Z-00.zip', + status: 'FAILED', + error: 'rate limit exceeded', + }); + }); }); } diff --git a/x-pack/test/ftr_apis/security_and_spaces/apis/clean.ts b/x-pack/test/ftr_apis/security_and_spaces/apis/clean.ts new file mode 100644 index 0000000000000..dc3bacf5b35f4 --- /dev/null +++ b/x-pack/test/ftr_apis/security_and_spaces/apis/clean.ts @@ -0,0 +1,92 @@ +/* + * 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 { USERS, User, ExpectedResponse } from '../../common/lib'; +import { FtrProviderContext } from '../services'; +import { createData, createTestSpaces, deleteData, deleteTestSpaces } from './test_utils'; + +// eslint-disable-next-line import/no-default-export +export default function (ftrContext: FtrProviderContext) { + const supertest = ftrContext.getService('supertestWithoutAuth'); + + describe('POST /internal/ftr/kbn_client_so/_clean', () => { + before(async () => { + await createTestSpaces(ftrContext); + }); + + after(async () => { + await deleteTestSpaces(ftrContext); + }); + + beforeEach(async () => { + await createData(ftrContext); + }); + + afterEach(async () => { + await deleteData(ftrContext); + }); + + const responses: Record = { + authorized: { + httpCode: 200, + expectResponse: ({ body }) => { + expect(body.deleted).to.be.greaterThan(0); + }, + }, + unauthorized: { + httpCode: 403, + expectResponse: ({ body }) => { + expect(body).to.eql({ + error: 'Forbidden', + message: 'Forbidden', + statusCode: 403, + }); + }, + }, + }; + const expectedResults: Record = { + authorized: [USERS.SUPERUSER], + unauthorized: [ + USERS.DEFAULT_SPACE_READ_USER, + USERS.DEFAULT_SPACE_SO_MANAGEMENT_WRITE_USER, + USERS.DEFAULT_SPACE_SO_TAGGING_READ_USER, + USERS.DEFAULT_SPACE_SO_TAGGING_WRITE_USER, + USERS.DEFAULT_SPACE_DASHBOARD_READ_USER, + USERS.DEFAULT_SPACE_VISUALIZE_READ_USER, + USERS.DEFAULT_SPACE_MAPS_READ_USER, + USERS.DEFAULT_SPACE_ADVANCED_SETTINGS_READ_USER, + USERS.NOT_A_KIBANA_USER, + ], + }; + + const createUserTest = ( + { username, password, description }: User, + { httpCode, expectResponse }: ExpectedResponse + ) => { + it(`returns expected ${httpCode} response for ${description ?? username}`, async () => { + await supertest + .post(`/internal/ftr/kbn_client_so/_clean`) + .send({ types: ['tag', 'dashboard', 'visualization'] }) + .auth(username, password) + .expect(httpCode) + .then(expectResponse); + }); + }; + + const createTestSuite = () => { + Object.entries(expectedResults).forEach(([responseId, users]) => { + const response: ExpectedResponse = responses[responseId]; + users.forEach((user) => { + createUserTest(user, response); + }); + }); + }; + + createTestSuite(); + }); +} diff --git a/x-pack/test/ftr_apis/security_and_spaces/apis/index.ts b/x-pack/test/ftr_apis/security_and_spaces/apis/index.ts index ca5bf0cb89221..e683baf38ba66 100644 --- a/x-pack/test/ftr_apis/security_and_spaces/apis/index.ts +++ b/x-pack/test/ftr_apis/security_and_spaces/apis/index.ts @@ -21,5 +21,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./delete')); loadTestFile(require.resolve('./find')); loadTestFile(require.resolve('./bulk_delete')); + loadTestFile(require.resolve('./clean')); }); } diff --git a/x-pack/test/functional/es_archives/monitoring/ccr_mb/data.json.gz b/x-pack/test/functional/es_archives/monitoring/ccr_mb/data.json.gz deleted file mode 100644 index 5ed1235098869..0000000000000 Binary files a/x-pack/test/functional/es_archives/monitoring/ccr_mb/data.json.gz and /dev/null differ diff --git a/x-pack/test/functional/es_archives/monitoring/ccr_package/data.json.gz b/x-pack/test/functional/es_archives/monitoring/ccr_package/data.json.gz deleted file mode 100644 index 4088178b904ad..0000000000000 Binary files a/x-pack/test/functional/es_archives/monitoring/ccr_package/data.json.gz and /dev/null differ diff --git a/x-pack/test/functional/es_archives/monitoring/ccr_package/mappings.json b/x-pack/test/functional/es_archives/monitoring/ccr_package/mappings.json deleted file mode 100644 index 22af8dee3978a..0000000000000 --- a/x-pack/test/functional/es_archives/monitoring/ccr_package/mappings.json +++ /dev/null @@ -1,7713 +0,0 @@ -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.cluster_stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.cluster_stats-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.cluster_stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_state": { - "properties": { - "master_node": { - "path": "elasticsearch.cluster.stats.state.master_node", - "type": "alias" - }, - "nodes_hash": { - "path": "elasticsearch.cluster.stats.state.nodes_hash", - "type": "alias" - }, - "state_uuid": { - "path": "elasticsearch.cluster.stats.state.state_uuid", - "type": "alias" - }, - "status": { - "path": "elasticsearch.cluster.stats.status", - "type": "alias" - }, - "version": { - "path": "elasticsearch.cluster.stats.state.version", - "type": "alias" - } - } - }, - "cluster_stats": { - "properties": { - "indices": { - "properties": { - "count": { - "path": "elasticsearch.cluster.stats.indices.total", - "type": "alias" - }, - "shards": { - "properties": { - "total": { - "path": "elasticsearch.cluster.stats.indices.shards.count", - "type": "alias" - } - } - } - } - }, - "nodes": { - "properties": { - "count": { - "properties": { - "total": { - "path": "elasticsearch.cluster.stats.nodes.count", - "type": "alias" - } - } - }, - "jvm": { - "properties": { - "max_uptime_in_millis": { - "path": "elasticsearch.cluster.stats.nodes.jvm.max_uptime.ms", - "type": "alias" - }, - "mem": { - "properties": { - "heap_max_in_bytes": { - "path": "elasticsearch.cluster.stats.nodes.jvm.memory.heap.max.bytes", - "type": "alias" - }, - "heap_used_in_bytes": { - "path": "elasticsearch.cluster.stats.nodes.jvm.memory.heap.used.bytes", - "type": "alias" - } - } - } - } - } - } - } - } - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "stats": { - "properties": { - "indices": { - "properties": { - "docs": { - "properties": { - "total": { - "type": "long" - } - } - }, - "fielddata": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "shards": { - "properties": { - "count": { - "type": "long" - }, - "primaries": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "total": { - "type": "long" - } - } - }, - "license": { - "properties": { - "cluster_needs_tls": { - "type": "boolean" - }, - "expiry_date": { - "type": "date" - }, - "expiry_date_in_millis": { - "type": "long" - }, - "issue_date": { - "type": "date" - }, - "issue_date_in_millis": { - "type": "long" - }, - "issued_to": { - "ignore_above": 1024, - "type": "keyword" - }, - "issuer": { - "ignore_above": 1024, - "type": "keyword" - }, - "max_nodes": { - "type": "long" - }, - "start_date_in_millis": { - "type": "long" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "uid": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "nodes": { - "properties": { - "count": { - "type": "long" - }, - "data": { - "type": "long" - }, - "fs": { - "properties": { - "available": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "jvm": { - "properties": { - "max_uptime": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "master": { - "type": "long" - }, - "stats": { - "properties": { - "data": { - "type": "long" - } - } - }, - "versions": { - "type": "text" - } - } - }, - "stack": { - "properties": { - "apm": { - "properties": { - "found": { - "type": "boolean" - } - } - }, - "xpack": { - "properties": { - "ccr": { - "properties": { - "available": { - "type": "boolean" - }, - "enabled": { - "type": "boolean" - } - } - } - } - } - } - }, - "state": { - "properties": { - "master_node": { - "ignore_above": 1024, - "type": "keyword" - }, - "nodes": { - "type": "flattened" - }, - "nodes_hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "state_uuid": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "license": { - "properties": { - "status": { - "path": "elasticsearch.cluster.stats.license.status", - "type": "alias" - }, - "type": { - "path": "elasticsearch.cluster.stats.license.type", - "type": "alias" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "stack_stats": { - "properties": { - "apm": { - "properties": { - "found": { - "path": "elasticsearch.cluster.stats.stack.apm.found", - "type": "alias" - } - } - }, - "xpack": { - "properties": { - "ccr": { - "properties": { - "available": { - "path": "elasticsearch.cluster.stats.stack.xpack.ccr.available", - "type": "alias" - }, - "enabled": { - "path": "elasticsearch.cluster.stats.stack.xpack.ccr.enabled", - "type": "alias" - } - } - } - } - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.cluster.stats.version", - "elasticsearch.cluster.stats.state.nodes_hash", - "elasticsearch.cluster.stats.state.master_node", - "elasticsearch.cluster.stats.state.version", - "elasticsearch.cluster.stats.state.state_uuid", - "elasticsearch.cluster.stats.status", - "elasticsearch.cluster.stats.nodes.versions", - "elasticsearch.cluster.stats.license.issued_to", - "elasticsearch.cluster.stats.license.issuer", - "elasticsearch.cluster.stats.license.status", - "elasticsearch.cluster.stats.license.type", - "elasticsearch.cluster.stats.license.uid", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.version", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.enrich-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.enrich-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.enrich", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "enrich": { - "properties": { - "executed_searches": { - "properties": { - "total": { - "type": "long" - } - } - }, - "executing_policy": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "task": { - "properties": { - "action": { - "ignore_above": 1024, - "type": "keyword" - }, - "cancellable": { - "type": "boolean" - }, - "id": { - "type": "long" - }, - "parent_task_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "task": { - "ignore_above": 1024, - "type": "keyword" - }, - "time": { - "properties": { - "running": { - "properties": { - "nano": { - "type": "long" - } - } - }, - "start": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "queue": { - "properties": { - "size": { - "type": "long" - } - } - }, - "remote_requests": { - "properties": { - "current": { - "type": "long" - }, - "total": { - "type": "long" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.enrich.executing_policy.name", - "elasticsearch.enrich.executing_policy.task.task", - "elasticsearch.enrich.executing_policy.task.action", - "elasticsearch.enrich.executing_policy.task.parent_task_id", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.index-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.index-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.index", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "index": { - "properties": { - "created": { - "type": "long" - }, - "hidden": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "primaries": { - "properties": { - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "type": "long" - }, - "index_total": { - "type": "long" - }, - "throttle_time_in_millis": { - "type": "long" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "type": "long" - } - } - }, - "query_cache": { - "properties": { - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "refresh": { - "properties": { - "external_total_time_in_millis": { - "type": "long" - }, - "total_time_in_millis": { - "type": "long" - } - } - }, - "request_cache": { - "properties": { - "evictions": { - "type": "long" - }, - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "type": "long" - }, - "query_total": { - "type": "long" - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "doc_values_memory_in_bytes": { - "type": "long" - }, - "fixed_bit_set_memory_in_bytes": { - "type": "long" - }, - "index_writer_memory_in_bytes": { - "type": "long" - }, - "memory_in_bytes": { - "type": "long" - }, - "norms_memory_in_bytes": { - "type": "long" - }, - "points_memory_in_bytes": { - "type": "long" - }, - "stored_fields_memory_in_bytes": { - "type": "long" - }, - "term_vectors_memory_in_bytes": { - "type": "long" - }, - "terms_memory_in_bytes": { - "type": "long" - }, - "version_map_memory_in_bytes": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "type": "long" - } - } - } - } - }, - "shards": { - "properties": { - "primaries": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "total": { - "properties": { - "bulk": { - "properties": { - "avg_size_in_bytes": { - "type": "long" - }, - "avg_time_in_millis": { - "type": "long" - }, - "total_operations": { - "type": "long" - }, - "total_size_in_bytes": { - "type": "long" - }, - "total_time_in_millis": { - "type": "long" - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "fielddata": { - "properties": { - "evictions": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "type": "long" - }, - "index_total": { - "type": "long" - }, - "throttle_time_in_millis": { - "type": "long" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "type": "long" - } - } - }, - "query_cache": { - "properties": { - "evictions": { - "type": "long" - }, - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "refresh": { - "properties": { - "external_total_time_in_millis": { - "type": "long" - }, - "total_time_in_millis": { - "type": "long" - } - } - }, - "request_cache": { - "properties": { - "evictions": { - "type": "long" - }, - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "type": "long" - }, - "query_total": { - "type": "long" - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "doc_values_memory_in_bytes": { - "type": "long" - }, - "fixed_bit_set_memory_in_bytes": { - "type": "long" - }, - "index_writer_memory_in_bytes": { - "type": "long" - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "memory_in_bytes": { - "type": "long" - }, - "norms_memory_in_bytes": { - "type": "long" - }, - "points_memory_in_bytes": { - "type": "long" - }, - "stored_fields_memory_in_bytes": { - "type": "long" - }, - "term_vectors_memory_in_bytes": { - "type": "long" - }, - "terms_memory_in_bytes": { - "type": "long" - }, - "version_map_memory_in_bytes": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "size_in_bytes": { - "type": "long" - } - } - } - } - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "index_stats": { - "properties": { - "index": { - "path": "elasticsearch.index.name", - "type": "alias" - }, - "primaries": { - "properties": { - "docs": { - "properties": { - "count": { - "path": "elasticsearch.index.primaries.docs.count", - "type": "alias" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.index.primaries.indexing.index_time_in_millis", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.index.primaries.indexing.index_total", - "type": "alias" - }, - "throttle_time_in_millis": { - "path": "elasticsearch.index.primaries.indexing.throttle_time_in_millis", - "type": "alias" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "path": "elasticsearch.index.primaries.merges.total_size_in_bytes", - "type": "alias" - } - } - }, - "refresh": { - "properties": { - "total_time_in_millis": { - "path": "elasticsearch.index.primaries.refresh.total_time_in_millis", - "type": "alias" - } - } - }, - "segments": { - "properties": { - "count": { - "path": "elasticsearch.index.primaries.segments.count", - "type": "alias" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "path": "elasticsearch.index.primaries.store.size_in_bytes", - "type": "alias" - } - } - } - } - }, - "total": { - "properties": { - "fielddata": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.index.total.fielddata.memory_size_in_bytes", - "type": "alias" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.index.total.indexing.index_time_in_millis", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.index.total.indexing.index_total", - "type": "alias" - }, - "throttle_time_in_millis": { - "path": "elasticsearch.index.total.indexing.throttle_time_in_millis", - "type": "alias" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "path": "elasticsearch.index.total.merges.total_size_in_bytes", - "type": "alias" - } - } - }, - "query_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.index.total.query_cache.memory_size_in_bytes", - "type": "alias" - } - } - }, - "refresh": { - "properties": { - "total_time_in_millis": { - "path": "elasticsearch.index.total.refresh.total_time_in_millis", - "type": "alias" - } - } - }, - "request_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.index.total.request_cache.memory_size_in_bytes", - "type": "alias" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "path": "elasticsearch.index.total.search.query_time_in_millis", - "type": "alias" - }, - "query_total": { - "path": "elasticsearch.index.total.search.query_total", - "type": "alias" - } - } - }, - "segments": { - "properties": { - "count": { - "path": "elasticsearch.index.total.segments.count", - "type": "alias" - }, - "doc_values_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.doc_values_memory_in_bytes", - "type": "alias" - }, - "fixed_bit_set_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.fixed_bit_set_memory_in_bytes", - "type": "alias" - }, - "index_writer_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.index_writer_memory_in_bytes", - "type": "alias" - }, - "memory_in_bytes": { - "path": "elasticsearch.index.total.segments.memory_in_bytes", - "type": "alias" - }, - "norms_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.norms_memory_in_bytes", - "type": "alias" - }, - "points_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.points_memory_in_bytes", - "type": "alias" - }, - "stored_fields_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.stored_fields_memory_in_bytes", - "type": "alias" - }, - "term_vectors_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.term_vectors_memory_in_bytes", - "type": "alias" - }, - "terms_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.terms_memory_in_bytes", - "type": "alias" - }, - "version_map_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.version_map_memory_in_bytes", - "type": "alias" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "path": "elasticsearch.index.total.store.size_in_bytes", - "type": "alias" - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.index.uuid", - "elasticsearch.index.status", - "elasticsearch.index.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.index_recovery-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.index_recovery-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.index_recovery", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "index": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "recovery": { - "properties": { - "id": { - "type": "long" - }, - "index": { - "properties": { - "files": { - "properties": { - "percent": { - "ignore_above": 1024, - "type": "keyword" - }, - "recovered": { - "type": "long" - }, - "reused": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "size": { - "properties": { - "recovered_in_bytes": { - "type": "long" - }, - "reused_in_bytes": { - "type": "long" - }, - "total_in_bytes": { - "type": "long" - } - } - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "primary": { - "type": "boolean" - }, - "source": { - "properties": { - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "transport_address": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "stage": { - "ignore_above": 1024, - "type": "keyword" - }, - "start_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "stop_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "target": { - "properties": { - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "transport_address": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "total_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "translog": { - "properties": { - "percent": { - "ignore_above": 1024, - "type": "keyword" - }, - "total": { - "type": "long" - }, - "total_on_start": { - "type": "long" - } - } - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "verify_index": { - "properties": { - "check_index_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "total_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "index_recovery": { - "properties": { - "shards": { - "properties": { - "start_time_in_millis": { - "path": "elasticsearch.index.recovery.start_time.ms", - "type": "alias" - }, - "stop_time_in_millis": { - "path": "elasticsearch.index.recovery.stop_time.ms", - "type": "alias" - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.index.name", - "elasticsearch.index.recovery.index.files.percent", - "elasticsearch.index.recovery.name", - "elasticsearch.index.recovery.type", - "elasticsearch.index.recovery.stage", - "elasticsearch.index.recovery.translog.percent", - "elasticsearch.index.recovery.target.transport_address", - "elasticsearch.index.recovery.target.id", - "elasticsearch.index.recovery.target.host", - "elasticsearch.index.recovery.target.name", - "elasticsearch.index.recovery.source.transport_address", - "elasticsearch.index.recovery.source.id", - "elasticsearch.index.recovery.source.host", - "elasticsearch.index.recovery.source.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.index_summary-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.index_summary-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.index_summary", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "index": { - "properties": { - "summary": { - "properties": { - "primaries": { - "properties": { - "bulk": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - }, - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "time": { - "properties": { - "avg": { - "properties": { - "bytes": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - }, - "count": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "search": { - "properties": { - "query": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "total": { - "properties": { - "bulk": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - }, - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "time": { - "properties": { - "avg": { - "properties": { - "bytes": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "is_throttled": { - "type": "boolean" - }, - "throttle_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "search": { - "properties": { - "query": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "indices_stats": { - "properties": { - "_all": { - "properties": { - "primaries": { - "properties": { - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.index.summary.primaries.indexing.index.time.ms", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.index.summary.primaries.indexing.index.count", - "type": "alias" - } - } - } - } - }, - "total": { - "properties": { - "indexing": { - "properties": { - "index_total": { - "path": "elasticsearch.index.summary.total.indexing.index.count", - "type": "alias" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "path": "elasticsearch.index.summary.total.search.query.time.ms", - "type": "alias" - }, - "query_total": { - "path": "elasticsearch.index.summary.total.search.query.count", - "type": "alias" - } - } - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.node-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.node-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.node", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "jvm": { - "properties": { - "memory": { - "properties": { - "heap": { - "properties": { - "init": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "nonheap": { - "properties": { - "init": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "process": { - "properties": { - "mlockall": { - "type": "boolean" - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.node.version", - "elasticsearch.node.jvm.version", - "elasticsearch.node.id", - "elasticsearch.node.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.node_stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.node_stats-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.node_stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "stats": { - "properties": { - "fs": { - "properties": { - "io_stats": { - "properties": { - "total": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - }, - "read": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "write": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "summary": { - "properties": { - "available": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "free": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "total": { - "properties": { - "available_in_bytes": { - "type": "long" - }, - "total_in_bytes": { - "type": "long" - } - } - } - } - }, - "indexing_pressure": { - "properties": { - "memory": { - "properties": { - "current": { - "properties": { - "all": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "combined_coordinating_and_primary": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "coordinating": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "primary": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "replica": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "limit_in_bytes": { - "type": "long" - }, - "total": { - "properties": { - "all": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "combined_coordinating_and_primary": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "coordinating": { - "properties": { - "bytes": { - "type": "long" - }, - "rejections": { - "type": "long" - } - } - }, - "primary": { - "properties": { - "bytes": { - "type": "long" - }, - "rejections": { - "type": "long" - } - } - }, - "replica": { - "properties": { - "bytes": { - "type": "long" - }, - "rejections": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "indices": { - "properties": { - "bulk": { - "properties": { - "avg_size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "avg_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "operations": { - "properties": { - "total": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "total_size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "fielddata": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "indexing": { - "properties": { - "index_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "index_total": { - "properties": { - "count": { - "type": "long" - } - } - }, - "throttle_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "query_cache": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "request_cache": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "search": { - "properties": { - "query_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "query_total": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "doc_values": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "fixed_bit_set": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "index_writer": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "norms": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "points": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "stored_fields": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "term_vectors": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "terms": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "version_map": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "ingest": { - "properties": { - "total": { - "properties": { - "count": { - "type": "long" - }, - "current": { - "type": "long" - }, - "failed": { - "type": "long" - }, - "time_in_millis": { - "type": "long" - } - } - } - } - }, - "jvm": { - "properties": { - "gc": { - "properties": { - "collectors": { - "properties": { - "old": { - "properties": { - "collection": { - "properties": { - "count": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - } - } - }, - "young": { - "properties": { - "collection": { - "properties": { - "count": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "mem": { - "properties": { - "heap": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - }, - "pct": { - "type": "double" - } - } - } - } - }, - "pools": { - "properties": { - "old": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak_max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "survivor": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak_max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "young": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak_max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - } - } - } - } - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpu": { - "properties": { - "cfs": { - "properties": { - "quota": { - "properties": { - "us": { - "type": "long" - } - } - } - } - }, - "stat": { - "properties": { - "elapsed_periods": { - "properties": { - "count": { - "type": "long" - } - } - }, - "time_throttled": { - "properties": { - "ns": { - "type": "long" - } - } - }, - "times_throttled": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - }, - "cpuacct": { - "properties": { - "usage": { - "properties": { - "ns": { - "type": "long" - } - } - } - } - }, - "memory": { - "properties": { - "control_group": { - "ignore_above": 1024, - "type": "keyword" - }, - "limit": { - "properties": { - "bytes": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "usage": { - "properties": { - "bytes": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "cpu": { - "properties": { - "load_avg": { - "properties": { - "1m": { - "type": "half_float" - } - } - } - } - } - } - }, - "process": { - "properties": { - "cpu": { - "properties": { - "pct": { - "type": "double" - } - } - } - } - }, - "thread_pool": { - "properties": { - "bulk": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "get": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "index": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "search": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "write": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - } - } - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "node_stats": { - "properties": { - "fs": { - "properties": { - "io_stats": { - "properties": { - "total": { - "properties": { - "operations": { - "path": "elasticsearch.node.stats.fs.io_stats.total.operations.count", - "type": "alias" - }, - "read_operations": { - "path": "elasticsearch.node.stats.fs.io_stats.total.read.operations.count", - "type": "alias" - }, - "write_operations": { - "path": "elasticsearch.node.stats.fs.io_stats.total.write.operations.count", - "type": "alias" - } - } - } - } - }, - "summary": { - "properties": { - "available": { - "properties": { - "bytes": { - "path": "elasticsearch.node.stats.fs.summary.available.bytes", - "type": "alias" - } - } - }, - "total": { - "properties": { - "bytes": { - "path": "elasticsearch.node.stats.fs.summary.total.bytes", - "type": "alias" - } - } - } - } - }, - "total": { - "properties": { - "available_in_bytes": { - "path": "elasticsearch.node.stats.fs.summary.available.bytes", - "type": "alias" - }, - "total_in_bytes": { - "path": "elasticsearch.node.stats.fs.summary.total.bytes", - "type": "alias" - } - } - } - } - }, - "indices": { - "properties": { - "docs": { - "properties": { - "count": { - "path": "elasticsearch.node.stats.indices.docs.count", - "type": "alias" - } - } - }, - "fielddata": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.node.stats.indices.fielddata.memory.bytes", - "type": "alias" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.node.stats.indices.indexing.index_time.ms", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.node.stats.indices.indexing.index_total.count", - "type": "alias" - }, - "throttle_time_in_millis": { - "path": "elasticsearch.node.stats.indices.indexing.throttle_time.ms", - "type": "alias" - } - } - }, - "query_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.node.stats.indices.query_cache.memory.bytes", - "type": "alias" - } - } - }, - "request_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.node.stats.indices.request_cache.memory.bytes", - "type": "alias" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "path": "elasticsearch.node.stats.indices.search.query_time.ms", - "type": "alias" - }, - "query_total": { - "path": "elasticsearch.node.stats.indices.search.query_total.count", - "type": "alias" - } - } - }, - "segments": { - "properties": { - "count": { - "path": "elasticsearch.node.stats.indices.segments.count", - "type": "alias" - }, - "doc_values_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.doc_values.memory.bytes", - "type": "alias" - }, - "fixed_bit_set_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.fixed_bit_set.memory.bytes", - "type": "alias" - }, - "index_writer_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.index_writer.memory.bytes", - "type": "alias" - }, - "memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.memory.bytes", - "type": "alias" - }, - "norms_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.norms.memory.bytes", - "type": "alias" - }, - "points_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.points.memory.bytes", - "type": "alias" - }, - "stored_fields_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.stored_fields.memory.bytes", - "type": "alias" - }, - "term_vectors_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.term_vectors.memory.bytes", - "type": "alias" - }, - "terms_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.terms.memory.bytes", - "type": "alias" - }, - "version_map_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.version_map.memory.bytes", - "type": "alias" - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "path": "elasticsearch.node.stats.indices.store.size.bytes", - "type": "alias" - } - } - }, - "size_in_bytes": { - "path": "elasticsearch.node.stats.indices.store.size.bytes", - "type": "alias" - } - } - } - } - }, - "jvm": { - "properties": { - "gc": { - "properties": { - "collectors": { - "properties": { - "old": { - "properties": { - "collection_count": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.old.collection.count", - "type": "alias" - }, - "collection_time_in_millis": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.old.collection.ms", - "type": "alias" - } - } - }, - "young": { - "properties": { - "collection_count": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.young.collection.count", - "type": "alias" - }, - "collection_time_in_millis": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.young.collection.ms", - "type": "alias" - } - } - } - } - } - } - }, - "mem": { - "properties": { - "heap_max_in_bytes": { - "path": "elasticsearch.node.stats.jvm.mem.heap.max.bytes", - "type": "alias" - }, - "heap_used_in_bytes": { - "path": "elasticsearch.node.stats.jvm.mem.heap.used.bytes", - "type": "alias" - }, - "heap_used_percent": { - "path": "elasticsearch.node.stats.jvm.mem.heap.used.pct", - "type": "alias" - } - } - } - } - }, - "node_id": { - "path": "elasticsearch.node.id", - "type": "alias" - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpu": { - "properties": { - "cfs_quota_micros": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.cfs.quota.us", - "type": "alias" - }, - "stat": { - "properties": { - "number_of_elapsed_periods": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.stat.elapsed_periods.count", - "type": "alias" - }, - "number_of_times_throttled": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.stat.times_throttled.count", - "type": "alias" - }, - "time_throttled_nanos": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.stat.time_throttled.ns", - "type": "alias" - } - } - } - } - }, - "cpuacct": { - "properties": { - "usage_nanos": { - "path": "elasticsearch.node.stats.os.cgroup.cpuacct.usage.ns", - "type": "alias" - } - } - }, - "memory": { - "properties": { - "control_group": { - "path": "elasticsearch.node.stats.os.cgroup.memory.control_group", - "type": "alias" - }, - "limit_in_bytes": { - "path": "elasticsearch.node.stats.os.cgroup.memory.limit.bytes", - "type": "alias" - }, - "usage_in_bytes": { - "path": "elasticsearch.node.stats.os.cgroup.memory.usage.bytes", - "type": "alias" - } - } - } - } - }, - "cpu": { - "properties": { - "load_average": { - "properties": { - "1m": { - "path": "elasticsearch.node.stats.os.cpu.load_avg.1m", - "type": "alias" - } - } - } - } - } - } - }, - "process": { - "properties": { - "cpu": { - "properties": { - "percent": { - "path": "elasticsearch.node.stats.process.cpu.pct", - "type": "alias" - } - } - } - } - }, - "thread_pool": { - "properties": { - "bulk": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.bulk.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.bulk.rejected.count", - "type": "alias" - } - } - }, - "get": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.get.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.get.rejected.count", - "type": "alias" - } - } - }, - "index": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.index.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.index.rejected.count", - "type": "alias" - } - } - }, - "search": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.search.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.search.rejected.count", - "type": "alias" - } - } - }, - "write": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.write.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.write.rejected.count", - "type": "alias" - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.node.stats.os.cgroup.memory.control_group", - "elasticsearch.node.stats.os.cgroup.memory.limit.bytes", - "elasticsearch.node.stats.os.cgroup.memory.usage.bytes", - "elasticsearch.node.id", - "elasticsearch.node.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.shard-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.shard-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.shard", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "stats": { - "properties": { - "state": { - "properties": { - "state_uuid": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "index": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "shard": { - "properties": { - "number": { - "type": "long" - }, - "primary": { - "type": "boolean" - }, - "relocating_node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "state": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "shard": { - "properties": { - "index": { - "path": "elasticsearch.index.name", - "type": "alias" - }, - "node": { - "path": "elasticsearch.node.id", - "type": "alias" - }, - "primary": { - "path": "elasticsearch.shard.primary", - "type": "alias" - }, - "shard": { - "path": "elasticsearch.shard.number", - "type": "alias" - }, - "state": { - "path": "elasticsearch.shard.state", - "type": "alias" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.shard.state", - "elasticsearch.shard.relocating_node.name", - "elasticsearch.shard.relocating_node.id", - "elasticsearch.shard.source_node.name", - "elasticsearch.shard.source_node.uuid", - "elasticsearch.index.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.cluster.stats.state.state_uuid", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.cluster_actions-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.cluster_actions-*" - ], - "name": "metrics-kibana.stack_monitoring.cluster_actions", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "cluster_actions": { - "properties": { - "overdue": { - "properties": { - "count": { - "type": "long" - }, - "delay": { - "properties": { - "p50": { - "type": "float" - }, - "p99": { - "type": "float" - } - } - } - } - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.cluster_rules-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.cluster_rules-*" - ], - "name": "metrics-kibana.stack_monitoring.cluster_rules", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "cluster_rules": { - "properties": { - "overdue": { - "properties": { - "count": { - "type": "long" - }, - "delay": { - "properties": { - "p50": { - "type": "float" - }, - "p99": { - "type": "float" - } - } - } - } - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.node_actions-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.node_actions-*" - ], - "name": "metrics-kibana.stack_monitoring.node_actions", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node_actions": { - "properties": { - "executions": { - "type": "long" - }, - "failures": { - "type": "long" - }, - "timeouts": { - "type": "long" - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.node_rules-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.node_rules-*" - ], - "name": "metrics-kibana.stack_monitoring.node_rules", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node_rules": { - "properties": { - "executions": { - "type": "long" - }, - "failures": { - "type": "long" - }, - "timeouts": { - "type": "long" - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.stats-*" - ], - "name": "metrics-kibana.stack_monitoring.stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "stats": { - "properties": { - "concurrent_connections": { - "type": "long" - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "index": { - "ignore_above": 1024, - "type": "keyword" - }, - "kibana": { - "properties": { - "status": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "os": { - "properties": { - "distro": { - "ignore_above": 1024, - "type": "keyword" - }, - "distroRelease": { - "ignore_above": 1024, - "type": "keyword" - }, - "load": { - "properties": { - "15m": { - "type": "half_float" - }, - "1m": { - "type": "half_float" - }, - "5m": { - "type": "half_float" - } - } - }, - "memory": { - "properties": { - "free_in_bytes": { - "type": "long" - }, - "total_in_bytes": { - "type": "long" - }, - "used_in_bytes": { - "type": "long" - } - } - }, - "platform": { - "ignore_above": 1024, - "type": "keyword" - }, - "platformRelease": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "process": { - "properties": { - "event_loop_delay": { - "properties": { - "ms": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "size_limit": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "uptime": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "resident_set_size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "uptime": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "request": { - "properties": { - "disconnects": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "response_time": { - "properties": { - "avg": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "max": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "snapshot": { - "type": "boolean" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "transport_address": { - "ignore_above": 1024, - "type": "keyword" - }, - "usage": { - "properties": { - "index": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "kibana_stats": { - "properties": { - "concurrent_connections": { - "path": "kibana.stats.concurrent_connections", - "type": "alias" - }, - "kibana": { - "properties": { - "response_time": { - "properties": { - "max": { - "path": "kibana.stats.response_time.max.ms", - "type": "alias" - } - } - }, - "status": { - "path": "kibana.stats.status", - "type": "alias" - }, - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "os": { - "properties": { - "load": { - "properties": { - "15m": { - "path": "kibana.stats.os.load.15m", - "type": "alias" - }, - "1m": { - "path": "kibana.stats.os.load.1m", - "type": "alias" - }, - "5m": { - "path": "kibana.stats.os.load.5m", - "type": "alias" - } - } - }, - "memory": { - "properties": { - "free_in_bytes": { - "path": "kibana.stats.os.memory.free_in_bytes", - "type": "alias" - } - } - } - } - }, - "process": { - "properties": { - "event_loop_delay": { - "path": "kibana.stats.process.event_loop_delay.ms", - "type": "alias" - }, - "memory": { - "properties": { - "heap": { - "properties": { - "size_limit": { - "path": "kibana.stats.process.memory.heap.size_limit.bytes", - "type": "alias" - } - } - }, - "resident_set_size_in_bytes": { - "path": "kibana.stats.process.memory.resident_set_size.bytes", - "type": "alias" - } - } - }, - "uptime_in_millis": { - "path": "kibana.stats.process.uptime.ms", - "type": "alias" - } - } - }, - "requests": { - "properties": { - "disconnects": { - "path": "kibana.stats.request.disconnects", - "type": "alias" - }, - "total": { - "path": "kibana.stats.request.total", - "type": "alias" - } - } - }, - "response_times": { - "properties": { - "average": { - "path": "kibana.stats.response_time.avg.ms", - "type": "alias" - }, - "max": { - "path": "kibana.stats.response_time.max.ms", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id", - "kibana.stats.kibana.status", - "kibana.stats.usage.index", - "kibana.stats.name", - "kibana.stats.index", - "kibana.stats.host.name", - "kibana.stats.status", - "kibana.stats.transport_address", - "kibana.stats.os.distro", - "kibana.stats.os.distroRelease", - "kibana.stats.os.platform", - "kibana.stats.os.platformRelease" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.status-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.status-*" - ], - "name": "metrics-kibana.stack_monitoring.status", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - } - } - }, - "kibana": { - "properties": { - "status": { - "properties": { - "metrics": { - "properties": { - "concurrent_connections": { - "type": "long" - }, - "requests": { - "properties": { - "disconnects": { - "type": "long" - }, - "total": { - "type": "long" - } - } - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "status": { - "properties": { - "overall": { - "properties": { - "state": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.name", - "service.version", - "service.type", - "service.address", - "ecs.version", - "error.message", - "kibana.status.name", - "kibana.status.status.overall.state" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-logstash.stack_monitoring.node-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-logstash.stack_monitoring.node-*" - ], - "name": "metrics-logstash.stack_monitoring.node", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "logstash.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "logstash": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "jvm": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "state": { - "properties": { - "pipeline": { - "properties": { - "batch_size": { - "type": "long" - }, - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "representation": { - "properties": { - "graph": { - "properties": { - "edges": { - "type": "object" - }, - "vertices": { - "type": "object" - } - } - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "workers": { - "type": "long" - } - } - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "logstash_state": { - "properties": { - "pipeline": { - "properties": { - "hash": { - "path": "logstash.node.state.pipeline.hash", - "type": "alias" - }, - "id": { - "path": "logstash.node.state.pipeline.id", - "type": "alias" - } - } - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "hostname": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.hostname", - "service.id", - "service.type", - "service.version", - "service.address", - "service.name", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "logstash.cluster.id", - "logstash.elasticsearch.cluster.id", - "logstash.node.jvm.version", - "logstash.node.host", - "logstash.node.version", - "logstash.node.id", - "logstash.node.state.pipeline.id", - "logstash.node.state.pipeline.hash", - "logstash.node.state.pipeline.ephemeral_id", - "logstash.node.state.pipeline.representation.hash", - "logstash.node.state.pipeline.representation.type", - "logstash.node.state.pipeline.representation.version" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-logstash.stack_monitoring.node_stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-logstash.stack_monitoring.node_stats-*" - ], - "name": "metrics-logstash.stack_monitoring.node_stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "logstash.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "logstash": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "state": { - "properties": { - "pipeline": { - "properties": { - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "stats": { - "properties": { - "events": { - "properties": { - "duration_in_millis": { - "type": "long" - }, - "filtered": { - "type": "long" - }, - "in": { - "type": "long" - }, - "out": { - "type": "long" - } - } - }, - "jvm": { - "properties": { - "gc": { - "properties": { - "collectors": { - "properties": { - "old": { - "properties": { - "collection_count": { - "type": "long" - }, - "collection_time_in_millis": { - "type": "long" - } - } - }, - "young": { - "properties": { - "collection_count": { - "type": "long" - }, - "collection_time_in_millis": { - "type": "long" - } - } - } - } - } - } - }, - "mem": { - "properties": { - "heap_max_in_bytes": { - "type": "long" - }, - "heap_used_in_bytes": { - "type": "long" - }, - "heap_used_percent": { - "type": "long" - } - } - }, - "uptime_in_millis": { - "type": "long" - } - } - }, - "logstash": { - "properties": { - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "http_address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "pipeline": { - "properties": { - "batch_size": { - "type": "long" - }, - "workers": { - "type": "long" - } - } - }, - "snapshot": { - "type": "boolean" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpu": { - "properties": { - "cfs_quota_micros": { - "type": "long" - }, - "control_group": { - "type": "text" - }, - "stat": { - "type": "object" - } - } - }, - "cpuacct": { - "type": "object" - } - } - }, - "cpu": { - "properties": { - "load_average": { - "properties": { - "15m": { - "type": "half_float" - }, - "1m": { - "type": "half_float" - }, - "5m": { - "type": "half_float" - } - } - }, - "percent": { - "type": "double" - } - } - } - } - }, - "pipelines": { - "properties": { - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "events": { - "properties": { - "duration_in_millis": { - "type": "long" - }, - "filtered": { - "type": "long" - }, - "in": { - "type": "long" - }, - "out": { - "type": "long" - }, - "queue_push_duration_in_millis": { - "type": "long" - } - } - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "queue": { - "properties": { - "events_count": { - "type": "long" - }, - "max_queue_size_in_bytes": { - "type": "long" - }, - "queue_size_in_bytes": { - "type": "long" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "reloads": { - "properties": { - "failures": { - "type": "long" - }, - "successes": { - "type": "long" - } - } - }, - "vertices": { - "properties": { - "duration_in_millis": { - "type": "long" - }, - "events_in": { - "type": "long" - }, - "events_out": { - "type": "long" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "long_counters": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "value": { - "type": "long" - } - }, - "type": "nested" - }, - "pipeline_ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "queue_push_duration_in_millis": { - "type": "long" - } - }, - "type": "nested" - } - }, - "type": "nested" - }, - "process": { - "properties": { - "cpu": { - "properties": { - "percent": { - "type": "double" - } - } - }, - "max_file_descriptors": { - "type": "long" - }, - "open_file_descriptors": { - "type": "long" - } - } - }, - "queue": { - "properties": { - "events_count": { - "type": "long" - } - } - }, - "reloads": { - "properties": { - "failures": { - "type": "long" - }, - "successes": { - "type": "long" - } - } - }, - "timestamp": { - "type": "date" - } - } - } - } - } - } - }, - "logstash_stats": { - "properties": { - "events": { - "properties": { - "duration_in_millis": { - "path": "logstash.node.stats.events.duration_in_millis", - "type": "alias" - }, - "in": { - "path": "logstash.node.stats.events.in", - "type": "alias" - }, - "out": { - "path": "logstash.node.stats.events.out", - "type": "alias" - } - } - }, - "jvm": { - "properties": { - "mem": { - "properties": { - "heap_max_in_bytes": { - "path": "logstash.node.stats.jvm.mem.heap_max_in_bytes", - "type": "alias" - }, - "heap_used_in_bytes": { - "path": "logstash.node.stats.jvm.mem.heap_used_in_bytes", - "type": "alias" - } - } - }, - "uptime_in_millis": { - "path": "logstash.node.stats.jvm.uptime_in_millis", - "type": "alias" - } - } - }, - "logstash": { - "properties": { - "uuid": { - "path": "logstash.node.stats.logstash.uuid", - "type": "alias" - }, - "version": { - "path": "logstash.node.stats.logstash.version", - "type": "alias" - } - } - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpuacct": { - "type": "object" - } - } - }, - "cpu": { - "properties": { - "load_average": { - "properties": { - "15m": { - "path": "logstash.node.stats.os.cpu.load_average.15m", - "type": "alias" - }, - "1m": { - "path": "logstash.node.stats.os.cpu.load_average.1m", - "type": "alias" - }, - "5m": { - "path": "logstash.node.stats.os.cpu.load_average.5m", - "type": "alias" - } - } - }, - "stat": { - "type": "object" - } - } - } - } - }, - "pipelines": { - "type": "nested" - }, - "process": { - "properties": { - "cpu": { - "properties": { - "percent": { - "path": "logstash.node.stats.process.cpu.percent", - "type": "alias" - } - } - } - } - }, - "queue": { - "properties": { - "events_count": { - "path": "logstash.node.stats.queue.events_count", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "hostname": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.hostname", - "service.id", - "service.type", - "service.version", - "service.address", - "service.name", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "logstash.elasticsearch.cluster.id", - "logstash.node.state.pipeline.id", - "logstash.node.state.pipeline.hash", - "logstash.node.stats.logstash.uuid", - "logstash.node.stats.logstash.version", - "logstash.node.stats.logstash.ephemeral_id", - "logstash.node.stats.logstash.host", - "logstash.node.stats.logstash.http_address", - "logstash.node.stats.logstash.name", - "logstash.node.stats.logstash.status", - "logstash.node.stats.os.cgroup.cpuacct.control_group", - "logstash.node.stats.os.cgroup.cpu.control_group", - "logstash.node.stats.pipelines.id", - "logstash.node.stats.pipelines.hash", - "logstash.node.stats.pipelines.ephemeral_id", - "logstash.node.stats.pipelines.queue.type", - "logstash.node.stats.pipelines.vertices.id", - "logstash.node.stats.pipelines.vertices.long_counters.name", - "logstash.node.stats.pipelines.vertices.pipeline_ephemeral_id", - "logstash.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.ccr-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.ccr-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.ccr", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "ccr_auto_follow_stats": { - "properties": { - "follower": { - "properties": { - "failed_read_requests": { - "path": "elasticsearch.ccr.requests.failed.read.count", - "type": "alias" - } - } - }, - "number_of_failed_follow_indices": { - "path": "elasticsearch.ccr.auto_follow.failed.follow_indices.count", - "type": "alias" - }, - "number_of_failed_remote_cluster_state_requests": { - "path": "elasticsearch.ccr.auto_follow.failed.remote_cluster_state_requests.count", - "type": "alias" - }, - "number_of_successful_follow_indices": { - "path": "elasticsearch.ccr.auto_follow.success.follow_indices.count", - "type": "alias" - } - } - }, - "ccr_stats": { - "properties": { - "bytes_read": { - "path": "elasticsearch.ccr.bytes_read", - "type": "alias" - }, - "failed_read_requests": { - "path": "elasticsearch.ccr.requests.failed.read.count", - "type": "alias" - }, - "failed_write_requests": { - "path": "elasticsearch.ccr.requests.failed.write.count", - "type": "alias" - }, - "follower_aliases_version": { - "path": "elasticsearch.ccr.follower.aliases_version", - "type": "alias" - }, - "follower_global_checkpoint": { - "path": "elasticsearch.ccr.follower.global_checkpoint", - "type": "alias" - }, - "follower_index": { - "path": "elasticsearch.ccr.follower.index", - "type": "alias" - }, - "follower_mapping_version": { - "path": "elasticsearch.ccr.follower.mapping_version", - "type": "alias" - }, - "follower_max_seq_no": { - "path": "elasticsearch.ccr.follower.max_seq_no", - "type": "alias" - }, - "follower_settings_version": { - "path": "elasticsearch.ccr.follower.settings_version", - "type": "alias" - }, - "last_requested_seq_no": { - "path": "elasticsearch.ccr.last_requested_seq_no", - "type": "alias" - }, - "leader_global_checkpoint": { - "path": "elasticsearch.ccr.leader.global_checkpoint", - "type": "alias" - }, - "leader_index": { - "path": "elasticsearch.ccr.leader.index", - "type": "alias" - }, - "leader_max_seq_no": { - "path": "elasticsearch.ccr.leader.max_seq_no", - "type": "alias" - }, - "operations_read": { - "path": "elasticsearch.ccr.follower.operations.read.count", - "type": "alias" - }, - "operations_written": { - "path": "elasticsearch.ccr.follower.operations_written", - "type": "alias" - }, - "outstanding_read_requests": { - "path": "elasticsearch.ccr.requests.outstanding.read.count", - "type": "alias" - }, - "outstanding_write_requests": { - "path": "elasticsearch.ccr.requests.outstanding.write.count", - "type": "alias" - }, - "remote_cluster": { - "path": "elasticsearch.ccr.remote_cluster", - "type": "alias" - }, - "shard_id": { - "path": "elasticsearch.ccr.follower.shard.number", - "type": "alias" - }, - "successful_read_requests": { - "path": "elasticsearch.ccr.requests.successful.read.count", - "type": "alias" - }, - "successful_write_requests": { - "path": "elasticsearch.ccr.requests.successful.write.count", - "type": "alias" - }, - "total_read_remote_exec_time_millis": { - "path": "elasticsearch.ccr.total_time.read.remote_exec.ms", - "type": "alias" - }, - "total_read_time_millis": { - "path": "elasticsearch.ccr.total_time.read.ms", - "type": "alias" - }, - "total_write_time_millis": { - "path": "elasticsearch.ccr.total_time.write.ms", - "type": "alias" - }, - "write_buffer_operation_count": { - "path": "elasticsearch.ccr.write_buffer.operation.count", - "type": "alias" - }, - "write_buffer_size_in_bytes": { - "path": "elasticsearch.ccr.write_buffer.size.bytes", - "type": "alias" - } - } - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "ccr": { - "properties": { - "auto_follow": { - "properties": { - "failed": { - "properties": { - "follow_indices": { - "properties": { - "count": { - "type": "long" - } - } - }, - "remote_cluster_state_requests": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "success": { - "properties": { - "follow_indices": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - }, - "bytes_read": { - "type": "long" - }, - "follower": { - "properties": { - "aliases_version": { - "type": "long" - }, - "global_checkpoint": { - "type": "long" - }, - "index": { - "ignore_above": 1024, - "type": "keyword" - }, - "mapping_version": { - "type": "long" - }, - "max_seq_no": { - "type": "long" - }, - "operations": { - "properties": { - "read": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "operations_written": { - "type": "long" - }, - "settings_version": { - "type": "long" - }, - "shard": { - "properties": { - "number": { - "type": "long" - } - } - }, - "time_since_last_read": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "last_requested_seq_no": { - "type": "long" - }, - "leader": { - "properties": { - "global_checkpoint": { - "type": "long" - }, - "index": { - "ignore_above": 1024, - "type": "keyword" - }, - "max_seq_no": { - "type": "long" - } - } - }, - "read_exceptions": { - "type": "nested" - }, - "remote_cluster": { - "ignore_above": 1024, - "type": "keyword" - }, - "requests": { - "properties": { - "failed": { - "properties": { - "read": { - "properties": { - "count": { - "type": "long" - } - } - }, - "write": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "outstanding": { - "properties": { - "read": { - "properties": { - "count": { - "type": "long" - } - } - }, - "write": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "successful": { - "properties": { - "read": { - "properties": { - "count": { - "type": "long" - } - } - }, - "write": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - }, - "shard_id": { - "type": "long" - }, - "total_time": { - "properties": { - "read": { - "properties": { - "ms": { - "type": "long" - }, - "remote_exec": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "write": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "write_buffer": { - "properties": { - "operation": { - "properties": { - "count": { - "type": "long" - } - } - }, - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.ccr.remote_cluster", - "elasticsearch.ccr.leader.index", - "elasticsearch.ccr.follower.index", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} diff --git a/x-pack/test/functional/es_archives/monitoring/singlecluster_green_platinum_mb/data.json.gz b/x-pack/test/functional/es_archives/monitoring/singlecluster_green_platinum_mb/data.json.gz deleted file mode 100644 index afcf34d7c906e..0000000000000 Binary files a/x-pack/test/functional/es_archives/monitoring/singlecluster_green_platinum_mb/data.json.gz and /dev/null differ diff --git a/x-pack/test/functional/es_archives/monitoring/singlecluster_green_platinum_package/data.json.gz b/x-pack/test/functional/es_archives/monitoring/singlecluster_green_platinum_package/data.json.gz deleted file mode 100644 index e6edf706a6fc7..0000000000000 Binary files a/x-pack/test/functional/es_archives/monitoring/singlecluster_green_platinum_package/data.json.gz and /dev/null differ diff --git a/x-pack/test/functional/es_archives/monitoring/singlecluster_green_platinum_package/mappings.json b/x-pack/test/functional/es_archives/monitoring/singlecluster_green_platinum_package/mappings.json deleted file mode 100644 index 5684702273ac7..0000000000000 --- a/x-pack/test/functional/es_archives/monitoring/singlecluster_green_platinum_package/mappings.json +++ /dev/null @@ -1,7138 +0,0 @@ -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.cluster_stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.cluster_stats-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.cluster_stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_state": { - "properties": { - "master_node": { - "path": "elasticsearch.cluster.stats.state.master_node", - "type": "alias" - }, - "nodes_hash": { - "path": "elasticsearch.cluster.stats.state.nodes_hash", - "type": "alias" - }, - "state_uuid": { - "path": "elasticsearch.cluster.stats.state.state_uuid", - "type": "alias" - }, - "status": { - "path": "elasticsearch.cluster.stats.status", - "type": "alias" - }, - "version": { - "path": "elasticsearch.cluster.stats.state.version", - "type": "alias" - } - } - }, - "cluster_stats": { - "properties": { - "indices": { - "properties": { - "count": { - "path": "elasticsearch.cluster.stats.indices.total", - "type": "alias" - }, - "shards": { - "properties": { - "total": { - "path": "elasticsearch.cluster.stats.indices.shards.count", - "type": "alias" - } - } - } - } - }, - "nodes": { - "properties": { - "count": { - "properties": { - "total": { - "path": "elasticsearch.cluster.stats.nodes.count", - "type": "alias" - } - } - }, - "jvm": { - "properties": { - "max_uptime_in_millis": { - "path": "elasticsearch.cluster.stats.nodes.jvm.max_uptime.ms", - "type": "alias" - }, - "mem": { - "properties": { - "heap_max_in_bytes": { - "path": "elasticsearch.cluster.stats.nodes.jvm.memory.heap.max.bytes", - "type": "alias" - }, - "heap_used_in_bytes": { - "path": "elasticsearch.cluster.stats.nodes.jvm.memory.heap.used.bytes", - "type": "alias" - } - } - } - } - } - } - } - } - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "stats": { - "properties": { - "indices": { - "properties": { - "docs": { - "properties": { - "total": { - "type": "long" - } - } - }, - "fielddata": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "shards": { - "properties": { - "count": { - "type": "long" - }, - "primaries": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "total": { - "type": "long" - } - } - }, - "license": { - "properties": { - "cluster_needs_tls": { - "type": "boolean" - }, - "expiry_date": { - "type": "date" - }, - "expiry_date_in_millis": { - "type": "long" - }, - "issue_date": { - "type": "date" - }, - "issue_date_in_millis": { - "type": "long" - }, - "issued_to": { - "ignore_above": 1024, - "type": "keyword" - }, - "issuer": { - "ignore_above": 1024, - "type": "keyword" - }, - "max_nodes": { - "type": "long" - }, - "start_date_in_millis": { - "type": "long" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "uid": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "nodes": { - "properties": { - "count": { - "type": "long" - }, - "data": { - "type": "long" - }, - "fs": { - "properties": { - "available": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "jvm": { - "properties": { - "max_uptime": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "master": { - "type": "long" - }, - "stats": { - "properties": { - "data": { - "type": "long" - } - } - }, - "versions": { - "type": "text" - } - } - }, - "stack": { - "properties": { - "apm": { - "properties": { - "found": { - "type": "boolean" - } - } - }, - "xpack": { - "properties": { - "ccr": { - "properties": { - "available": { - "type": "boolean" - }, - "enabled": { - "type": "boolean" - } - } - } - } - } - } - }, - "state": { - "properties": { - "master_node": { - "ignore_above": 1024, - "type": "keyword" - }, - "nodes": { - "type": "flattened" - }, - "nodes_hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "state_uuid": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "license": { - "properties": { - "status": { - "path": "elasticsearch.cluster.stats.license.status", - "type": "alias" - }, - "type": { - "path": "elasticsearch.cluster.stats.license.type", - "type": "alias" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "stack_stats": { - "properties": { - "apm": { - "properties": { - "found": { - "path": "elasticsearch.cluster.stats.stack.apm.found", - "type": "alias" - } - } - }, - "xpack": { - "properties": { - "ccr": { - "properties": { - "available": { - "path": "elasticsearch.cluster.stats.stack.xpack.ccr.available", - "type": "alias" - }, - "enabled": { - "path": "elasticsearch.cluster.stats.stack.xpack.ccr.enabled", - "type": "alias" - } - } - } - } - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.cluster.stats.version", - "elasticsearch.cluster.stats.state.nodes_hash", - "elasticsearch.cluster.stats.state.master_node", - "elasticsearch.cluster.stats.state.version", - "elasticsearch.cluster.stats.state.state_uuid", - "elasticsearch.cluster.stats.status", - "elasticsearch.cluster.stats.nodes.versions", - "elasticsearch.cluster.stats.license.issued_to", - "elasticsearch.cluster.stats.license.issuer", - "elasticsearch.cluster.stats.license.status", - "elasticsearch.cluster.stats.license.type", - "elasticsearch.cluster.stats.license.uid", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.version", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.enrich-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.enrich-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.enrich", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "enrich": { - "properties": { - "executed_searches": { - "properties": { - "total": { - "type": "long" - } - } - }, - "executing_policy": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "task": { - "properties": { - "action": { - "ignore_above": 1024, - "type": "keyword" - }, - "cancellable": { - "type": "boolean" - }, - "id": { - "type": "long" - }, - "parent_task_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "task": { - "ignore_above": 1024, - "type": "keyword" - }, - "time": { - "properties": { - "running": { - "properties": { - "nano": { - "type": "long" - } - } - }, - "start": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "queue": { - "properties": { - "size": { - "type": "long" - } - } - }, - "remote_requests": { - "properties": { - "current": { - "type": "long" - }, - "total": { - "type": "long" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.enrich.executing_policy.name", - "elasticsearch.enrich.executing_policy.task.task", - "elasticsearch.enrich.executing_policy.task.action", - "elasticsearch.enrich.executing_policy.task.parent_task_id", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.index-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.index-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.index", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "index": { - "properties": { - "created": { - "type": "long" - }, - "hidden": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "primaries": { - "properties": { - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "type": "long" - }, - "index_total": { - "type": "long" - }, - "throttle_time_in_millis": { - "type": "long" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "type": "long" - } - } - }, - "query_cache": { - "properties": { - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "refresh": { - "properties": { - "external_total_time_in_millis": { - "type": "long" - }, - "total_time_in_millis": { - "type": "long" - } - } - }, - "request_cache": { - "properties": { - "evictions": { - "type": "long" - }, - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "type": "long" - }, - "query_total": { - "type": "long" - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "doc_values_memory_in_bytes": { - "type": "long" - }, - "fixed_bit_set_memory_in_bytes": { - "type": "long" - }, - "index_writer_memory_in_bytes": { - "type": "long" - }, - "memory_in_bytes": { - "type": "long" - }, - "norms_memory_in_bytes": { - "type": "long" - }, - "points_memory_in_bytes": { - "type": "long" - }, - "stored_fields_memory_in_bytes": { - "type": "long" - }, - "term_vectors_memory_in_bytes": { - "type": "long" - }, - "terms_memory_in_bytes": { - "type": "long" - }, - "version_map_memory_in_bytes": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "type": "long" - } - } - } - } - }, - "shards": { - "properties": { - "primaries": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "total": { - "properties": { - "bulk": { - "properties": { - "avg_size_in_bytes": { - "type": "long" - }, - "avg_time_in_millis": { - "type": "long" - }, - "total_operations": { - "type": "long" - }, - "total_size_in_bytes": { - "type": "long" - }, - "total_time_in_millis": { - "type": "long" - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "fielddata": { - "properties": { - "evictions": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "type": "long" - }, - "index_total": { - "type": "long" - }, - "throttle_time_in_millis": { - "type": "long" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "type": "long" - } - } - }, - "query_cache": { - "properties": { - "evictions": { - "type": "long" - }, - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "refresh": { - "properties": { - "external_total_time_in_millis": { - "type": "long" - }, - "total_time_in_millis": { - "type": "long" - } - } - }, - "request_cache": { - "properties": { - "evictions": { - "type": "long" - }, - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "type": "long" - }, - "query_total": { - "type": "long" - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "doc_values_memory_in_bytes": { - "type": "long" - }, - "fixed_bit_set_memory_in_bytes": { - "type": "long" - }, - "index_writer_memory_in_bytes": { - "type": "long" - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "memory_in_bytes": { - "type": "long" - }, - "norms_memory_in_bytes": { - "type": "long" - }, - "points_memory_in_bytes": { - "type": "long" - }, - "stored_fields_memory_in_bytes": { - "type": "long" - }, - "term_vectors_memory_in_bytes": { - "type": "long" - }, - "terms_memory_in_bytes": { - "type": "long" - }, - "version_map_memory_in_bytes": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "size_in_bytes": { - "type": "long" - } - } - } - } - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "index_stats": { - "properties": { - "index": { - "path": "elasticsearch.index.name", - "type": "alias" - }, - "primaries": { - "properties": { - "docs": { - "properties": { - "count": { - "path": "elasticsearch.index.primaries.docs.count", - "type": "alias" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.index.primaries.indexing.index_time_in_millis", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.index.primaries.indexing.index_total", - "type": "alias" - }, - "throttle_time_in_millis": { - "path": "elasticsearch.index.primaries.indexing.throttle_time_in_millis", - "type": "alias" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "path": "elasticsearch.index.primaries.merges.total_size_in_bytes", - "type": "alias" - } - } - }, - "refresh": { - "properties": { - "total_time_in_millis": { - "path": "elasticsearch.index.primaries.refresh.total_time_in_millis", - "type": "alias" - } - } - }, - "segments": { - "properties": { - "count": { - "path": "elasticsearch.index.primaries.segments.count", - "type": "alias" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "path": "elasticsearch.index.primaries.store.size_in_bytes", - "type": "alias" - } - } - } - } - }, - "total": { - "properties": { - "fielddata": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.index.total.fielddata.memory_size_in_bytes", - "type": "alias" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.index.total.indexing.index_time_in_millis", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.index.total.indexing.index_total", - "type": "alias" - }, - "throttle_time_in_millis": { - "path": "elasticsearch.index.total.indexing.throttle_time_in_millis", - "type": "alias" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "path": "elasticsearch.index.total.merges.total_size_in_bytes", - "type": "alias" - } - } - }, - "query_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.index.total.query_cache.memory_size_in_bytes", - "type": "alias" - } - } - }, - "refresh": { - "properties": { - "total_time_in_millis": { - "path": "elasticsearch.index.total.refresh.total_time_in_millis", - "type": "alias" - } - } - }, - "request_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.index.total.request_cache.memory_size_in_bytes", - "type": "alias" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "path": "elasticsearch.index.total.search.query_time_in_millis", - "type": "alias" - }, - "query_total": { - "path": "elasticsearch.index.total.search.query_total", - "type": "alias" - } - } - }, - "segments": { - "properties": { - "count": { - "path": "elasticsearch.index.total.segments.count", - "type": "alias" - }, - "doc_values_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.doc_values_memory_in_bytes", - "type": "alias" - }, - "fixed_bit_set_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.fixed_bit_set_memory_in_bytes", - "type": "alias" - }, - "index_writer_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.index_writer_memory_in_bytes", - "type": "alias" - }, - "memory_in_bytes": { - "path": "elasticsearch.index.total.segments.memory_in_bytes", - "type": "alias" - }, - "norms_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.norms_memory_in_bytes", - "type": "alias" - }, - "points_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.points_memory_in_bytes", - "type": "alias" - }, - "stored_fields_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.stored_fields_memory_in_bytes", - "type": "alias" - }, - "term_vectors_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.term_vectors_memory_in_bytes", - "type": "alias" - }, - "terms_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.terms_memory_in_bytes", - "type": "alias" - }, - "version_map_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.version_map_memory_in_bytes", - "type": "alias" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "path": "elasticsearch.index.total.store.size_in_bytes", - "type": "alias" - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.index.uuid", - "elasticsearch.index.status", - "elasticsearch.index.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.index_recovery-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.index_recovery-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.index_recovery", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "index": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "recovery": { - "properties": { - "id": { - "type": "long" - }, - "index": { - "properties": { - "files": { - "properties": { - "percent": { - "ignore_above": 1024, - "type": "keyword" - }, - "recovered": { - "type": "long" - }, - "reused": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "size": { - "properties": { - "recovered_in_bytes": { - "type": "long" - }, - "reused_in_bytes": { - "type": "long" - }, - "total_in_bytes": { - "type": "long" - } - } - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "primary": { - "type": "boolean" - }, - "source": { - "properties": { - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "transport_address": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "stage": { - "ignore_above": 1024, - "type": "keyword" - }, - "start_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "stop_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "target": { - "properties": { - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "transport_address": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "total_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "translog": { - "properties": { - "percent": { - "ignore_above": 1024, - "type": "keyword" - }, - "total": { - "type": "long" - }, - "total_on_start": { - "type": "long" - } - } - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "verify_index": { - "properties": { - "check_index_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "total_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "index_recovery": { - "properties": { - "shards": { - "properties": { - "start_time_in_millis": { - "path": "elasticsearch.index.recovery.start_time.ms", - "type": "alias" - }, - "stop_time_in_millis": { - "path": "elasticsearch.index.recovery.stop_time.ms", - "type": "alias" - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.index.name", - "elasticsearch.index.recovery.index.files.percent", - "elasticsearch.index.recovery.name", - "elasticsearch.index.recovery.type", - "elasticsearch.index.recovery.stage", - "elasticsearch.index.recovery.translog.percent", - "elasticsearch.index.recovery.target.transport_address", - "elasticsearch.index.recovery.target.id", - "elasticsearch.index.recovery.target.host", - "elasticsearch.index.recovery.target.name", - "elasticsearch.index.recovery.source.transport_address", - "elasticsearch.index.recovery.source.id", - "elasticsearch.index.recovery.source.host", - "elasticsearch.index.recovery.source.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.index_summary-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.index_summary-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.index_summary", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "index": { - "properties": { - "summary": { - "properties": { - "primaries": { - "properties": { - "bulk": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - }, - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "time": { - "properties": { - "avg": { - "properties": { - "bytes": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - }, - "count": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "search": { - "properties": { - "query": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "total": { - "properties": { - "bulk": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - }, - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "time": { - "properties": { - "avg": { - "properties": { - "bytes": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "is_throttled": { - "type": "boolean" - }, - "throttle_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "search": { - "properties": { - "query": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "indices_stats": { - "properties": { - "_all": { - "properties": { - "primaries": { - "properties": { - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.index.summary.primaries.indexing.index.time.ms", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.index.summary.primaries.indexing.index.count", - "type": "alias" - } - } - } - } - }, - "total": { - "properties": { - "indexing": { - "properties": { - "index_total": { - "path": "elasticsearch.index.summary.total.indexing.index.count", - "type": "alias" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "path": "elasticsearch.index.summary.total.search.query.time.ms", - "type": "alias" - }, - "query_total": { - "path": "elasticsearch.index.summary.total.search.query.count", - "type": "alias" - } - } - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.node-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.node-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.node", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "jvm": { - "properties": { - "memory": { - "properties": { - "heap": { - "properties": { - "init": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "nonheap": { - "properties": { - "init": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "process": { - "properties": { - "mlockall": { - "type": "boolean" - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.node.version", - "elasticsearch.node.jvm.version", - "elasticsearch.node.id", - "elasticsearch.node.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.node_stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.node_stats-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.node_stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "stats": { - "properties": { - "fs": { - "properties": { - "io_stats": { - "properties": { - "total": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - }, - "read": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "write": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "summary": { - "properties": { - "available": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "free": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "total": { - "properties": { - "available_in_bytes": { - "type": "long" - }, - "total_in_bytes": { - "type": "long" - } - } - } - } - }, - "indexing_pressure": { - "properties": { - "memory": { - "properties": { - "current": { - "properties": { - "all": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "combined_coordinating_and_primary": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "coordinating": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "primary": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "replica": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "limit_in_bytes": { - "type": "long" - }, - "total": { - "properties": { - "all": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "combined_coordinating_and_primary": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "coordinating": { - "properties": { - "bytes": { - "type": "long" - }, - "rejections": { - "type": "long" - } - } - }, - "primary": { - "properties": { - "bytes": { - "type": "long" - }, - "rejections": { - "type": "long" - } - } - }, - "replica": { - "properties": { - "bytes": { - "type": "long" - }, - "rejections": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "indices": { - "properties": { - "bulk": { - "properties": { - "avg_size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "avg_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "operations": { - "properties": { - "total": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "total_size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "fielddata": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "indexing": { - "properties": { - "index_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "index_total": { - "properties": { - "count": { - "type": "long" - } - } - }, - "throttle_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "query_cache": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "request_cache": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "search": { - "properties": { - "query_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "query_total": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "doc_values": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "fixed_bit_set": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "index_writer": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "norms": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "points": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "stored_fields": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "term_vectors": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "terms": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "version_map": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "ingest": { - "properties": { - "total": { - "properties": { - "count": { - "type": "long" - }, - "current": { - "type": "long" - }, - "failed": { - "type": "long" - }, - "time_in_millis": { - "type": "long" - } - } - } - } - }, - "jvm": { - "properties": { - "gc": { - "properties": { - "collectors": { - "properties": { - "old": { - "properties": { - "collection": { - "properties": { - "count": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - } - } - }, - "young": { - "properties": { - "collection": { - "properties": { - "count": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "mem": { - "properties": { - "heap": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - }, - "pct": { - "type": "double" - } - } - } - } - }, - "pools": { - "properties": { - "old": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak_max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "survivor": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak_max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "young": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak_max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - } - } - } - } - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpu": { - "properties": { - "cfs": { - "properties": { - "quota": { - "properties": { - "us": { - "type": "long" - } - } - } - } - }, - "stat": { - "properties": { - "elapsed_periods": { - "properties": { - "count": { - "type": "long" - } - } - }, - "time_throttled": { - "properties": { - "ns": { - "type": "long" - } - } - }, - "times_throttled": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - }, - "cpuacct": { - "properties": { - "usage": { - "properties": { - "ns": { - "type": "long" - } - } - } - } - }, - "memory": { - "properties": { - "control_group": { - "ignore_above": 1024, - "type": "keyword" - }, - "limit": { - "properties": { - "bytes": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "usage": { - "properties": { - "bytes": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "cpu": { - "properties": { - "load_avg": { - "properties": { - "1m": { - "type": "half_float" - } - } - } - } - } - } - }, - "process": { - "properties": { - "cpu": { - "properties": { - "pct": { - "type": "double" - } - } - } - } - }, - "thread_pool": { - "properties": { - "bulk": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "get": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "index": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "search": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "write": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - } - } - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "node_stats": { - "properties": { - "fs": { - "properties": { - "io_stats": { - "properties": { - "total": { - "properties": { - "operations": { - "path": "elasticsearch.node.stats.fs.io_stats.total.operations.count", - "type": "alias" - }, - "read_operations": { - "path": "elasticsearch.node.stats.fs.io_stats.total.read.operations.count", - "type": "alias" - }, - "write_operations": { - "path": "elasticsearch.node.stats.fs.io_stats.total.write.operations.count", - "type": "alias" - } - } - } - } - }, - "summary": { - "properties": { - "available": { - "properties": { - "bytes": { - "path": "elasticsearch.node.stats.fs.summary.available.bytes", - "type": "alias" - } - } - }, - "total": { - "properties": { - "bytes": { - "path": "elasticsearch.node.stats.fs.summary.total.bytes", - "type": "alias" - } - } - } - } - }, - "total": { - "properties": { - "available_in_bytes": { - "path": "elasticsearch.node.stats.fs.summary.available.bytes", - "type": "alias" - }, - "total_in_bytes": { - "path": "elasticsearch.node.stats.fs.summary.total.bytes", - "type": "alias" - } - } - } - } - }, - "indices": { - "properties": { - "docs": { - "properties": { - "count": { - "path": "elasticsearch.node.stats.indices.docs.count", - "type": "alias" - } - } - }, - "fielddata": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.node.stats.indices.fielddata.memory.bytes", - "type": "alias" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.node.stats.indices.indexing.index_time.ms", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.node.stats.indices.indexing.index_total.count", - "type": "alias" - }, - "throttle_time_in_millis": { - "path": "elasticsearch.node.stats.indices.indexing.throttle_time.ms", - "type": "alias" - } - } - }, - "query_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.node.stats.indices.query_cache.memory.bytes", - "type": "alias" - } - } - }, - "request_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.node.stats.indices.request_cache.memory.bytes", - "type": "alias" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "path": "elasticsearch.node.stats.indices.search.query_time.ms", - "type": "alias" - }, - "query_total": { - "path": "elasticsearch.node.stats.indices.search.query_total.count", - "type": "alias" - } - } - }, - "segments": { - "properties": { - "count": { - "path": "elasticsearch.node.stats.indices.segments.count", - "type": "alias" - }, - "doc_values_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.doc_values.memory.bytes", - "type": "alias" - }, - "fixed_bit_set_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.fixed_bit_set.memory.bytes", - "type": "alias" - }, - "index_writer_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.index_writer.memory.bytes", - "type": "alias" - }, - "memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.memory.bytes", - "type": "alias" - }, - "norms_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.norms.memory.bytes", - "type": "alias" - }, - "points_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.points.memory.bytes", - "type": "alias" - }, - "stored_fields_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.stored_fields.memory.bytes", - "type": "alias" - }, - "term_vectors_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.term_vectors.memory.bytes", - "type": "alias" - }, - "terms_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.terms.memory.bytes", - "type": "alias" - }, - "version_map_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.version_map.memory.bytes", - "type": "alias" - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "path": "elasticsearch.node.stats.indices.store.size.bytes", - "type": "alias" - } - } - }, - "size_in_bytes": { - "path": "elasticsearch.node.stats.indices.store.size.bytes", - "type": "alias" - } - } - } - } - }, - "jvm": { - "properties": { - "gc": { - "properties": { - "collectors": { - "properties": { - "old": { - "properties": { - "collection_count": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.old.collection.count", - "type": "alias" - }, - "collection_time_in_millis": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.old.collection.ms", - "type": "alias" - } - } - }, - "young": { - "properties": { - "collection_count": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.young.collection.count", - "type": "alias" - }, - "collection_time_in_millis": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.young.collection.ms", - "type": "alias" - } - } - } - } - } - } - }, - "mem": { - "properties": { - "heap_max_in_bytes": { - "path": "elasticsearch.node.stats.jvm.mem.heap.max.bytes", - "type": "alias" - }, - "heap_used_in_bytes": { - "path": "elasticsearch.node.stats.jvm.mem.heap.used.bytes", - "type": "alias" - }, - "heap_used_percent": { - "path": "elasticsearch.node.stats.jvm.mem.heap.used.pct", - "type": "alias" - } - } - } - } - }, - "node_id": { - "path": "elasticsearch.node.id", - "type": "alias" - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpu": { - "properties": { - "cfs_quota_micros": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.cfs.quota.us", - "type": "alias" - }, - "stat": { - "properties": { - "number_of_elapsed_periods": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.stat.elapsed_periods.count", - "type": "alias" - }, - "number_of_times_throttled": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.stat.times_throttled.count", - "type": "alias" - }, - "time_throttled_nanos": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.stat.time_throttled.ns", - "type": "alias" - } - } - } - } - }, - "cpuacct": { - "properties": { - "usage_nanos": { - "path": "elasticsearch.node.stats.os.cgroup.cpuacct.usage.ns", - "type": "alias" - } - } - }, - "memory": { - "properties": { - "control_group": { - "path": "elasticsearch.node.stats.os.cgroup.memory.control_group", - "type": "alias" - }, - "limit_in_bytes": { - "path": "elasticsearch.node.stats.os.cgroup.memory.limit.bytes", - "type": "alias" - }, - "usage_in_bytes": { - "path": "elasticsearch.node.stats.os.cgroup.memory.usage.bytes", - "type": "alias" - } - } - } - } - }, - "cpu": { - "properties": { - "load_average": { - "properties": { - "1m": { - "path": "elasticsearch.node.stats.os.cpu.load_avg.1m", - "type": "alias" - } - } - } - } - } - } - }, - "process": { - "properties": { - "cpu": { - "properties": { - "percent": { - "path": "elasticsearch.node.stats.process.cpu.pct", - "type": "alias" - } - } - } - } - }, - "thread_pool": { - "properties": { - "bulk": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.bulk.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.bulk.rejected.count", - "type": "alias" - } - } - }, - "get": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.get.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.get.rejected.count", - "type": "alias" - } - } - }, - "index": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.index.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.index.rejected.count", - "type": "alias" - } - } - }, - "search": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.search.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.search.rejected.count", - "type": "alias" - } - } - }, - "write": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.write.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.write.rejected.count", - "type": "alias" - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.node.stats.os.cgroup.memory.control_group", - "elasticsearch.node.stats.os.cgroup.memory.limit.bytes", - "elasticsearch.node.stats.os.cgroup.memory.usage.bytes", - "elasticsearch.node.id", - "elasticsearch.node.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.shard-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.shard-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.shard", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "stats": { - "properties": { - "state": { - "properties": { - "state_uuid": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "index": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "shard": { - "properties": { - "number": { - "type": "long" - }, - "primary": { - "type": "boolean" - }, - "relocating_node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "state": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "shard": { - "properties": { - "index": { - "path": "elasticsearch.index.name", - "type": "alias" - }, - "node": { - "path": "elasticsearch.node.id", - "type": "alias" - }, - "primary": { - "path": "elasticsearch.shard.primary", - "type": "alias" - }, - "shard": { - "path": "elasticsearch.shard.number", - "type": "alias" - }, - "state": { - "path": "elasticsearch.shard.state", - "type": "alias" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.shard.state", - "elasticsearch.shard.relocating_node.name", - "elasticsearch.shard.relocating_node.id", - "elasticsearch.shard.source_node.name", - "elasticsearch.shard.source_node.uuid", - "elasticsearch.index.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.cluster.stats.state.state_uuid", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.cluster_actions-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.cluster_actions-*" - ], - "name": "metrics-kibana.stack_monitoring.cluster_actions", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "cluster_actions": { - "properties": { - "overdue": { - "properties": { - "count": { - "type": "long" - }, - "delay": { - "properties": { - "p50": { - "type": "float" - }, - "p99": { - "type": "float" - } - } - } - } - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.cluster_rules-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.cluster_rules-*" - ], - "name": "metrics-kibana.stack_monitoring.cluster_rules", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "cluster_rules": { - "properties": { - "overdue": { - "properties": { - "count": { - "type": "long" - }, - "delay": { - "properties": { - "p50": { - "type": "float" - }, - "p99": { - "type": "float" - } - } - } - } - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.node_actions-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.node_actions-*" - ], - "name": "metrics-kibana.stack_monitoring.node_actions", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node_actions": { - "properties": { - "executions": { - "type": "long" - }, - "failures": { - "type": "long" - }, - "timeouts": { - "type": "long" - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.node_rules-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.node_rules-*" - ], - "name": "metrics-kibana.stack_monitoring.node_rules", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node_rules": { - "properties": { - "executions": { - "type": "long" - }, - "failures": { - "type": "long" - }, - "timeouts": { - "type": "long" - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.stats-*" - ], - "name": "metrics-kibana.stack_monitoring.stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "stats": { - "properties": { - "concurrent_connections": { - "type": "long" - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "index": { - "ignore_above": 1024, - "type": "keyword" - }, - "kibana": { - "properties": { - "status": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "os": { - "properties": { - "distro": { - "ignore_above": 1024, - "type": "keyword" - }, - "distroRelease": { - "ignore_above": 1024, - "type": "keyword" - }, - "load": { - "properties": { - "15m": { - "type": "half_float" - }, - "1m": { - "type": "half_float" - }, - "5m": { - "type": "half_float" - } - } - }, - "memory": { - "properties": { - "free_in_bytes": { - "type": "long" - }, - "total_in_bytes": { - "type": "long" - }, - "used_in_bytes": { - "type": "long" - } - } - }, - "platform": { - "ignore_above": 1024, - "type": "keyword" - }, - "platformRelease": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "process": { - "properties": { - "event_loop_delay": { - "properties": { - "ms": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "size_limit": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "uptime": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "resident_set_size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "uptime": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "request": { - "properties": { - "disconnects": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "response_time": { - "properties": { - "avg": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "max": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "snapshot": { - "type": "boolean" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "transport_address": { - "ignore_above": 1024, - "type": "keyword" - }, - "usage": { - "properties": { - "index": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "kibana_stats": { - "properties": { - "concurrent_connections": { - "path": "kibana.stats.concurrent_connections", - "type": "alias" - }, - "kibana": { - "properties": { - "response_time": { - "properties": { - "max": { - "path": "kibana.stats.response_time.max.ms", - "type": "alias" - } - } - }, - "status": { - "path": "kibana.stats.status", - "type": "alias" - }, - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "os": { - "properties": { - "load": { - "properties": { - "15m": { - "path": "kibana.stats.os.load.15m", - "type": "alias" - }, - "1m": { - "path": "kibana.stats.os.load.1m", - "type": "alias" - }, - "5m": { - "path": "kibana.stats.os.load.5m", - "type": "alias" - } - } - }, - "memory": { - "properties": { - "free_in_bytes": { - "path": "kibana.stats.os.memory.free_in_bytes", - "type": "alias" - } - } - } - } - }, - "process": { - "properties": { - "event_loop_delay": { - "path": "kibana.stats.process.event_loop_delay.ms", - "type": "alias" - }, - "memory": { - "properties": { - "heap": { - "properties": { - "size_limit": { - "path": "kibana.stats.process.memory.heap.size_limit.bytes", - "type": "alias" - } - } - }, - "resident_set_size_in_bytes": { - "path": "kibana.stats.process.memory.resident_set_size.bytes", - "type": "alias" - } - } - }, - "uptime_in_millis": { - "path": "kibana.stats.process.uptime.ms", - "type": "alias" - } - } - }, - "requests": { - "properties": { - "disconnects": { - "path": "kibana.stats.request.disconnects", - "type": "alias" - }, - "total": { - "path": "kibana.stats.request.total", - "type": "alias" - } - } - }, - "response_times": { - "properties": { - "average": { - "path": "kibana.stats.response_time.avg.ms", - "type": "alias" - }, - "max": { - "path": "kibana.stats.response_time.max.ms", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id", - "kibana.stats.kibana.status", - "kibana.stats.usage.index", - "kibana.stats.name", - "kibana.stats.index", - "kibana.stats.host.name", - "kibana.stats.status", - "kibana.stats.transport_address", - "kibana.stats.os.distro", - "kibana.stats.os.distroRelease", - "kibana.stats.os.platform", - "kibana.stats.os.platformRelease" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.status-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.status-*" - ], - "name": "metrics-kibana.stack_monitoring.status", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - } - } - }, - "kibana": { - "properties": { - "status": { - "properties": { - "metrics": { - "properties": { - "concurrent_connections": { - "type": "long" - }, - "requests": { - "properties": { - "disconnects": { - "type": "long" - }, - "total": { - "type": "long" - } - } - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "status": { - "properties": { - "overall": { - "properties": { - "state": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.name", - "service.version", - "service.type", - "service.address", - "ecs.version", - "error.message", - "kibana.status.name", - "kibana.status.status.overall.state" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-logstash.stack_monitoring.node-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-logstash.stack_monitoring.node-*" - ], - "name": "metrics-logstash.stack_monitoring.node", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "logstash.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "logstash": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "jvm": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "state": { - "properties": { - "pipeline": { - "properties": { - "batch_size": { - "type": "long" - }, - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "representation": { - "properties": { - "graph": { - "properties": { - "edges": { - "type": "object" - }, - "vertices": { - "type": "object" - } - } - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "workers": { - "type": "long" - } - } - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "logstash_state": { - "properties": { - "pipeline": { - "properties": { - "hash": { - "path": "logstash.node.state.pipeline.hash", - "type": "alias" - }, - "id": { - "path": "logstash.node.state.pipeline.id", - "type": "alias" - } - } - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "hostname": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.hostname", - "service.id", - "service.type", - "service.version", - "service.address", - "service.name", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "logstash.cluster.id", - "logstash.elasticsearch.cluster.id", - "logstash.node.jvm.version", - "logstash.node.host", - "logstash.node.version", - "logstash.node.id", - "logstash.node.state.pipeline.id", - "logstash.node.state.pipeline.hash", - "logstash.node.state.pipeline.ephemeral_id", - "logstash.node.state.pipeline.representation.hash", - "logstash.node.state.pipeline.representation.type", - "logstash.node.state.pipeline.representation.version" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-logstash.stack_monitoring.node_stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-logstash.stack_monitoring.node_stats-*" - ], - "name": "metrics-logstash.stack_monitoring.node_stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "logstash.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "logstash": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "state": { - "properties": { - "pipeline": { - "properties": { - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "stats": { - "properties": { - "events": { - "properties": { - "duration_in_millis": { - "type": "long" - }, - "filtered": { - "type": "long" - }, - "in": { - "type": "long" - }, - "out": { - "type": "long" - } - } - }, - "jvm": { - "properties": { - "gc": { - "properties": { - "collectors": { - "properties": { - "old": { - "properties": { - "collection_count": { - "type": "long" - }, - "collection_time_in_millis": { - "type": "long" - } - } - }, - "young": { - "properties": { - "collection_count": { - "type": "long" - }, - "collection_time_in_millis": { - "type": "long" - } - } - } - } - } - } - }, - "mem": { - "properties": { - "heap_max_in_bytes": { - "type": "long" - }, - "heap_used_in_bytes": { - "type": "long" - }, - "heap_used_percent": { - "type": "long" - } - } - }, - "uptime_in_millis": { - "type": "long" - } - } - }, - "logstash": { - "properties": { - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "http_address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "pipeline": { - "properties": { - "batch_size": { - "type": "long" - }, - "workers": { - "type": "long" - } - } - }, - "snapshot": { - "type": "boolean" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpu": { - "properties": { - "cfs_quota_micros": { - "type": "long" - }, - "control_group": { - "type": "text" - }, - "stat": { - "type": "object" - } - } - }, - "cpuacct": { - "type": "object" - } - } - }, - "cpu": { - "properties": { - "load_average": { - "properties": { - "15m": { - "type": "half_float" - }, - "1m": { - "type": "half_float" - }, - "5m": { - "type": "half_float" - } - } - }, - "percent": { - "type": "double" - } - } - } - } - }, - "pipelines": { - "properties": { - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "events": { - "properties": { - "duration_in_millis": { - "type": "long" - }, - "filtered": { - "type": "long" - }, - "in": { - "type": "long" - }, - "out": { - "type": "long" - }, - "queue_push_duration_in_millis": { - "type": "long" - } - } - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "queue": { - "properties": { - "events_count": { - "type": "long" - }, - "max_queue_size_in_bytes": { - "type": "long" - }, - "queue_size_in_bytes": { - "type": "long" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "reloads": { - "properties": { - "failures": { - "type": "long" - }, - "successes": { - "type": "long" - } - } - }, - "vertices": { - "properties": { - "duration_in_millis": { - "type": "long" - }, - "events_in": { - "type": "long" - }, - "events_out": { - "type": "long" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "long_counters": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "value": { - "type": "long" - } - }, - "type": "nested" - }, - "pipeline_ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "queue_push_duration_in_millis": { - "type": "long" - } - }, - "type": "nested" - } - }, - "type": "nested" - }, - "process": { - "properties": { - "cpu": { - "properties": { - "percent": { - "type": "double" - } - } - }, - "max_file_descriptors": { - "type": "long" - }, - "open_file_descriptors": { - "type": "long" - } - } - }, - "queue": { - "properties": { - "events_count": { - "type": "long" - } - } - }, - "reloads": { - "properties": { - "failures": { - "type": "long" - }, - "successes": { - "type": "long" - } - } - }, - "timestamp": { - "type": "date" - } - } - } - } - } - } - }, - "logstash_stats": { - "properties": { - "events": { - "properties": { - "duration_in_millis": { - "path": "logstash.node.stats.events.duration_in_millis", - "type": "alias" - }, - "in": { - "path": "logstash.node.stats.events.in", - "type": "alias" - }, - "out": { - "path": "logstash.node.stats.events.out", - "type": "alias" - } - } - }, - "jvm": { - "properties": { - "mem": { - "properties": { - "heap_max_in_bytes": { - "path": "logstash.node.stats.jvm.mem.heap_max_in_bytes", - "type": "alias" - }, - "heap_used_in_bytes": { - "path": "logstash.node.stats.jvm.mem.heap_used_in_bytes", - "type": "alias" - } - } - }, - "uptime_in_millis": { - "path": "logstash.node.stats.jvm.uptime_in_millis", - "type": "alias" - } - } - }, - "logstash": { - "properties": { - "uuid": { - "path": "logstash.node.stats.logstash.uuid", - "type": "alias" - }, - "version": { - "path": "logstash.node.stats.logstash.version", - "type": "alias" - } - } - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpuacct": { - "type": "object" - } - } - }, - "cpu": { - "properties": { - "load_average": { - "properties": { - "15m": { - "path": "logstash.node.stats.os.cpu.load_average.15m", - "type": "alias" - }, - "1m": { - "path": "logstash.node.stats.os.cpu.load_average.1m", - "type": "alias" - }, - "5m": { - "path": "logstash.node.stats.os.cpu.load_average.5m", - "type": "alias" - } - } - }, - "stat": { - "type": "object" - } - } - } - } - }, - "pipelines": { - "type": "nested" - }, - "process": { - "properties": { - "cpu": { - "properties": { - "percent": { - "path": "logstash.node.stats.process.cpu.percent", - "type": "alias" - } - } - } - } - }, - "queue": { - "properties": { - "events_count": { - "path": "logstash.node.stats.queue.events_count", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "hostname": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.hostname", - "service.id", - "service.type", - "service.version", - "service.address", - "service.name", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "logstash.elasticsearch.cluster.id", - "logstash.node.state.pipeline.id", - "logstash.node.state.pipeline.hash", - "logstash.node.stats.logstash.uuid", - "logstash.node.stats.logstash.version", - "logstash.node.stats.logstash.ephemeral_id", - "logstash.node.stats.logstash.host", - "logstash.node.stats.logstash.http_address", - "logstash.node.stats.logstash.name", - "logstash.node.stats.logstash.status", - "logstash.node.stats.os.cgroup.cpuacct.control_group", - "logstash.node.stats.os.cgroup.cpu.control_group", - "logstash.node.stats.pipelines.id", - "logstash.node.stats.pipelines.hash", - "logstash.node.stats.pipelines.ephemeral_id", - "logstash.node.stats.pipelines.queue.type", - "logstash.node.stats.pipelines.vertices.id", - "logstash.node.stats.pipelines.vertices.long_counters.name", - "logstash.node.stats.pipelines.vertices.pipeline_ephemeral_id", - "logstash.cluster.id" - ] - } - } - } - } - } - } -} diff --git a/x-pack/test/functional/es_archives/monitoring/singlecluster_three_nodes_shard_relocation_package/data.json.gz b/x-pack/test/functional/es_archives/monitoring/singlecluster_three_nodes_shard_relocation_package/data.json.gz deleted file mode 100644 index 87a50015dc5f7..0000000000000 Binary files a/x-pack/test/functional/es_archives/monitoring/singlecluster_three_nodes_shard_relocation_package/data.json.gz and /dev/null differ diff --git a/x-pack/test/functional/es_archives/monitoring/singlecluster_three_nodes_shard_relocation_package/mappings.json b/x-pack/test/functional/es_archives/monitoring/singlecluster_three_nodes_shard_relocation_package/mappings.json deleted file mode 100644 index 5684702273ac7..0000000000000 --- a/x-pack/test/functional/es_archives/monitoring/singlecluster_three_nodes_shard_relocation_package/mappings.json +++ /dev/null @@ -1,7138 +0,0 @@ -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.cluster_stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.cluster_stats-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.cluster_stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_state": { - "properties": { - "master_node": { - "path": "elasticsearch.cluster.stats.state.master_node", - "type": "alias" - }, - "nodes_hash": { - "path": "elasticsearch.cluster.stats.state.nodes_hash", - "type": "alias" - }, - "state_uuid": { - "path": "elasticsearch.cluster.stats.state.state_uuid", - "type": "alias" - }, - "status": { - "path": "elasticsearch.cluster.stats.status", - "type": "alias" - }, - "version": { - "path": "elasticsearch.cluster.stats.state.version", - "type": "alias" - } - } - }, - "cluster_stats": { - "properties": { - "indices": { - "properties": { - "count": { - "path": "elasticsearch.cluster.stats.indices.total", - "type": "alias" - }, - "shards": { - "properties": { - "total": { - "path": "elasticsearch.cluster.stats.indices.shards.count", - "type": "alias" - } - } - } - } - }, - "nodes": { - "properties": { - "count": { - "properties": { - "total": { - "path": "elasticsearch.cluster.stats.nodes.count", - "type": "alias" - } - } - }, - "jvm": { - "properties": { - "max_uptime_in_millis": { - "path": "elasticsearch.cluster.stats.nodes.jvm.max_uptime.ms", - "type": "alias" - }, - "mem": { - "properties": { - "heap_max_in_bytes": { - "path": "elasticsearch.cluster.stats.nodes.jvm.memory.heap.max.bytes", - "type": "alias" - }, - "heap_used_in_bytes": { - "path": "elasticsearch.cluster.stats.nodes.jvm.memory.heap.used.bytes", - "type": "alias" - } - } - } - } - } - } - } - } - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "stats": { - "properties": { - "indices": { - "properties": { - "docs": { - "properties": { - "total": { - "type": "long" - } - } - }, - "fielddata": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "shards": { - "properties": { - "count": { - "type": "long" - }, - "primaries": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "total": { - "type": "long" - } - } - }, - "license": { - "properties": { - "cluster_needs_tls": { - "type": "boolean" - }, - "expiry_date": { - "type": "date" - }, - "expiry_date_in_millis": { - "type": "long" - }, - "issue_date": { - "type": "date" - }, - "issue_date_in_millis": { - "type": "long" - }, - "issued_to": { - "ignore_above": 1024, - "type": "keyword" - }, - "issuer": { - "ignore_above": 1024, - "type": "keyword" - }, - "max_nodes": { - "type": "long" - }, - "start_date_in_millis": { - "type": "long" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "uid": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "nodes": { - "properties": { - "count": { - "type": "long" - }, - "data": { - "type": "long" - }, - "fs": { - "properties": { - "available": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "jvm": { - "properties": { - "max_uptime": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "master": { - "type": "long" - }, - "stats": { - "properties": { - "data": { - "type": "long" - } - } - }, - "versions": { - "type": "text" - } - } - }, - "stack": { - "properties": { - "apm": { - "properties": { - "found": { - "type": "boolean" - } - } - }, - "xpack": { - "properties": { - "ccr": { - "properties": { - "available": { - "type": "boolean" - }, - "enabled": { - "type": "boolean" - } - } - } - } - } - } - }, - "state": { - "properties": { - "master_node": { - "ignore_above": 1024, - "type": "keyword" - }, - "nodes": { - "type": "flattened" - }, - "nodes_hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "state_uuid": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "license": { - "properties": { - "status": { - "path": "elasticsearch.cluster.stats.license.status", - "type": "alias" - }, - "type": { - "path": "elasticsearch.cluster.stats.license.type", - "type": "alias" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "stack_stats": { - "properties": { - "apm": { - "properties": { - "found": { - "path": "elasticsearch.cluster.stats.stack.apm.found", - "type": "alias" - } - } - }, - "xpack": { - "properties": { - "ccr": { - "properties": { - "available": { - "path": "elasticsearch.cluster.stats.stack.xpack.ccr.available", - "type": "alias" - }, - "enabled": { - "path": "elasticsearch.cluster.stats.stack.xpack.ccr.enabled", - "type": "alias" - } - } - } - } - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.cluster.stats.version", - "elasticsearch.cluster.stats.state.nodes_hash", - "elasticsearch.cluster.stats.state.master_node", - "elasticsearch.cluster.stats.state.version", - "elasticsearch.cluster.stats.state.state_uuid", - "elasticsearch.cluster.stats.status", - "elasticsearch.cluster.stats.nodes.versions", - "elasticsearch.cluster.stats.license.issued_to", - "elasticsearch.cluster.stats.license.issuer", - "elasticsearch.cluster.stats.license.status", - "elasticsearch.cluster.stats.license.type", - "elasticsearch.cluster.stats.license.uid", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.version", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.enrich-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.enrich-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.enrich", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "enrich": { - "properties": { - "executed_searches": { - "properties": { - "total": { - "type": "long" - } - } - }, - "executing_policy": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "task": { - "properties": { - "action": { - "ignore_above": 1024, - "type": "keyword" - }, - "cancellable": { - "type": "boolean" - }, - "id": { - "type": "long" - }, - "parent_task_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "task": { - "ignore_above": 1024, - "type": "keyword" - }, - "time": { - "properties": { - "running": { - "properties": { - "nano": { - "type": "long" - } - } - }, - "start": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "queue": { - "properties": { - "size": { - "type": "long" - } - } - }, - "remote_requests": { - "properties": { - "current": { - "type": "long" - }, - "total": { - "type": "long" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.enrich.executing_policy.name", - "elasticsearch.enrich.executing_policy.task.task", - "elasticsearch.enrich.executing_policy.task.action", - "elasticsearch.enrich.executing_policy.task.parent_task_id", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.index-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.index-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.index", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "index": { - "properties": { - "created": { - "type": "long" - }, - "hidden": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "primaries": { - "properties": { - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "type": "long" - }, - "index_total": { - "type": "long" - }, - "throttle_time_in_millis": { - "type": "long" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "type": "long" - } - } - }, - "query_cache": { - "properties": { - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "refresh": { - "properties": { - "external_total_time_in_millis": { - "type": "long" - }, - "total_time_in_millis": { - "type": "long" - } - } - }, - "request_cache": { - "properties": { - "evictions": { - "type": "long" - }, - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "type": "long" - }, - "query_total": { - "type": "long" - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "doc_values_memory_in_bytes": { - "type": "long" - }, - "fixed_bit_set_memory_in_bytes": { - "type": "long" - }, - "index_writer_memory_in_bytes": { - "type": "long" - }, - "memory_in_bytes": { - "type": "long" - }, - "norms_memory_in_bytes": { - "type": "long" - }, - "points_memory_in_bytes": { - "type": "long" - }, - "stored_fields_memory_in_bytes": { - "type": "long" - }, - "term_vectors_memory_in_bytes": { - "type": "long" - }, - "terms_memory_in_bytes": { - "type": "long" - }, - "version_map_memory_in_bytes": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "type": "long" - } - } - } - } - }, - "shards": { - "properties": { - "primaries": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "total": { - "properties": { - "bulk": { - "properties": { - "avg_size_in_bytes": { - "type": "long" - }, - "avg_time_in_millis": { - "type": "long" - }, - "total_operations": { - "type": "long" - }, - "total_size_in_bytes": { - "type": "long" - }, - "total_time_in_millis": { - "type": "long" - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "fielddata": { - "properties": { - "evictions": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "type": "long" - }, - "index_total": { - "type": "long" - }, - "throttle_time_in_millis": { - "type": "long" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "type": "long" - } - } - }, - "query_cache": { - "properties": { - "evictions": { - "type": "long" - }, - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "refresh": { - "properties": { - "external_total_time_in_millis": { - "type": "long" - }, - "total_time_in_millis": { - "type": "long" - } - } - }, - "request_cache": { - "properties": { - "evictions": { - "type": "long" - }, - "hit_count": { - "type": "long" - }, - "memory_size_in_bytes": { - "type": "long" - }, - "miss_count": { - "type": "long" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "type": "long" - }, - "query_total": { - "type": "long" - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "doc_values_memory_in_bytes": { - "type": "long" - }, - "fixed_bit_set_memory_in_bytes": { - "type": "long" - }, - "index_writer_memory_in_bytes": { - "type": "long" - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "memory_in_bytes": { - "type": "long" - }, - "norms_memory_in_bytes": { - "type": "long" - }, - "points_memory_in_bytes": { - "type": "long" - }, - "stored_fields_memory_in_bytes": { - "type": "long" - }, - "term_vectors_memory_in_bytes": { - "type": "long" - }, - "terms_memory_in_bytes": { - "type": "long" - }, - "version_map_memory_in_bytes": { - "type": "long" - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "size_in_bytes": { - "type": "long" - } - } - } - } - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "index_stats": { - "properties": { - "index": { - "path": "elasticsearch.index.name", - "type": "alias" - }, - "primaries": { - "properties": { - "docs": { - "properties": { - "count": { - "path": "elasticsearch.index.primaries.docs.count", - "type": "alias" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.index.primaries.indexing.index_time_in_millis", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.index.primaries.indexing.index_total", - "type": "alias" - }, - "throttle_time_in_millis": { - "path": "elasticsearch.index.primaries.indexing.throttle_time_in_millis", - "type": "alias" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "path": "elasticsearch.index.primaries.merges.total_size_in_bytes", - "type": "alias" - } - } - }, - "refresh": { - "properties": { - "total_time_in_millis": { - "path": "elasticsearch.index.primaries.refresh.total_time_in_millis", - "type": "alias" - } - } - }, - "segments": { - "properties": { - "count": { - "path": "elasticsearch.index.primaries.segments.count", - "type": "alias" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "path": "elasticsearch.index.primaries.store.size_in_bytes", - "type": "alias" - } - } - } - } - }, - "total": { - "properties": { - "fielddata": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.index.total.fielddata.memory_size_in_bytes", - "type": "alias" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.index.total.indexing.index_time_in_millis", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.index.total.indexing.index_total", - "type": "alias" - }, - "throttle_time_in_millis": { - "path": "elasticsearch.index.total.indexing.throttle_time_in_millis", - "type": "alias" - } - } - }, - "merges": { - "properties": { - "total_size_in_bytes": { - "path": "elasticsearch.index.total.merges.total_size_in_bytes", - "type": "alias" - } - } - }, - "query_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.index.total.query_cache.memory_size_in_bytes", - "type": "alias" - } - } - }, - "refresh": { - "properties": { - "total_time_in_millis": { - "path": "elasticsearch.index.total.refresh.total_time_in_millis", - "type": "alias" - } - } - }, - "request_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.index.total.request_cache.memory_size_in_bytes", - "type": "alias" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "path": "elasticsearch.index.total.search.query_time_in_millis", - "type": "alias" - }, - "query_total": { - "path": "elasticsearch.index.total.search.query_total", - "type": "alias" - } - } - }, - "segments": { - "properties": { - "count": { - "path": "elasticsearch.index.total.segments.count", - "type": "alias" - }, - "doc_values_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.doc_values_memory_in_bytes", - "type": "alias" - }, - "fixed_bit_set_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.fixed_bit_set_memory_in_bytes", - "type": "alias" - }, - "index_writer_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.index_writer_memory_in_bytes", - "type": "alias" - }, - "memory_in_bytes": { - "path": "elasticsearch.index.total.segments.memory_in_bytes", - "type": "alias" - }, - "norms_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.norms_memory_in_bytes", - "type": "alias" - }, - "points_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.points_memory_in_bytes", - "type": "alias" - }, - "stored_fields_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.stored_fields_memory_in_bytes", - "type": "alias" - }, - "term_vectors_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.term_vectors_memory_in_bytes", - "type": "alias" - }, - "terms_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.terms_memory_in_bytes", - "type": "alias" - }, - "version_map_memory_in_bytes": { - "path": "elasticsearch.index.total.segments.version_map_memory_in_bytes", - "type": "alias" - } - } - }, - "store": { - "properties": { - "size_in_bytes": { - "path": "elasticsearch.index.total.store.size_in_bytes", - "type": "alias" - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.index.uuid", - "elasticsearch.index.status", - "elasticsearch.index.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.index_recovery-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.index_recovery-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.index_recovery", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "index": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "recovery": { - "properties": { - "id": { - "type": "long" - }, - "index": { - "properties": { - "files": { - "properties": { - "percent": { - "ignore_above": 1024, - "type": "keyword" - }, - "recovered": { - "type": "long" - }, - "reused": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "size": { - "properties": { - "recovered_in_bytes": { - "type": "long" - }, - "reused_in_bytes": { - "type": "long" - }, - "total_in_bytes": { - "type": "long" - } - } - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "primary": { - "type": "boolean" - }, - "source": { - "properties": { - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "transport_address": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "stage": { - "ignore_above": 1024, - "type": "keyword" - }, - "start_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "stop_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "target": { - "properties": { - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "transport_address": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "total_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "translog": { - "properties": { - "percent": { - "ignore_above": 1024, - "type": "keyword" - }, - "total": { - "type": "long" - }, - "total_on_start": { - "type": "long" - } - } - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "verify_index": { - "properties": { - "check_index_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "total_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "index_recovery": { - "properties": { - "shards": { - "properties": { - "start_time_in_millis": { - "path": "elasticsearch.index.recovery.start_time.ms", - "type": "alias" - }, - "stop_time_in_millis": { - "path": "elasticsearch.index.recovery.stop_time.ms", - "type": "alias" - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.index.name", - "elasticsearch.index.recovery.index.files.percent", - "elasticsearch.index.recovery.name", - "elasticsearch.index.recovery.type", - "elasticsearch.index.recovery.stage", - "elasticsearch.index.recovery.translog.percent", - "elasticsearch.index.recovery.target.transport_address", - "elasticsearch.index.recovery.target.id", - "elasticsearch.index.recovery.target.host", - "elasticsearch.index.recovery.target.name", - "elasticsearch.index.recovery.source.transport_address", - "elasticsearch.index.recovery.source.id", - "elasticsearch.index.recovery.source.host", - "elasticsearch.index.recovery.source.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.index_summary-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.index_summary-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.index_summary", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "index": { - "properties": { - "summary": { - "properties": { - "primaries": { - "properties": { - "bulk": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - }, - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "time": { - "properties": { - "avg": { - "properties": { - "bytes": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - }, - "count": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "search": { - "properties": { - "query": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "total": { - "properties": { - "bulk": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - }, - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "time": { - "properties": { - "avg": { - "properties": { - "bytes": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "indexing": { - "properties": { - "index": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "is_throttled": { - "type": "boolean" - }, - "throttle_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "search": { - "properties": { - "query": { - "properties": { - "count": { - "type": "long" - }, - "time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "indices_stats": { - "properties": { - "_all": { - "properties": { - "primaries": { - "properties": { - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.index.summary.primaries.indexing.index.time.ms", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.index.summary.primaries.indexing.index.count", - "type": "alias" - } - } - } - } - }, - "total": { - "properties": { - "indexing": { - "properties": { - "index_total": { - "path": "elasticsearch.index.summary.total.indexing.index.count", - "type": "alias" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "path": "elasticsearch.index.summary.total.search.query.time.ms", - "type": "alias" - }, - "query_total": { - "path": "elasticsearch.index.summary.total.search.query.count", - "type": "alias" - } - } - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.node-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.node-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.node", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "jvm": { - "properties": { - "memory": { - "properties": { - "heap": { - "properties": { - "init": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "nonheap": { - "properties": { - "init": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "process": { - "properties": { - "mlockall": { - "type": "boolean" - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.node.version", - "elasticsearch.node.jvm.version", - "elasticsearch.node.id", - "elasticsearch.node.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.node_stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.node_stats-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.node_stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "stats": { - "properties": { - "fs": { - "properties": { - "io_stats": { - "properties": { - "total": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - }, - "read": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "write": { - "properties": { - "operations": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "summary": { - "properties": { - "available": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "free": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "total": { - "properties": { - "available_in_bytes": { - "type": "long" - }, - "total_in_bytes": { - "type": "long" - } - } - } - } - }, - "indexing_pressure": { - "properties": { - "memory": { - "properties": { - "current": { - "properties": { - "all": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "combined_coordinating_and_primary": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "coordinating": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "primary": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "replica": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "limit_in_bytes": { - "type": "long" - }, - "total": { - "properties": { - "all": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "combined_coordinating_and_primary": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "coordinating": { - "properties": { - "bytes": { - "type": "long" - }, - "rejections": { - "type": "long" - } - } - }, - "primary": { - "properties": { - "bytes": { - "type": "long" - }, - "rejections": { - "type": "long" - } - } - }, - "replica": { - "properties": { - "bytes": { - "type": "long" - }, - "rejections": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "indices": { - "properties": { - "bulk": { - "properties": { - "avg_size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "avg_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "operations": { - "properties": { - "total": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "total_size": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "docs": { - "properties": { - "count": { - "type": "long" - }, - "deleted": { - "type": "long" - } - } - }, - "fielddata": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "indexing": { - "properties": { - "index_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "index_total": { - "properties": { - "count": { - "type": "long" - } - } - }, - "throttle_time": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "query_cache": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "request_cache": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "search": { - "properties": { - "query_time": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "query_total": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "segments": { - "properties": { - "count": { - "type": "long" - }, - "doc_values": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "fixed_bit_set": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "index_writer": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "norms": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "points": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "stored_fields": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "term_vectors": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "terms": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "version_map": { - "properties": { - "memory": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - }, - "ingest": { - "properties": { - "total": { - "properties": { - "count": { - "type": "long" - }, - "current": { - "type": "long" - }, - "failed": { - "type": "long" - }, - "time_in_millis": { - "type": "long" - } - } - } - } - }, - "jvm": { - "properties": { - "gc": { - "properties": { - "collectors": { - "properties": { - "old": { - "properties": { - "collection": { - "properties": { - "count": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - } - } - }, - "young": { - "properties": { - "collection": { - "properties": { - "count": { - "type": "long" - }, - "ms": { - "type": "long" - } - } - } - } - } - } - } - } - }, - "mem": { - "properties": { - "heap": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - }, - "pct": { - "type": "double" - } - } - } - } - }, - "pools": { - "properties": { - "old": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak_max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "survivor": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak_max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "young": { - "properties": { - "max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "peak_max": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - } - } - } - } - } - } - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpu": { - "properties": { - "cfs": { - "properties": { - "quota": { - "properties": { - "us": { - "type": "long" - } - } - } - } - }, - "stat": { - "properties": { - "elapsed_periods": { - "properties": { - "count": { - "type": "long" - } - } - }, - "time_throttled": { - "properties": { - "ns": { - "type": "long" - } - } - }, - "times_throttled": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - }, - "cpuacct": { - "properties": { - "usage": { - "properties": { - "ns": { - "type": "long" - } - } - } - } - }, - "memory": { - "properties": { - "control_group": { - "ignore_above": 1024, - "type": "keyword" - }, - "limit": { - "properties": { - "bytes": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "usage": { - "properties": { - "bytes": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "cpu": { - "properties": { - "load_avg": { - "properties": { - "1m": { - "type": "half_float" - } - } - } - } - } - } - }, - "process": { - "properties": { - "cpu": { - "properties": { - "pct": { - "type": "double" - } - } - } - } - }, - "thread_pool": { - "properties": { - "bulk": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "get": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "index": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "search": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, - "write": { - "properties": { - "queue": { - "properties": { - "count": { - "type": "long" - } - } - }, - "rejected": { - "properties": { - "count": { - "type": "long" - } - } - } - } - } - } - } - } - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "node_stats": { - "properties": { - "fs": { - "properties": { - "io_stats": { - "properties": { - "total": { - "properties": { - "operations": { - "path": "elasticsearch.node.stats.fs.io_stats.total.operations.count", - "type": "alias" - }, - "read_operations": { - "path": "elasticsearch.node.stats.fs.io_stats.total.read.operations.count", - "type": "alias" - }, - "write_operations": { - "path": "elasticsearch.node.stats.fs.io_stats.total.write.operations.count", - "type": "alias" - } - } - } - } - }, - "summary": { - "properties": { - "available": { - "properties": { - "bytes": { - "path": "elasticsearch.node.stats.fs.summary.available.bytes", - "type": "alias" - } - } - }, - "total": { - "properties": { - "bytes": { - "path": "elasticsearch.node.stats.fs.summary.total.bytes", - "type": "alias" - } - } - } - } - }, - "total": { - "properties": { - "available_in_bytes": { - "path": "elasticsearch.node.stats.fs.summary.available.bytes", - "type": "alias" - }, - "total_in_bytes": { - "path": "elasticsearch.node.stats.fs.summary.total.bytes", - "type": "alias" - } - } - } - } - }, - "indices": { - "properties": { - "docs": { - "properties": { - "count": { - "path": "elasticsearch.node.stats.indices.docs.count", - "type": "alias" - } - } - }, - "fielddata": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.node.stats.indices.fielddata.memory.bytes", - "type": "alias" - } - } - }, - "indexing": { - "properties": { - "index_time_in_millis": { - "path": "elasticsearch.node.stats.indices.indexing.index_time.ms", - "type": "alias" - }, - "index_total": { - "path": "elasticsearch.node.stats.indices.indexing.index_total.count", - "type": "alias" - }, - "throttle_time_in_millis": { - "path": "elasticsearch.node.stats.indices.indexing.throttle_time.ms", - "type": "alias" - } - } - }, - "query_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.node.stats.indices.query_cache.memory.bytes", - "type": "alias" - } - } - }, - "request_cache": { - "properties": { - "memory_size_in_bytes": { - "path": "elasticsearch.node.stats.indices.request_cache.memory.bytes", - "type": "alias" - } - } - }, - "search": { - "properties": { - "query_time_in_millis": { - "path": "elasticsearch.node.stats.indices.search.query_time.ms", - "type": "alias" - }, - "query_total": { - "path": "elasticsearch.node.stats.indices.search.query_total.count", - "type": "alias" - } - } - }, - "segments": { - "properties": { - "count": { - "path": "elasticsearch.node.stats.indices.segments.count", - "type": "alias" - }, - "doc_values_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.doc_values.memory.bytes", - "type": "alias" - }, - "fixed_bit_set_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.fixed_bit_set.memory.bytes", - "type": "alias" - }, - "index_writer_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.index_writer.memory.bytes", - "type": "alias" - }, - "memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.memory.bytes", - "type": "alias" - }, - "norms_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.norms.memory.bytes", - "type": "alias" - }, - "points_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.points.memory.bytes", - "type": "alias" - }, - "stored_fields_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.stored_fields.memory.bytes", - "type": "alias" - }, - "term_vectors_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.term_vectors.memory.bytes", - "type": "alias" - }, - "terms_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.terms.memory.bytes", - "type": "alias" - }, - "version_map_memory_in_bytes": { - "path": "elasticsearch.node.stats.indices.segments.version_map.memory.bytes", - "type": "alias" - } - } - }, - "store": { - "properties": { - "size": { - "properties": { - "bytes": { - "path": "elasticsearch.node.stats.indices.store.size.bytes", - "type": "alias" - } - } - }, - "size_in_bytes": { - "path": "elasticsearch.node.stats.indices.store.size.bytes", - "type": "alias" - } - } - } - } - }, - "jvm": { - "properties": { - "gc": { - "properties": { - "collectors": { - "properties": { - "old": { - "properties": { - "collection_count": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.old.collection.count", - "type": "alias" - }, - "collection_time_in_millis": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.old.collection.ms", - "type": "alias" - } - } - }, - "young": { - "properties": { - "collection_count": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.young.collection.count", - "type": "alias" - }, - "collection_time_in_millis": { - "path": "elasticsearch.node.stats.jvm.gc.collectors.young.collection.ms", - "type": "alias" - } - } - } - } - } - } - }, - "mem": { - "properties": { - "heap_max_in_bytes": { - "path": "elasticsearch.node.stats.jvm.mem.heap.max.bytes", - "type": "alias" - }, - "heap_used_in_bytes": { - "path": "elasticsearch.node.stats.jvm.mem.heap.used.bytes", - "type": "alias" - }, - "heap_used_percent": { - "path": "elasticsearch.node.stats.jvm.mem.heap.used.pct", - "type": "alias" - } - } - } - } - }, - "node_id": { - "path": "elasticsearch.node.id", - "type": "alias" - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpu": { - "properties": { - "cfs_quota_micros": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.cfs.quota.us", - "type": "alias" - }, - "stat": { - "properties": { - "number_of_elapsed_periods": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.stat.elapsed_periods.count", - "type": "alias" - }, - "number_of_times_throttled": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.stat.times_throttled.count", - "type": "alias" - }, - "time_throttled_nanos": { - "path": "elasticsearch.node.stats.os.cgroup.cpu.stat.time_throttled.ns", - "type": "alias" - } - } - } - } - }, - "cpuacct": { - "properties": { - "usage_nanos": { - "path": "elasticsearch.node.stats.os.cgroup.cpuacct.usage.ns", - "type": "alias" - } - } - }, - "memory": { - "properties": { - "control_group": { - "path": "elasticsearch.node.stats.os.cgroup.memory.control_group", - "type": "alias" - }, - "limit_in_bytes": { - "path": "elasticsearch.node.stats.os.cgroup.memory.limit.bytes", - "type": "alias" - }, - "usage_in_bytes": { - "path": "elasticsearch.node.stats.os.cgroup.memory.usage.bytes", - "type": "alias" - } - } - } - } - }, - "cpu": { - "properties": { - "load_average": { - "properties": { - "1m": { - "path": "elasticsearch.node.stats.os.cpu.load_avg.1m", - "type": "alias" - } - } - } - } - } - } - }, - "process": { - "properties": { - "cpu": { - "properties": { - "percent": { - "path": "elasticsearch.node.stats.process.cpu.pct", - "type": "alias" - } - } - } - } - }, - "thread_pool": { - "properties": { - "bulk": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.bulk.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.bulk.rejected.count", - "type": "alias" - } - } - }, - "get": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.get.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.get.rejected.count", - "type": "alias" - } - } - }, - "index": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.index.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.index.rejected.count", - "type": "alias" - } - } - }, - "search": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.search.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.search.rejected.count", - "type": "alias" - } - } - }, - "write": { - "properties": { - "queue": { - "path": "elasticsearch.node.stats.thread_pool.write.queue.count", - "type": "alias" - }, - "rejected": { - "path": "elasticsearch.node.stats.thread_pool.write.rejected.count", - "type": "alias" - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.node.stats.os.cgroup.memory.control_group", - "elasticsearch.node.stats.os.cgroup.memory.limit.bytes", - "elasticsearch.node.stats.os.cgroup.memory.usage.bytes", - "elasticsearch.node.id", - "elasticsearch.node.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-elasticsearch.stack_monitoring.shard-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-elasticsearch.stack_monitoring.shard-*" - ], - "name": "metrics-elasticsearch.stack_monitoring.shard", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "elasticsearch" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "state": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "stats": { - "properties": { - "state": { - "properties": { - "state_uuid": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "index": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "master": { - "type": "boolean" - }, - "mlockall": { - "type": "boolean" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "shard": { - "properties": { - "number": { - "type": "long" - }, - "primary": { - "type": "boolean" - }, - "relocating_node": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source_node": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "state": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "shard": { - "properties": { - "index": { - "path": "elasticsearch.index.name", - "type": "alias" - }, - "node": { - "path": "elasticsearch.node.id", - "type": "alias" - }, - "primary": { - "path": "elasticsearch.shard.primary", - "type": "alias" - }, - "shard": { - "path": "elasticsearch.shard.number", - "type": "alias" - }, - "state": { - "path": "elasticsearch.shard.state", - "type": "alias" - } - } - }, - "source_node": { - "properties": { - "name": { - "path": "elasticsearch.node.name", - "type": "alias" - }, - "uuid": { - "path": "elasticsearch.node.id", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "service.address", - "service.type", - "service.name", - "error.message", - "elasticsearch.shard.state", - "elasticsearch.shard.relocating_node.name", - "elasticsearch.shard.relocating_node.id", - "elasticsearch.shard.source_node.name", - "elasticsearch.shard.source_node.uuid", - "elasticsearch.index.name", - "elasticsearch.cluster.name", - "elasticsearch.cluster.id", - "elasticsearch.cluster.state.id", - "elasticsearch.cluster.stats.state.state_uuid", - "elasticsearch.node.id", - "elasticsearch.node.name" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.cluster_actions-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.cluster_actions-*" - ], - "name": "metrics-kibana.stack_monitoring.cluster_actions", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "cluster_actions": { - "properties": { - "overdue": { - "properties": { - "count": { - "type": "long" - }, - "delay": { - "properties": { - "p50": { - "type": "float" - }, - "p99": { - "type": "float" - } - } - } - } - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.cluster_rules-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.cluster_rules-*" - ], - "name": "metrics-kibana.stack_monitoring.cluster_rules", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "cluster_rules": { - "properties": { - "overdue": { - "properties": { - "count": { - "type": "long" - }, - "delay": { - "properties": { - "p50": { - "type": "float" - }, - "p99": { - "type": "float" - } - } - } - } - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.node_actions-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.node_actions-*" - ], - "name": "metrics-kibana.stack_monitoring.node_actions", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node_actions": { - "properties": { - "executions": { - "type": "long" - }, - "failures": { - "type": "long" - }, - "timeouts": { - "type": "long" - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.node_rules-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.node_rules-*" - ], - "name": "metrics-kibana.stack_monitoring.node_rules", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node_rules": { - "properties": { - "executions": { - "type": "long" - }, - "failures": { - "type": "long" - }, - "timeouts": { - "type": "long" - } - } - } - } - }, - "kibana_stats": { - "properties": { - "kibana": { - "properties": { - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.stats-*" - ], - "name": "metrics-kibana.stack_monitoring.stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "kibana.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "kibana": { - "properties": { - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "stats": { - "properties": { - "concurrent_connections": { - "type": "long" - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "index": { - "ignore_above": 1024, - "type": "keyword" - }, - "kibana": { - "properties": { - "status": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "os": { - "properties": { - "distro": { - "ignore_above": 1024, - "type": "keyword" - }, - "distroRelease": { - "ignore_above": 1024, - "type": "keyword" - }, - "load": { - "properties": { - "15m": { - "type": "half_float" - }, - "1m": { - "type": "half_float" - }, - "5m": { - "type": "half_float" - } - } - }, - "memory": { - "properties": { - "free_in_bytes": { - "type": "long" - }, - "total_in_bytes": { - "type": "long" - }, - "used_in_bytes": { - "type": "long" - } - } - }, - "platform": { - "ignore_above": 1024, - "type": "keyword" - }, - "platformRelease": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "process": { - "properties": { - "event_loop_delay": { - "properties": { - "ms": { - "scaling_factor": 1000, - "type": "scaled_float" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "size_limit": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "total": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "uptime": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "resident_set_size": { - "properties": { - "bytes": { - "type": "long" - } - } - } - } - }, - "uptime": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "request": { - "properties": { - "disconnects": { - "type": "long" - }, - "total": { - "type": "long" - } - } - }, - "response_time": { - "properties": { - "avg": { - "properties": { - "ms": { - "type": "long" - } - } - }, - "max": { - "properties": { - "ms": { - "type": "long" - } - } - } - } - }, - "snapshot": { - "type": "boolean" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "transport_address": { - "ignore_above": 1024, - "type": "keyword" - }, - "usage": { - "properties": { - "index": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - }, - "kibana_stats": { - "properties": { - "concurrent_connections": { - "path": "kibana.stats.concurrent_connections", - "type": "alias" - }, - "kibana": { - "properties": { - "response_time": { - "properties": { - "max": { - "path": "kibana.stats.response_time.max.ms", - "type": "alias" - } - } - }, - "status": { - "path": "kibana.stats.status", - "type": "alias" - }, - "uuid": { - "path": "service.id", - "type": "alias" - }, - "version": { - "path": "service.version", - "type": "alias" - } - } - }, - "os": { - "properties": { - "load": { - "properties": { - "15m": { - "path": "kibana.stats.os.load.15m", - "type": "alias" - }, - "1m": { - "path": "kibana.stats.os.load.1m", - "type": "alias" - }, - "5m": { - "path": "kibana.stats.os.load.5m", - "type": "alias" - } - } - }, - "memory": { - "properties": { - "free_in_bytes": { - "path": "kibana.stats.os.memory.free_in_bytes", - "type": "alias" - } - } - } - } - }, - "process": { - "properties": { - "event_loop_delay": { - "path": "kibana.stats.process.event_loop_delay.ms", - "type": "alias" - }, - "memory": { - "properties": { - "heap": { - "properties": { - "size_limit": { - "path": "kibana.stats.process.memory.heap.size_limit.bytes", - "type": "alias" - } - } - }, - "resident_set_size_in_bytes": { - "path": "kibana.stats.process.memory.resident_set_size.bytes", - "type": "alias" - } - } - }, - "uptime_in_millis": { - "path": "kibana.stats.process.uptime.ms", - "type": "alias" - } - } - }, - "requests": { - "properties": { - "disconnects": { - "path": "kibana.stats.request.disconnects", - "type": "alias" - }, - "total": { - "path": "kibana.stats.request.total", - "type": "alias" - } - } - }, - "response_times": { - "properties": { - "average": { - "path": "kibana.stats.response_time.avg.ms", - "type": "alias" - }, - "max": { - "path": "kibana.stats.response_time.max.ms", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.address", - "service.version", - "service.type", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "kibana.elasticsearch.cluster.id", - "kibana.stats.kibana.status", - "kibana.stats.usage.index", - "kibana.stats.name", - "kibana.stats.index", - "kibana.stats.host.name", - "kibana.stats.status", - "kibana.stats.transport_address", - "kibana.stats.os.distro", - "kibana.stats.os.distroRelease", - "kibana.stats.os.platform", - "kibana.stats.os.platformRelease" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-kibana.stack_monitoring.status-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-kibana.stack_monitoring.status-*" - ], - "name": "metrics-kibana.stack_monitoring.status", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "kibana" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - } - } - }, - "kibana": { - "properties": { - "status": { - "properties": { - "metrics": { - "properties": { - "concurrent_connections": { - "type": "long" - }, - "requests": { - "properties": { - "disconnects": { - "type": "long" - }, - "total": { - "type": "long" - } - } - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "status": { - "properties": { - "overall": { - "properties": { - "state": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - } - } - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.id", - "service.name", - "service.version", - "service.type", - "service.address", - "ecs.version", - "error.message", - "kibana.status.name", - "kibana.status.status.overall.state" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-logstash.stack_monitoring.node-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-logstash.stack_monitoring.node-*" - ], - "name": "metrics-logstash.stack_monitoring.node", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "logstash.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "logstash": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "jvm": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "state": { - "properties": { - "pipeline": { - "properties": { - "batch_size": { - "type": "long" - }, - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "representation": { - "properties": { - "graph": { - "properties": { - "edges": { - "type": "object" - }, - "vertices": { - "type": "object" - } - } - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "workers": { - "type": "long" - } - } - } - } - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "logstash_state": { - "properties": { - "pipeline": { - "properties": { - "hash": { - "path": "logstash.node.state.pipeline.hash", - "type": "alias" - }, - "id": { - "path": "logstash.node.state.pipeline.id", - "type": "alias" - } - } - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "hostname": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.hostname", - "service.id", - "service.type", - "service.version", - "service.address", - "service.name", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "logstash.cluster.id", - "logstash.elasticsearch.cluster.id", - "logstash.node.jvm.version", - "logstash.node.host", - "logstash.node.version", - "logstash.node.id", - "logstash.node.state.pipeline.id", - "logstash.node.state.pipeline.hash", - "logstash.node.state.pipeline.ephemeral_id", - "logstash.node.state.pipeline.representation.hash", - "logstash.node.state.pipeline.representation.type", - "logstash.node.state.pipeline.representation.version" - ] - } - } - } - } - } - } -} - -{ - "type": "data_stream", - "value": { - "data_stream": "metrics-logstash.stack_monitoring.node_stats-default", - "template": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "data_stream": { - "allow_custom_routing": false, - "hidden": false - }, - "index_patterns": [ - "metrics-logstash.stack_monitoring.node_stats-*" - ], - "name": "metrics-logstash.stack_monitoring.node_stats", - "priority": 200, - "template": { - "mappings": { - "_meta": { - "managed": true, - "managed_by": "fleet", - "package": { - "name": "logstash" - } - }, - "date_detection": false, - "dynamic": false, - "dynamic_templates": [ - { - "strings_as_keyword": { - "mapping": { - "ignore_above": 1024, - "type": "keyword" - }, - "match_mapping_type": "string" - } - } - ], - "properties": { - "@timestamp": { - "type": "date" - }, - "cluster_uuid": { - "path": "logstash.elasticsearch.cluster.id", - "type": "alias" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "constant_keyword" - }, - "namespace": { - "type": "constant_keyword" - }, - "type": { - "type": "constant_keyword" - } - } - }, - "ecs": { - "properties": { - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "error": { - "properties": { - "message": { - "type": "match_only_text" - } - } - }, - "event": { - "properties": { - "agent_id_status": { - "ignore_above": 1024, - "type": "keyword" - }, - "dataset": { - "ignore_above": 1024, - "type": "keyword" - }, - "duration": { - "type": "long" - }, - "ingested": { - "format": "strict_date_time_no_millis||strict_date_optional_time||epoch_millis", - "type": "date" - }, - "module": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "host": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "logstash": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "elasticsearch": { - "properties": { - "cluster": { - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "node": { - "properties": { - "state": { - "properties": { - "pipeline": { - "properties": { - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "stats": { - "properties": { - "events": { - "properties": { - "duration_in_millis": { - "type": "long" - }, - "filtered": { - "type": "long" - }, - "in": { - "type": "long" - }, - "out": { - "type": "long" - } - } - }, - "jvm": { - "properties": { - "gc": { - "properties": { - "collectors": { - "properties": { - "old": { - "properties": { - "collection_count": { - "type": "long" - }, - "collection_time_in_millis": { - "type": "long" - } - } - }, - "young": { - "properties": { - "collection_count": { - "type": "long" - }, - "collection_time_in_millis": { - "type": "long" - } - } - } - } - } - } - }, - "mem": { - "properties": { - "heap_max_in_bytes": { - "type": "long" - }, - "heap_used_in_bytes": { - "type": "long" - }, - "heap_used_percent": { - "type": "long" - } - } - }, - "uptime_in_millis": { - "type": "long" - } - } - }, - "logstash": { - "properties": { - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "host": { - "ignore_above": 1024, - "type": "keyword" - }, - "http_address": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "pipeline": { - "properties": { - "batch_size": { - "type": "long" - }, - "workers": { - "type": "long" - } - } - }, - "snapshot": { - "type": "boolean" - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "uuid": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpu": { - "properties": { - "cfs_quota_micros": { - "type": "long" - }, - "control_group": { - "type": "text" - }, - "stat": { - "type": "object" - } - } - }, - "cpuacct": { - "type": "object" - } - } - }, - "cpu": { - "properties": { - "load_average": { - "properties": { - "15m": { - "type": "half_float" - }, - "1m": { - "type": "half_float" - }, - "5m": { - "type": "half_float" - } - } - }, - "percent": { - "type": "double" - } - } - } - } - }, - "pipelines": { - "properties": { - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "events": { - "properties": { - "duration_in_millis": { - "type": "long" - }, - "filtered": { - "type": "long" - }, - "in": { - "type": "long" - }, - "out": { - "type": "long" - }, - "queue_push_duration_in_millis": { - "type": "long" - } - } - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "queue": { - "properties": { - "events_count": { - "type": "long" - }, - "max_queue_size_in_bytes": { - "type": "long" - }, - "queue_size_in_bytes": { - "type": "long" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "reloads": { - "properties": { - "failures": { - "type": "long" - }, - "successes": { - "type": "long" - } - } - }, - "vertices": { - "properties": { - "duration_in_millis": { - "type": "long" - }, - "events_in": { - "type": "long" - }, - "events_out": { - "type": "long" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "long_counters": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "value": { - "type": "long" - } - }, - "type": "nested" - }, - "pipeline_ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "queue_push_duration_in_millis": { - "type": "long" - } - }, - "type": "nested" - } - }, - "type": "nested" - }, - "process": { - "properties": { - "cpu": { - "properties": { - "percent": { - "type": "double" - } - } - }, - "max_file_descriptors": { - "type": "long" - }, - "open_file_descriptors": { - "type": "long" - } - } - }, - "queue": { - "properties": { - "events_count": { - "type": "long" - } - } - }, - "reloads": { - "properties": { - "failures": { - "type": "long" - }, - "successes": { - "type": "long" - } - } - }, - "timestamp": { - "type": "date" - } - } - } - } - } - } - }, - "logstash_stats": { - "properties": { - "events": { - "properties": { - "duration_in_millis": { - "path": "logstash.node.stats.events.duration_in_millis", - "type": "alias" - }, - "in": { - "path": "logstash.node.stats.events.in", - "type": "alias" - }, - "out": { - "path": "logstash.node.stats.events.out", - "type": "alias" - } - } - }, - "jvm": { - "properties": { - "mem": { - "properties": { - "heap_max_in_bytes": { - "path": "logstash.node.stats.jvm.mem.heap_max_in_bytes", - "type": "alias" - }, - "heap_used_in_bytes": { - "path": "logstash.node.stats.jvm.mem.heap_used_in_bytes", - "type": "alias" - } - } - }, - "uptime_in_millis": { - "path": "logstash.node.stats.jvm.uptime_in_millis", - "type": "alias" - } - } - }, - "logstash": { - "properties": { - "uuid": { - "path": "logstash.node.stats.logstash.uuid", - "type": "alias" - }, - "version": { - "path": "logstash.node.stats.logstash.version", - "type": "alias" - } - } - }, - "os": { - "properties": { - "cgroup": { - "properties": { - "cpuacct": { - "type": "object" - } - } - }, - "cpu": { - "properties": { - "load_average": { - "properties": { - "15m": { - "path": "logstash.node.stats.os.cpu.load_average.15m", - "type": "alias" - }, - "1m": { - "path": "logstash.node.stats.os.cpu.load_average.1m", - "type": "alias" - }, - "5m": { - "path": "logstash.node.stats.os.cpu.load_average.5m", - "type": "alias" - } - } - }, - "stat": { - "type": "object" - } - } - } - } - }, - "pipelines": { - "type": "nested" - }, - "process": { - "properties": { - "cpu": { - "properties": { - "percent": { - "path": "logstash.node.stats.process.cpu.percent", - "type": "alias" - } - } - } - } - }, - "queue": { - "properties": { - "events_count": { - "path": "logstash.node.stats.queue.events_count", - "type": "alias" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "process": { - "properties": { - "pid": { - "type": "long" - } - } - }, - "service": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "hostname": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "timestamp": { - "path": "@timestamp", - "type": "alias" - } - } - }, - "settings": { - "index": { - "codec": "best_compression", - "lifecycle": { - "name": "metrics" - }, - "mapping": { - "total_fields": { - "limit": "10000" - } - }, - "query": { - "default_field": [ - "service.hostname", - "service.id", - "service.type", - "service.version", - "service.address", - "service.name", - "ecs.version", - "event.dataset", - "event.module", - "host.name", - "error.message", - "logstash.elasticsearch.cluster.id", - "logstash.node.state.pipeline.id", - "logstash.node.state.pipeline.hash", - "logstash.node.stats.logstash.uuid", - "logstash.node.stats.logstash.version", - "logstash.node.stats.logstash.ephemeral_id", - "logstash.node.stats.logstash.host", - "logstash.node.stats.logstash.http_address", - "logstash.node.stats.logstash.name", - "logstash.node.stats.logstash.status", - "logstash.node.stats.os.cgroup.cpuacct.control_group", - "logstash.node.stats.os.cgroup.cpu.control_group", - "logstash.node.stats.pipelines.id", - "logstash.node.stats.pipelines.hash", - "logstash.node.stats.pipelines.ephemeral_id", - "logstash.node.stats.pipelines.queue.type", - "logstash.node.stats.pipelines.vertices.id", - "logstash.node.stats.pipelines.vertices.long_counters.name", - "logstash.node.stats.pipelines.vertices.pipeline_ephemeral_id", - "logstash.cluster.id" - ] - } - } - } - } - } - } -} diff --git a/x-pack/test/functional_with_es_ssl/apps/discover/search_source_alert.ts b/x-pack/test/functional_with_es_ssl/apps/discover/search_source_alert.ts index 7a6870c53685c..e094eebc08650 100644 --- a/x-pack/test/functional_with_es_ssl/apps/discover/search_source_alert.ts +++ b/x-pack/test/functional_with_es_ssl/apps/discover/search_source_alert.ts @@ -289,8 +289,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('indexPattern-manage-field'); await PageObjects.header.waitUntilLoadingHasFinished(); - const titleElem = await testSubjects.find('currentIndexPatternTitle'); - expect(await titleElem.getVisibleText()).to.equal(dataView); + const titleElem = await testSubjects.find('createIndexPatternTitleInput'); + expect(await titleElem.getAttribute('value')).to.equal(dataView); }; const checkUpdatedDataViewState = async (dataView: string) => { @@ -302,8 +302,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.click('indexPattern-manage-field'); await PageObjects.header.waitUntilLoadingHasFinished(); - const titleElem = await testSubjects.find('currentIndexPatternTitle'); - expect(await titleElem.getVisibleText()).to.equal(dataView); + const titleElem = await testSubjects.find('createIndexPatternTitleInput'); + expect(await titleElem.getAttribute('value')).to.equal(dataView); }; describe('Search source Alert', () => { diff --git a/x-pack/test/monitoring_api_integration/apis/elasticsearch/ccr.ts b/x-pack/test/monitoring_api_integration/apis/elasticsearch/ccr.ts new file mode 100644 index 0000000000000..5f3c4d1b76009 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/apis/elasticsearch/ccr.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { getTestRunner } from '../../utils/test_runner'; + +import ccrResponse from '../../fixtures/elasticsearch/ccr.json'; +import ccrShardResponse from '../../fixtures/elasticsearch/ccr_shard.json'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + const testRunner = getTestRunner({ + testName: 'CCR', + archiveRoot: 'x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node', + getService, + }); + + const timeRange = { + min: '2023-01-24T15:45:30.000Z', + max: '2023-01-24T15:51:30.000Z', + }; + + testRunner(() => { + it('should return all followers and a grouping of stats by follower index', async () => { + const { body } = await supertest + .post('/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/ccr') + .set('kbn-xsrf', 'xxx') + .send({ timeRange }) + .expect(200); + + expect(body).to.eql(ccrResponse); + }); + + it('should return an empty list of followers if the cluster_uuid does not have any match', async () => { + const { body } = await supertest + .post('/api/monitoring/v1/clusters/random_uuid/elasticsearch/ccr') + .set('kbn-xsrf', 'xxx') + .send({ timeRange }) + .expect(200); + + expect(body).to.eql([]); + }); + + it('should return specific shard details', async () => { + const { body } = await supertest + .post( + '/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/ccr/foo-follower/shard/0' + ) + .set('kbn-xsrf', 'xxx') + .send({ timeRange }) + .expect(200); + + expect(body).to.eql(ccrShardResponse); + }); + }); +} diff --git a/x-pack/test/monitoring_api_integration/apis/elasticsearch/index.ts b/x-pack/test/monitoring_api_integration/apis/elasticsearch/index.ts new file mode 100644 index 0000000000000..8b43525fb03e2 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/apis/elasticsearch/index.ts @@ -0,0 +1,18 @@ +/* + * 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 '../../../api_integration/ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('Elasticsearch', () => { + loadTestFile(require.resolve('./ccr')); + loadTestFile(require.resolve('./indices')); + loadTestFile(require.resolve('./ml_jobs')); + loadTestFile(require.resolve('./nodes')); + loadTestFile(require.resolve('./overview')); + }); +} diff --git a/x-pack/test/monitoring_api_integration/apis/elasticsearch/indices.ts b/x-pack/test/monitoring_api_integration/apis/elasticsearch/indices.ts new file mode 100644 index 0000000000000..85ed82ab7ee6c --- /dev/null +++ b/x-pack/test/monitoring_api_integration/apis/elasticsearch/indices.ts @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { getTestRunner } from '../../utils/test_runner'; + +import nonSystemIndicesResponse from '../../fixtures/elasticsearch/indices_no_system.json'; +import allIndicesResponse from '../../fixtures/elasticsearch/indices_all.json'; +import indexDetailResponse from '../../fixtures/elasticsearch/index_detail.json'; +import indexDetailAdvancedResponse from '../../fixtures/elasticsearch/index_detail_advanced.json'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + const testRunner = getTestRunner({ + testName: 'Indices', + archiveRoot: 'x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node', + getService, + }); + + const timeRange = { + min: '2023-01-24T15:45:30.000Z', + max: '2023-01-24T15:51:30.000Z', + }; + + testRunner(() => { + it('should summarize the non-system indices with stats', async () => { + const { body } = await supertest + .post( + '/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/indices?show_system_indices=false' + ) + .set('kbn-xsrf', 'xxx') + .send({ timeRange }) + .expect(200); + + expect(body).to.eql(nonSystemIndicesResponse); + }); + + it('should summarize all indices with stats', async () => { + const { body } = await supertest + .post( + '/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/indices?show_system_indices=true' + ) + .set('kbn-xsrf', 'xxx') + .send({ timeRange }) + .expect(200); + + expect(body).to.eql(allIndicesResponse); + }); + + it('should summarize index with chart metrics data for the non-advanced view', async () => { + const { body } = await supertest + .post( + '/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/indices/.ds-metrics-elasticsearch.stack_monitoring.cluster_stats-default-2023.01.24-000001' + ) + .set('kbn-xsrf', 'xxx') + .send({ + timeRange, + is_advanced: false, + }) + .expect(200); + + expect(body).to.eql(indexDetailResponse); + }); + + it('should summarize index with chart metrics data for the advanced view', async () => { + const { body } = await supertest + .post( + '/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/indices/.ds-metrics-elasticsearch.stack_monitoring.cluster_stats-default-2023.01.24-000001' + ) + .set('kbn-xsrf', 'xxx') + .send({ + timeRange, + is_advanced: true, + }) + .expect(200); + + expect(body).to.eql(indexDetailAdvancedResponse); + }); + }); +} diff --git a/x-pack/test/monitoring_api_integration/apis/elasticsearch/ml_jobs.ts b/x-pack/test/monitoring_api_integration/apis/elasticsearch/ml_jobs.ts new file mode 100644 index 0000000000000..93d9c8a575bf6 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/apis/elasticsearch/ml_jobs.ts @@ -0,0 +1,40 @@ +/* + * 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 '../../../api_integration/ftr_provider_context'; +import { getTestRunner } from '../../utils/test_runner'; + +import mlResponse from '../../fixtures/elasticsearch/ml_jobs.json'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + const testRunner = getTestRunner({ + testName: 'ML jobs', + archiveRoot: 'x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node', + getService, + }); + + const timeRange = { + min: '2023-01-24T15:45:30.000Z', + max: '2023-01-24T15:51:30.000Z', + }; + + testRunner(() => { + it('should list ml jobs', async () => { + const { body } = await supertest + .post('/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/ml_jobs') + .set('kbn-xsrf', 'xxx') + .send({ timeRange }) + .expect(200); + + expect(body).to.eql(mlResponse); + }); + }); +} diff --git a/x-pack/test/monitoring_api_integration/apis/elasticsearch/nodes.ts b/x-pack/test/monitoring_api_integration/apis/elasticsearch/nodes.ts new file mode 100644 index 0000000000000..44d02a043df56 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/apis/elasticsearch/nodes.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { getTestRunner } from '../../utils/test_runner'; + +import nodesResponse from '../../fixtures/elasticsearch/nodes.json'; +import nodeDetailResponse from '../../fixtures/elasticsearch/node_detail.json'; +import nodeDetailAdvancedResponse from '../../fixtures/elasticsearch/node_detail_advanced.json'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + const testRunner = getTestRunner({ + testName: 'Nodes', + archiveRoot: 'x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node', + getService, + }); + + const timeRange = { + min: '2023-01-24T15:45:30.000Z', + max: '2023-01-24T15:51:30.000Z', + }; + + testRunner(() => { + it('should list nodes', async () => { + const { body } = await supertest + .post('/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/nodes') + .set('kbn-xsrf', 'xxx') + .send({ + pagination: { size: 20, index: 0 }, + sort: { field: 'name', direction: 'asc' }, + queryText: '', + timeRange, + }) + .expect(200); + + expect(body).to.eql(nodesResponse); + }); + + it('should summarize node with metrics', async () => { + const { body } = await supertest + .post( + '/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/nodes/1ksGajLvSW-OwnAYH-X3Sg' + ) + .set('kbn-xsrf', 'xxx') + .send({ + timeRange, + is_advanced: false, + showSystemIndices: false, + }) + .expect(200); + + expect(body).to.eql(nodeDetailResponse); + }); + + it('should summarize node with advanced metrics', async () => { + const { body } = await supertest + .post( + '/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch/nodes/1ksGajLvSW-OwnAYH-X3Sg' + ) + .set('kbn-xsrf', 'xxx') + .send({ + timeRange, + is_advanced: true, + showSystemIndices: false, + }) + .expect(200); + + expect(body).to.eql(nodeDetailAdvancedResponse); + }); + }); +} diff --git a/x-pack/test/monitoring_api_integration/apis/elasticsearch/overview.ts b/x-pack/test/monitoring_api_integration/apis/elasticsearch/overview.ts new file mode 100644 index 0000000000000..4632a67c9f9e0 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/apis/elasticsearch/overview.ts @@ -0,0 +1,42 @@ +/* + * 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 '../../../api_integration/ftr_provider_context'; +import { getTestRunner } from '../../utils/test_runner'; + +import overviewResponse from '../../fixtures/elasticsearch/overview.json'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + const testRunner = getTestRunner({ + testName: 'Overview', + archiveRoot: 'x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node', + getService, + }); + + const timeRange = { + min: '2023-01-24T15:45:30.000Z', + max: '2023-01-24T15:51:30.000Z', + }; + + testRunner(() => { + it('should summarize elasticsearch with metrics', async () => { + const { body } = await supertest + .post('/api/monitoring/v1/clusters/-8HHufEtS72rt344JzYofg/elasticsearch') + .set('kbn-xsrf', 'xxx') + .send({ + timeRange, + }) + .expect(200); + + expect(body).to.eql(overviewResponse); + }); + }); +} diff --git a/x-pack/test/monitoring_api_integration/apis/enterprisesearch/index.ts b/x-pack/test/monitoring_api_integration/apis/enterprisesearch/index.ts new file mode 100644 index 0000000000000..5942fde0fe95a --- /dev/null +++ b/x-pack/test/monitoring_api_integration/apis/enterprisesearch/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('Enterprisesearch', () => { + loadTestFile(require.resolve('./overview')); + }); +} diff --git a/x-pack/test/monitoring_api_integration/apis/enterprisesearch/overview.ts b/x-pack/test/monitoring_api_integration/apis/enterprisesearch/overview.ts new file mode 100644 index 0000000000000..3f5284af04ca1 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/apis/enterprisesearch/overview.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; +import { getTestRunner } from '../../utils/test_runner'; + +import response from '../../fixtures/enterprisesearch/overview.json'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + const testRunner = getTestRunner({ + testName: 'Overview', + archiveRoot: 'x-pack/test/monitoring_api_integration/archives/enterprisesearch', + getService, + }); + + const timeRange = { + min: '2023-01-11T20:54:00.000Z', + max: '2023-01-11T21:01:00.000Z', + }; + + testRunner(() => { + it('should summarize enterprisesearch cluster with metrics', async () => { + const { body } = await supertest + .post('/api/monitoring/v1/clusters/FDTNEesSQ7GbzOXIO9qImw/enterprise_search') + .set('kbn-xsrf', 'xxx') + .send({ timeRange }) + .expect(200); + + expect(body).to.eql(response); + }); + }); +} diff --git a/x-pack/test/monitoring_api_integration/apis/index.ts b/x-pack/test/monitoring_api_integration/apis/index.ts index 0d3099275ada2..13757900fad9f 100644 --- a/x-pack/test/monitoring_api_integration/apis/index.ts +++ b/x-pack/test/monitoring_api_integration/apis/index.ts @@ -11,5 +11,7 @@ export default function ({ loadTestFile }: FtrProviderContext) { describe('Monitoring Endpoints', function () { loadTestFile(require.resolve('./apm')); loadTestFile(require.resolve('./beats')); + loadTestFile(require.resolve('./elasticsearch')); + loadTestFile(require.resolve('./enterprisesearch')); }); } diff --git a/x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node/metricbeat/data.json.gz b/x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node/metricbeat/data.json.gz new file mode 100644 index 0000000000000..05fe9b4c815bb Binary files /dev/null and b/x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node/metricbeat/data.json.gz differ diff --git a/x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node/package/data.json.gz b/x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node/package/data.json.gz new file mode 100644 index 0000000000000..8faba646f1eee Binary files /dev/null and b/x-pack/test/monitoring_api_integration/archives/elasticsearch/single_node/package/data.json.gz differ diff --git a/x-pack/test/monitoring_api_integration/archives/enterprisesearch/metricbeat/data.json.gz b/x-pack/test/monitoring_api_integration/archives/enterprisesearch/metricbeat/data.json.gz new file mode 100644 index 0000000000000..70c6b35118602 Binary files /dev/null and b/x-pack/test/monitoring_api_integration/archives/enterprisesearch/metricbeat/data.json.gz differ diff --git a/x-pack/test/monitoring_api_integration/archives/enterprisesearch/package/data.json.gz b/x-pack/test/monitoring_api_integration/archives/enterprisesearch/package/data.json.gz new file mode 100644 index 0000000000000..a36b12917f065 Binary files /dev/null and b/x-pack/test/monitoring_api_integration/archives/enterprisesearch/package/data.json.gz differ diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/ccr.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/ccr.json new file mode 100644 index 0000000000000..3264dfc1be1a0 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/ccr.json @@ -0,0 +1 @@ +[{"id":"foo-follower","index":"foo-follower","follows":"foo-leader","shards":[{"shardId":0,"error":null,"opsSynced":0,"syncLagTime":47748,"syncLagOps":0,"syncLagOpsLeader":0,"syncLagOpsFollower":0}],"opsSynced":0,"syncLagTime":47748,"syncLagOps":0}] diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/ccr_shard.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/ccr_shard.json new file mode 100644 index 0000000000000..cdb59728561cd --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/ccr_shard.json @@ -0,0 +1 @@ +{"metrics":{"ccr_sync_lag_time":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"ccr_stats.time_since_last_read_millis","metricAgg":"max","label":"Fetch delay","title":"Fetch delay","description":"The amount of time the follower index is lagging behind the leader.","units":"s","format":"0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0]]}],"ccr_sync_lag_ops":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"","metricAgg":"sum","label":"Ops delay","title":"Ops delay","description":"The number of operations the follower index is lagging behind the leader.","units":"","format":"0,0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0]]}]},"stat":{"leader":{"index":"foo-leader","max_seq_no":83,"global_checkpoint":83},"follower":{"operations":{"read":{"count":82}},"time_since_last_read":{"ms":47748},"index":"foo-follower","settings_version":1,"shard":{"number":0},"aliases_version":1,"max_seq_no":83,"global_checkpoint":83,"operations_written":82},"read_exceptions":[],"bytes_read":7462,"auto_follow":{"success":{"follow_indices":{"count":0}},"failed":{"follow_indices":{"count":0},"remote_cluster_state_requests":{"count":0}}},"requests":{"outstanding":{"read":{"count":1},"write":{"count":0}},"failed":{"read":{"count":0},"write":{"count":0}},"successful":{"read":{"count":72},"write":{"count":72}}},"total_time":{"read":{"ms":195322,"remote_exec":{"ms":194799}},"write":{"ms":156}},"write_buffer":{"size":{"bytes":0},"operation":{"count":0}}},"formattedLeader":"foo-leader","timestamp":"2023-01-24T15:48:26.038Z","oldestStat":{"follower":{"operations_written":82},"requests":{"failed":{"read":{"count":0}}}}} diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/index_detail.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/index_detail.json new file mode 100644 index 0000000000000..a26fe593b56a8 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/index_detail.json @@ -0,0 +1 @@ +{"indexSummary":{"documents":37,"dataSize":{"primaries":284930,"total":284930},"unassignedShards":1,"totalShards":2,"status":"yellow"},"metrics":{"index_search_request_rate":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.search.query_total","metricAgg":"max","label":"Total Shards","title":"Search Rate","description":"Number of search requests being executed across primary and replica shards. A single search can run against multiple shards!","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.7],[1674575140000,0.7],[1674575150000,0.7],[1674575160000,0.7],[1674575170000,0.7],[1674575180000,0.7],[1674575190000,0.7],[1674575200000,0],[1674575210000,0.7],[1674575220000,0.7],[1674575230000,0.7],[1674575240000,0.7],[1674575250000,0.7],[1674575260000,0.7],[1674575270000,0.7],[1674575280000,0.7],[1674575290000,0.7],[1674575300000,0.7],[1674575310000,0.7],[1674575320000,0.7],[1674575330000,0.7],[1674575340000,0.7],[1674575350000,0.7],[1674575360000,0.7],[1674575370000,0.7],[1674575380000,0.7],[1674575390000,0.7],[1674575400000,0.7],[1674575410000,0.7],[1674575420000,0.7],[1674575430000,0.7],[1674575440000,0.7],[1674575450000,0.7],[1674575460000,0.7],[1674575470000,0.7],[1674575480000,0.7]]}],"index_request_rate":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.indexing.index_total","metricAgg":"max","label":"Total Shards","title":"Indexing Rate","description":"Number of documents being indexed for primary and replica shards.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.1],[1674575140000,0.1],[1674575150000,0.1],[1674575160000,0.1],[1674575170000,0.1],[1674575180000,0.1],[1674575190000,0.1],[1674575200000,0.1],[1674575210000,0.1],[1674575220000,0.1],[1674575230000,0.1],[1674575240000,0.1],[1674575250000,0.1],[1674575260000,0.1],[1674575270000,0.1],[1674575280000,0.1],[1674575290000,0.1],[1674575300000,0.1],[1674575310000,0.1],[1674575320000,0.1],[1674575330000,0.1],[1674575340000,0.1],[1674575350000,0.1],[1674575360000,0.1],[1674575370000,0.1],[1674575380000,0.1],[1674575390000,0.1],[1674575400000,0.1],[1674575410000,0.1],[1674575420000,0.1],[1674575430000,0.1],[1674575440000,0.1],[1674575450000,0.1],[1674575460000,0.1],[1674575470000,0.1],[1674575480000,0.1]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.indexing.index_total","metricAgg":"max","label":"Primary Shards","title":"Indexing Rate","description":"Number of documents being indexed for primary shards.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.1],[1674575140000,0.1],[1674575150000,0.1],[1674575160000,0.1],[1674575170000,0.1],[1674575180000,0.1],[1674575190000,0.1],[1674575200000,0.1],[1674575210000,0.1],[1674575220000,0.1],[1674575230000,0.1],[1674575240000,0.1],[1674575250000,0.1],[1674575260000,0.1],[1674575270000,0.1],[1674575280000,0.1],[1674575290000,0.1],[1674575300000,0.1],[1674575310000,0.1],[1674575320000,0.1],[1674575330000,0.1],[1674575340000,0.1],[1674575350000,0.1],[1674575360000,0.1],[1674575370000,0.1],[1674575380000,0.1],[1674575390000,0.1],[1674575400000,0.1],[1674575410000,0.1],[1674575420000,0.1],[1674575430000,0.1],[1674575440000,0.1],[1674575450000,0.1],[1674575460000,0.1],[1674575470000,0.1],[1674575480000,0.1]]}],"index_size":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.store.size_in_bytes","metricAgg":"max","label":"Store","title":"Disk","description":"Size of primary and replica shards on disk.","units":"B","format":"0,0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,50899],[1674575140000,76233],[1674575150000,76233],[1674575160000,101576],[1674575170000,126899],[1674575180000,152252],[1674575190000,202928],[1674575200000,228267],[1674575210000,228267],[1674575220000,253618],[1674575230000,69951],[1674575240000,95286],[1674575250000,145956],[1674575260000,171294],[1674575270000,171294],[1674575280000,196628],[1674575290000,221969],[1674575300000,247300],[1674575310000,88704],[1674575320000,114046],[1674575330000,114046],[1674575340000,139381],[1674575350000,164723],[1674575360000,190065],[1674575370000,240733],[1674575380000,266068],[1674575390000,266068],[1674575400000,291411],[1674575410000,107555],[1674575420000,132893],[1674575430000,183559],[1674575440000,208909],[1674575450000,208909],[1674575460000,234251],[1674575470000,259596],[1674575480000,284930]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.store.size_in_bytes","metricAgg":"max","label":"Store (Primaries)","title":"Disk","description":"Size of primary shards on disk.","units":"B","format":"0,0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,50899],[1674575140000,76233],[1674575150000,76233],[1674575160000,101576],[1674575170000,126899],[1674575180000,152252],[1674575190000,202928],[1674575200000,228267],[1674575210000,228267],[1674575220000,253618],[1674575230000,69951],[1674575240000,95286],[1674575250000,145956],[1674575260000,171294],[1674575270000,171294],[1674575280000,196628],[1674575290000,221969],[1674575300000,247300],[1674575310000,88704],[1674575320000,114046],[1674575330000,114046],[1674575340000,139381],[1674575350000,164723],[1674575360000,190065],[1674575370000,240733],[1674575380000,266068],[1674575390000,266068],[1674575400000,291411],[1674575410000,107555],[1674575420000,132893],[1674575430000,183559],[1674575440000,208909],[1674575450000,208909],[1674575460000,234251],[1674575470000,259596],[1674575480000,284930]]}],"index_document_count":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.docs.count","metricAgg":"max","label":"Document Count","description":"Total number of documents, only including primary shards.","units":"","format":"0,0.[0]a","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,2],[1674575140000,3],[1674575150000,4],[1674575160000,5],[1674575170000,6],[1674575180000,7],[1674575190000,8],[1674575200000,9],[1674575210000,10],[1674575220000,11],[1674575230000,12],[1674575240000,13],[1674575250000,14],[1674575260000,15],[1674575270000,16],[1674575280000,17],[1674575290000,18],[1674575300000,19],[1674575310000,20],[1674575320000,21],[1674575330000,22],[1674575340000,23],[1674575350000,24],[1674575360000,25],[1674575370000,26],[1674575380000,27],[1674575390000,28],[1674575400000,29],[1674575410000,30],[1674575420000,31],[1674575430000,32],[1674575440000,33],[1674575450000,34],[1674575460000,35],[1674575470000,36],[1674575480000,37]]}],"index_segment_count":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.segments.count","metricAgg":"max","label":"Total","title":"Segment Count","description":"Number of segments for primary and replica shards.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,2],[1674575140000,3],[1674575150000,4],[1674575160000,5],[1674575170000,6],[1674575180000,7],[1674575190000,8],[1674575200000,9],[1674575210000,10],[1674575220000,2],[1674575230000,3],[1674575240000,4],[1674575250000,5],[1674575260000,6],[1674575270000,7],[1674575280000,8],[1674575290000,9],[1674575300000,10],[1674575310000,2],[1674575320000,3],[1674575330000,4],[1674575340000,5],[1674575350000,6],[1674575360000,7],[1674575370000,8],[1674575380000,9],[1674575390000,10],[1674575400000,2],[1674575410000,3],[1674575420000,4],[1674575430000,5],[1674575440000,6],[1674575450000,7],[1674575460000,8],[1674575470000,9],[1674575480000,10]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.segments.count","metricAgg":"max","label":"Primaries","title":"Segment Count","description":"Number of segments for primary shards.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,2],[1674575140000,3],[1674575150000,4],[1674575160000,5],[1674575170000,6],[1674575180000,7],[1674575190000,8],[1674575200000,9],[1674575210000,10],[1674575220000,2],[1674575230000,3],[1674575240000,4],[1674575250000,5],[1674575260000,6],[1674575270000,7],[1674575280000,8],[1674575290000,9],[1674575300000,10],[1674575310000,2],[1674575320000,3],[1674575330000,4],[1674575340000,5],[1674575350000,6],[1674575360000,7],[1674575370000,8],[1674575380000,9],[1674575390000,10],[1674575400000,2],[1674575410000,3],[1674575420000,4],[1674575430000,5],[1674575440000,6],[1674575450000,7],[1674575460000,8],[1674575470000,9],[1674575480000,10]]}]},"logs":{"enabled":false,"logs":[],"reason":{"indexPatternExists":false,"indexPatternInTimeRangeExists":false,"typeExistsAtAnyTime":false,"typeExists":false,"usingStructuredLogs":false,"clusterExists":false,"nodeExists":null,"indexExists":false},"limit":10},"shards":[{"index":".ds-metrics-elasticsearch.stack_monitoring.cluster_stats-default-2023.01.24-000001","node":"1ksGajLvSW-OwnAYH-X3Sg","primary":true,"relocating_node":null,"shard":0,"state":"STARTED"},{"index":".ds-metrics-elasticsearch.stack_monitoring.cluster_stats-default-2023.01.24-000001","primary":false,"relocating_node":null,"shard":0,"state":"UNASSIGNED"}],"shardStats":{"nodes":{"1ksGajLvSW-OwnAYH-X3Sg":{"shardCount":1,"indexCount":1,"name":"712a47f7f7df","node_ids":["1ksGajLvSW-OwnAYH-X3Sg"],"type":"master"}}},"nodes":{"1ksGajLvSW-OwnAYH-X3Sg":{"shardCount":1,"indexCount":1,"name":"712a47f7f7df","node_ids":["1ksGajLvSW-OwnAYH-X3Sg"],"type":"master"}},"stateUuid":"v1_XbWynRRGKGG7gX7U86g"} diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/index_detail_advanced.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/index_detail_advanced.json new file mode 100644 index 0000000000000..9816a781b97f0 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/index_detail_advanced.json @@ -0,0 +1 @@ +{"indexSummary":{"documents":37,"dataSize":{"primaries":284930,"total":284930},"unassignedShards":1,"totalShards":2,"status":"yellow"},"metrics":{"index_3":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.segments.fixed_bit_set_memory_in_bytes","metricAgg":"max","label":"Fixed Bitsets","title":"Index Memory - Lucene","description":"Heap memory used by Fixed Bit Sets (e.g., deeply nested documents). This is a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.segments.version_map_memory_in_bytes","metricAgg":"max","label":"Version Map","title":"Index Memory","description":"Heap memory used by Versioning (e.g., updates and deletes). This is NOT a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]}],"index_4":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.query_cache.memory_size_in_bytes","metricAgg":"max","label":"Query Cache","title":"Index Memory - Elasticsearch","description":"Heap memory used by Query Cache (e.g., cached filters). This is for the same shards, but not a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.request_cache.memory_size_in_bytes","metricAgg":"max","label":"Request Cache","title":"Index Memory","description":"Heap memory used by Request Cache (e.g., instant aggregations). This is for the same shards, but not a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,13944],[1674575140000,8416],[1674575150000,17392],[1674575160000,28016],[1674575170000,38832],[1674575180000,51240],[1674575190000,64528],[1674575200000,0],[1674575210000,13368],[1674575220000,28056],[1674575230000,43888],[1674575240000,61216],[1674575250000,79840],[1674575260000,0],[1674575270000,18576],[1674575280000,38296],[1674575290000,59136],[1674575300000,81112],[1674575310000,104200],[1674575320000,25304],[1674575330000,51728],[1674575340000,79320],[1674575350000,108040],[1674575360000,137856],[1674575370000,168792],[1674575380000,32072],[1674575390000,65600],[1674575400000,100232],[1674575410000,135856],[1674575420000,171504],[1674575430000,207176],[1674575440000,34520],[1674575450000,70040],[1674575460000,106560],[1674575470000,144088],[1674575480000,182616]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.fielddata.memory_size_in_bytes","metricAgg":"max","label":"Fielddata","title":"Index Memory","description":"Heap memory used by Fielddata (e.g., global ordinals or explicitly enabled fielddata on text fields). This is for the same shards, but not a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.segments.index_writer_memory_in_bytes","metricAgg":"max","label":"Index Writer","title":"Index Memory","description":"Heap memory used by the Index Writer. This is NOT a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]}],"index_total":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.search.query_total","metricAgg":"max","label":"Search Total","title":"Request Rate","description":"Amount of search operations (per shard).","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.7],[1674575140000,0.7],[1674575150000,0.7],[1674575160000,0.7],[1674575170000,0.7],[1674575180000,0.7],[1674575190000,0.7],[1674575200000,0],[1674575210000,0.7],[1674575220000,0.7],[1674575230000,0.7],[1674575240000,0.7],[1674575250000,0.7],[1674575260000,0.7],[1674575270000,0.7],[1674575280000,0.7],[1674575290000,0.7],[1674575300000,0.7],[1674575310000,0.7],[1674575320000,0.7],[1674575330000,0.7],[1674575340000,0.7],[1674575350000,0.7],[1674575360000,0.7],[1674575370000,0.7],[1674575380000,0.7],[1674575390000,0.7],[1674575400000,0.7],[1674575410000,0.7],[1674575420000,0.7],[1674575430000,0.7],[1674575440000,0.7],[1674575450000,0.7],[1674575460000,0.7],[1674575470000,0.7],[1674575480000,0.7]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.indexing.index_total","metricAgg":"max","label":"Index Total","title":"Request Rate","description":"Amount of indexing operations.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.1],[1674575140000,0.1],[1674575150000,0.1],[1674575160000,0.1],[1674575170000,0.1],[1674575180000,0.1],[1674575190000,0.1],[1674575200000,0.1],[1674575210000,0.1],[1674575220000,0.1],[1674575230000,0.1],[1674575240000,0.1],[1674575250000,0.1],[1674575260000,0.1],[1674575270000,0.1],[1674575280000,0.1],[1674575290000,0.1],[1674575300000,0.1],[1674575310000,0.1],[1674575320000,0.1],[1674575330000,0.1],[1674575340000,0.1],[1674575350000,0.1],[1674575360000,0.1],[1674575370000,0.1],[1674575380000,0.1],[1674575390000,0.1],[1674575400000,0.1],[1674575410000,0.1],[1674575420000,0.1],[1674575430000,0.1],[1674575440000,0.1],[1674575450000,0.1],[1674575460000,0.1],[1674575470000,0.1],[1674575480000,0.1]]}],"index_time":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.search.query_time_in_millis","metricAgg":"max","label":"Search","title":"Request Time","description":"Amount of time spent performing search operations (per shard).","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.4],[1674575140000,0.4],[1674575150000,0.4],[1674575160000,0.4],[1674575170000,0.4],[1674575180000,0.5],[1674575190000,0.4],[1674575200000,0],[1674575210000,0.3],[1674575220000,0.4],[1674575230000,0.3],[1674575240000,0.3],[1674575250000,0.4],[1674575260000,0.3],[1674575270000,0.3],[1674575280000,0.4],[1674575290000,0.4],[1674575300000,0.3],[1674575310000,0.4],[1674575320000,0.3],[1674575330000,0.2],[1674575340000,0.4],[1674575350000,0.9],[1674575360000,0.3],[1674575370000,0.3],[1674575380000,0.4],[1674575390000,0.4],[1674575400000,0.3],[1674575410000,0.3],[1674575420000,0.2],[1674575430000,0.3],[1674575440000,0.4],[1674575450000,0.2],[1674575460000,0.3],[1674575470000,0.4],[1674575480000,0.4]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.indexing.index_time_in_millis","metricAgg":"max","label":"Indexing","title":"Request Time","description":"Amount of time spent performing index operations on primary and replica shards.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.1],[1674575140000,0.1],[1674575150000,0],[1674575160000,0.1],[1674575170000,0.1],[1674575180000,0],[1674575190000,0.1],[1674575200000,0.1],[1674575210000,0.1],[1674575220000,0.1],[1674575230000,0],[1674575240000,0.1],[1674575250000,0.1],[1674575260000,0],[1674575270000,4.8],[1674575280000,0.1],[1674575290000,0],[1674575300000,0.1],[1674575310000,0.1],[1674575320000,0],[1674575330000,0.1],[1674575340000,0],[1674575350000,0.1],[1674575360000,0.1],[1674575370000,0.1],[1674575380000,0],[1674575390000,0.1],[1674575400000,0.1],[1674575410000,0.1],[1674575420000,0],[1674575430000,0.1],[1674575440000,0.1],[1674575450000,0.1],[1674575460000,0.1],[1674575470000,0],[1674575480000,0.4]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.indexing.index_time_in_millis","metricAgg":"max","label":"Indexing (Primaries)","title":"Request Time","description":"Amount of time spent performing index operations on primary shards only.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.1],[1674575140000,0.1],[1674575150000,0],[1674575160000,0.1],[1674575170000,0.1],[1674575180000,0],[1674575190000,0.1],[1674575200000,0.1],[1674575210000,0.1],[1674575220000,0.1],[1674575230000,0],[1674575240000,0.1],[1674575250000,0.1],[1674575260000,0],[1674575270000,4.8],[1674575280000,0.1],[1674575290000,0],[1674575300000,0.1],[1674575310000,0.1],[1674575320000,0],[1674575330000,0.1],[1674575340000,0],[1674575350000,0.1],[1674575360000,0.1],[1674575370000,0.1],[1674575380000,0],[1674575390000,0.1],[1674575400000,0.1],[1674575410000,0.1],[1674575420000,0],[1674575430000,0.1],[1674575440000,0.1],[1674575450000,0.1],[1674575460000,0.1],[1674575470000,0],[1674575480000,0.4]]}],"index_throttling":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.indexing.throttle_time_in_millis","metricAgg":"max","label":"Indexing","title":"Throttle Time","description":"Amount of time spent throttling index operations on primary and replica shards.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.indexing.throttle_time_in_millis","metricAgg":"max","label":"Indexing (Primaries)","title":"Throttle Time","description":"Amount of time spent throttling index operations on primary shards.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]}],"index_refresh":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.refresh.total_time_in_millis","metricAgg":"max","label":"Total","title":"Refresh Time","description":"Amount of time spent to perform refresh operations on primary and replica shards.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.6],[1674575140000,0.5],[1674575150000,0.6],[1674575160000,0.5],[1674575170000,0.4],[1674575180000,0.5],[1674575190000,0.6],[1674575200000,0.5],[1674575210000,0.4],[1674575220000,0.8],[1674575230000,0.5],[1674575240000,0.4],[1674575250000,0.4],[1674575260000,0.4],[1674575270000,0.6],[1674575280000,0.5],[1674575290000,0.5],[1674575300000,0.4],[1674575310000,0.6],[1674575320000,0.5],[1674575330000,0.4],[1674575340000,0.4],[1674575350000,0.5],[1674575360000,0.4],[1674575370000,0.4],[1674575380000,0.5],[1674575390000,0.5],[1674575400000,0.6],[1674575410000,0.5],[1674575420000,0.4],[1674575430000,0.5],[1674575440000,0.5],[1674575450000,0.6],[1674575460000,0.5],[1674575470000,0.5],[1674575480000,1.1]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.refresh.total_time_in_millis","metricAgg":"max","label":"Primaries","title":"Refresh Time","description":"Amount of time spent to perform refresh operations on primary shards.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0.6],[1674575140000,0.5],[1674575150000,0.6],[1674575160000,0.5],[1674575170000,0.4],[1674575180000,0.5],[1674575190000,0.6],[1674575200000,0.5],[1674575210000,0.4],[1674575220000,0.8],[1674575230000,0.5],[1674575240000,0.4],[1674575250000,0.4],[1674575260000,0.4],[1674575270000,0.6],[1674575280000,0.5],[1674575290000,0.5],[1674575300000,0.4],[1674575310000,0.6],[1674575320000,0.5],[1674575330000,0.4],[1674575340000,0.4],[1674575350000,0.5],[1674575360000,0.4],[1674575370000,0.4],[1674575380000,0.5],[1674575390000,0.5],[1674575400000,0.6],[1674575410000,0.5],[1674575420000,0.4],[1674575430000,0.5],[1674575440000,0.5],[1674575450000,0.6],[1674575460000,0.5],[1674575470000,0.5],[1674575480000,1.1]]}],"index_disk":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.store.size_in_bytes","metricAgg":"max","label":"Store","title":"Disk","description":"Size of primary and replica shards on disk.","units":"B","format":"0,0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,50899],[1674575140000,76233],[1674575150000,76233],[1674575160000,101576],[1674575170000,126899],[1674575180000,152252],[1674575190000,202928],[1674575200000,228267],[1674575210000,228267],[1674575220000,253618],[1674575230000,69951],[1674575240000,95286],[1674575250000,145956],[1674575260000,171294],[1674575270000,171294],[1674575280000,196628],[1674575290000,221969],[1674575300000,247300],[1674575310000,88704],[1674575320000,114046],[1674575330000,114046],[1674575340000,139381],[1674575350000,164723],[1674575360000,190065],[1674575370000,240733],[1674575380000,266068],[1674575390000,266068],[1674575400000,291411],[1674575410000,107555],[1674575420000,132893],[1674575430000,183559],[1674575440000,208909],[1674575450000,208909],[1674575460000,234251],[1674575470000,259596],[1674575480000,284930]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.store.size_in_bytes","metricAgg":"max","label":"Store (Primaries)","title":"Disk","description":"Size of primary shards on disk.","units":"B","format":"0,0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,50899],[1674575140000,76233],[1674575150000,76233],[1674575160000,101576],[1674575170000,126899],[1674575180000,152252],[1674575190000,202928],[1674575200000,228267],[1674575210000,228267],[1674575220000,253618],[1674575230000,69951],[1674575240000,95286],[1674575250000,145956],[1674575260000,171294],[1674575270000,171294],[1674575280000,196628],[1674575290000,221969],[1674575300000,247300],[1674575310000,88704],[1674575320000,114046],[1674575330000,114046],[1674575340000,139381],[1674575350000,164723],[1674575360000,190065],[1674575370000,240733],[1674575380000,266068],[1674575390000,266068],[1674575400000,291411],[1674575410000,107555],[1674575420000,132893],[1674575430000,183559],[1674575440000,208909],[1674575450000,208909],[1674575460000,234251],[1674575470000,259596],[1674575480000,284930]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.merges.total_size_in_bytes","metricAgg":"max","label":"Merges","title":"Disk","description":"Size of merges on primary and replica shards.","units":"B","format":"0,0.0 b","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,25338.2],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,25338.6],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,27215.6],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.merges.total_size_in_bytes","metricAgg":"max","label":"Merges (Primaries)","title":"Disk","description":"Size of merges on primary shards.","units":"B","format":"0,0.0 b","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,25338.2],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,25338.6],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,27215.6],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]}],"index_segment_count":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.segments.count","metricAgg":"max","label":"Total","title":"Segment Count","description":"Number of segments for primary and replica shards.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,2],[1674575140000,3],[1674575150000,4],[1674575160000,5],[1674575170000,6],[1674575180000,7],[1674575190000,8],[1674575200000,9],[1674575210000,10],[1674575220000,2],[1674575230000,3],[1674575240000,4],[1674575250000,5],[1674575260000,6],[1674575270000,7],[1674575280000,8],[1674575290000,9],[1674575300000,10],[1674575310000,2],[1674575320000,3],[1674575330000,4],[1674575340000,5],[1674575350000,6],[1674575360000,7],[1674575370000,8],[1674575380000,9],[1674575390000,10],[1674575400000,2],[1674575410000,3],[1674575420000,4],[1674575430000,5],[1674575440000,6],[1674575450000,7],[1674575460000,8],[1674575470000,9],[1674575480000,10]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.segments.count","metricAgg":"max","label":"Primaries","title":"Segment Count","description":"Number of segments for primary shards.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,2],[1674575140000,3],[1674575150000,4],[1674575160000,5],[1674575170000,6],[1674575180000,7],[1674575190000,8],[1674575200000,9],[1674575210000,10],[1674575220000,2],[1674575230000,3],[1674575240000,4],[1674575250000,5],[1674575260000,6],[1674575270000,7],[1674575280000,8],[1674575290000,9],[1674575300000,10],[1674575310000,2],[1674575320000,3],[1674575330000,4],[1674575340000,5],[1674575350000,6],[1674575360000,7],[1674575370000,8],[1674575380000,9],[1674575390000,10],[1674575400000,2],[1674575410000,3],[1674575420000,4],[1674575430000,5],[1674575440000,6],[1674575450000,7],[1674575460000,8],[1674575470000,9],[1674575480000,10]]}],"index_latency":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.primaries.indexing.index_total","metricAgg":"sum","label":"Indexing Latency","title":"Latency","description":"Average latency for indexing documents, which is time it takes to index documents divided by number that were indexed. This only considers primary shards.","units":"ms","format":"0,0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,null],[1674575140000,1],[1674575150000,0],[1674575160000,1],[1674575170000,1],[1674575180000,0],[1674575190000,1],[1674575200000,1],[1674575210000,1],[1674575220000,1],[1674575230000,0],[1674575240000,1],[1674575250000,1],[1674575260000,0],[1674575270000,47.99999999999999],[1674575280000,1],[1674575290000,0],[1674575300000,1],[1674575310000,1],[1674575320000,0],[1674575330000,1],[1674575340000,0],[1674575350000,1],[1674575360000,1],[1674575370000,1],[1674575380000,0],[1674575390000,1],[1674575400000,1],[1674575410000,1],[1674575420000,0],[1674575430000,1],[1674575440000,1],[1674575450000,1],[1674575460000,1],[1674575470000,0],[1674575480000,4]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"index_stats.total.search.query_total","metricAgg":"sum","label":"Search Latency","description":"Average latency for searching, which is time it takes to execute searches divided by number of searches submitted. This considers primary and replica shards.","units":"ms","format":"0,0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,null],[1674575140000,0.5714285714285715],[1674575150000,0.5714285714285715],[1674575160000,0.5714285714285715],[1674575170000,0.5714285714285715],[1674575180000,0.7142857142857143],[1674575190000,0.5714285714285715],[1674575200000,0],[1674575210000,0.4285714285714286],[1674575220000,0.5714285714285715],[1674575230000,0.4285714285714286],[1674575240000,0.4285714285714286],[1674575250000,0.5714285714285715],[1674575260000,0.4285714285714286],[1674575270000,0.4285714285714286],[1674575280000,0.5714285714285715],[1674575290000,0.5714285714285715],[1674575300000,0.4285714285714286],[1674575310000,0.5714285714285715],[1674575320000,0.4285714285714286],[1674575330000,0.28571428571428575],[1674575340000,0.5714285714285715],[1674575350000,1.2857142857142858],[1674575360000,0.4285714285714286],[1674575370000,0.4285714285714286],[1674575380000,0.5714285714285715],[1674575390000,0.5714285714285715],[1674575400000,0.4285714285714286],[1674575410000,0.4285714285714286],[1674575420000,0.28571428571428575],[1674575430000,0.4285714285714286],[1674575440000,0.5714285714285715],[1674575450000,0.28571428571428575],[1674575460000,0.4285714285714286],[1674575470000,0.5714285714285715],[1674575480000,0.5714285714285715]]}]}} diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/indices_all.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/indices_all.json new file mode 100644 index 0000000000000..108eeb785c735 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/indices_all.json @@ -0,0 +1 @@ +{"clusterStatus":{"status":"yellow","indicesCount":47,"documentCount":39688,"dataSize":33007934,"nodesCount":1,"upTime":779257,"version":["8.7.0"],"memUsed":586378752,"memMax":1073741824,"unassignedShards":28,"totalShards":75},"indices":[{"name":".ds-metrics-system.socket_summary-default-2023.01.24-000001","status":"yellow","doc_count":33,"data_size":129457,"index_rate":0.09722222222222222,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-elasticsearch.stack_monitoring.node_stats-default-2023.01.24-000001","status":"yellow","doc_count":37,"data_size":383792,"index_rate":0.09722222222222222,"search_rate":0.4722222222222222,"unassigned_shards":1,"status_sort":2},{"name":".ds-kibana_sample_data_logs-2023.01.24-000001","status":"green","doc_count":14074,"data_size":8521244,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-system.filesystem-default-2023.01.24-000001","status":"yellow","doc_count":7,"data_size":88921,"index_rate":0.016666666666666666,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-logs-elastic_agent.metricbeat-default-2023.01.24-000001","status":"yellow","doc_count":660,"data_size":245731,"index_rate":0.2972222222222222,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-logs-elastic_agent.filebeat-default-2023.01.24-000001","status":"yellow","doc_count":289,"data_size":179290,"index_rate":0.1,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":"kibana_sample_data_ecommerce","status":"green","doc_count":4675,"data_size":4274251,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-elasticsearch.stack_monitoring.enrich-default-2023.01.24-000001","status":"yellow","doc_count":37,"data_size":129059,"index_rate":0.09722222222222222,"search_rate":0.4722222222222222,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-elasticsearch.stack_monitoring.node-default-2023.01.24-000001","status":"yellow","doc_count":37,"data_size":150888,"index_rate":0.09722222222222222,"search_rate":0.4722222222222222,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-elastic_agent.metricbeat-default-2023.01.24-000001","status":"yellow","doc_count":70,"data_size":148212,"index_rate":0.3888888888888889,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".security-profile-8","status":"green","doc_count":1,"data_size":8775,"index_rate":0,"search_rate":0.2916666666666667,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-elasticsearch.stack_monitoring.cluster_stats-default-2023.01.24-000001","status":"yellow","doc_count":37,"data_size":284930,"index_rate":0.09722222222222222,"search_rate":0.6611111111111111,"unassigned_shards":1,"status_sort":2},{"name":".fleet-enrollment-api-keys-7","status":"green","doc_count":3,"data_size":14260,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-system.process.summary-default-2023.01.24-000001","status":"yellow","doc_count":33,"data_size":109010,"index_rate":0.09722222222222222,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-elastic_agent.fleet_server-default-2023.01.24-000001","status":"yellow","doc_count":34,"data_size":70004,"index_rate":0.09722222222222222,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-elasticsearch.stack_monitoring.shard-default-2023.01.24-000001","status":"yellow","doc_count":209,"data_size":74177,"index_rate":0.20833333333333334,"search_rate":0.5666666666666667,"unassigned_shards":1,"status_sort":2},{"name":".apm-agent-configuration","status":"green","doc_count":0,"data_size":225,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".kibana_task_manager_8.7.0_001","status":"green","doc_count":27,"data_size":160063,"index_rate":0.5583333333333333,"search_rate":1.5138888888888888,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-system.load-default-2023.01.24-000001","status":"yellow","doc_count":33,"data_size":111911,"index_rate":0.09722222222222222,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":"kibana_sample_data_flights","status":"green","doc_count":13059,"data_size":5982692,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".fleet-policies-leader-7","status":"green","doc_count":3,"data_size":49295,"index_rate":0.13333333333333333,"search_rate":0.044444444444444446,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-elasticsearch.stack_monitoring.index_summary-default-2023.01.24-000001","status":"yellow","doc_count":37,"data_size":200392,"index_rate":0.09722222222222222,"search_rate":0.4722222222222222,"unassigned_shards":1,"status_sort":2},{"name":".ds-logs-elastic_agent-default-2023.01.24-000001","status":"yellow","doc_count":247,"data_size":243067,"index_rate":0,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".security-7","status":"green","doc_count":161,"data_size":514360,"index_rate":0,"search_rate":0.4888888888888889,"unassigned_shards":0,"status_sort":1},{"name":".kibana-event-log-8.7.0-snapshot-000001","status":"green","doc_count":1,"data_size":7207,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".fleet-agents-7","status":"green","doc_count":2,"data_size":200002,"index_rate":0.06666666666666667,"search_rate":0.025,"unassigned_shards":0,"status_sort":1},{"name":".fleet-servers-7","status":"green","doc_count":1,"data_size":73685,"index_rate":0.044444444444444446,"search_rate":0.002777777777777778,"unassigned_shards":0,"status_sort":1},{"name":".kibana_8.7.0_001","status":"green","doc_count":1983,"data_size":7087816,"index_rate":0.041666666666666664,"search_rate":0.1,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-system.diskio-default-2023.01.24-000001","status":"yellow","doc_count":96,"data_size":144549,"index_rate":0.2916666666666667,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-system.network-default-2023.01.24-000001","status":"yellow","doc_count":162,"data_size":165553,"index_rate":0.4861111111111111,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".async-search","status":"green","doc_count":2,"data_size":13073,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-system.memory-default-2023.01.24-000001","status":"yellow","doc_count":33,"data_size":123927,"index_rate":0.09722222222222222,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-elasticsearch.stack_monitoring.index_recovery-default-2023.01.24-000001","status":"yellow","doc_count":1102,"data_size":478248,"index_rate":2.9166666666666665,"search_rate":0.6611111111111111,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-system.process-default-2023.01.24-000001","status":"yellow","doc_count":202,"data_size":458256,"index_rate":0.6416666666666667,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-system.fsstat-default-2023.01.24-000001","status":"yellow","doc_count":7,"data_size":77014,"index_rate":0.016666666666666666,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".apm-source-map","status":"yellow","doc_count":0,"data_size":225,"index_rate":0,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-ilm-history-5-2023.01.24-000001","status":"green","doc_count":90,"data_size":51965,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-elastic_agent.elastic_agent-default-2023.01.24-000001","status":"yellow","doc_count":171,"data_size":250785,"index_rate":0.5833333333333334,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-logs-elastic_agent.fleet_server-default-2023.01.24-000001","status":"yellow","doc_count":147,"data_size":150532,"index_rate":0.005555555555555556,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-elastic_agent.filebeat-default-2023.01.24-000001","status":"yellow","doc_count":68,"data_size":124701,"index_rate":0.19444444444444445,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".ds-metrics-system.uptime-default-2023.01.24-000001","status":"yellow","doc_count":33,"data_size":102739,"index_rate":0.09722222222222222,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".kibana_security_session_1","status":"green","doc_count":1,"data_size":6840,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-system.cpu-default-2023.01.24-000001","status":"yellow","doc_count":33,"data_size":134828,"index_rate":0.09722222222222222,"search_rate":0,"unassigned_shards":1,"status_sort":2},{"name":".apm-custom-link","status":"green","doc_count":0,"data_size":225,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".ds-.logs-deprecation.elasticsearch-default-2023.01.24-000001","status":"green","doc_count":3,"data_size":26374,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":".ds-metrics-elasticsearch.stack_monitoring.index-default-2023.01.24-000001","status":"yellow","doc_count":1731,"data_size":1191783,"index_rate":4.569444444444445,"search_rate":0.4722222222222222,"unassigned_shards":1,"status_sort":2},{"name":".fleet-policies-7","status":"green","doc_count":17,"data_size":63601,"index_rate":0,"search_rate":0.044444444444444446,"unassigned_shards":0,"status_sort":1}]} diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/indices_no_system.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/indices_no_system.json new file mode 100644 index 0000000000000..ed04481cab055 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/indices_no_system.json @@ -0,0 +1 @@ +{"clusterStatus":{"status":"yellow","indicesCount":47,"documentCount":39688,"dataSize":33007934,"nodesCount":1,"upTime":779257,"version":["8.7.0"],"memUsed":586378752,"memMax":1073741824,"unassignedShards":28,"totalShards":75},"indices":[{"name":"kibana_sample_data_ecommerce","status":"green","doc_count":4675,"data_size":4274251,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1},{"name":"kibana_sample_data_flights","status":"green","doc_count":13059,"data_size":5982692,"index_rate":0,"search_rate":0,"unassigned_shards":0,"status_sort":1}]} diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/ml_jobs.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/ml_jobs.json new file mode 100644 index 0000000000000..6ab7eb819a934 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/ml_jobs.json @@ -0,0 +1 @@ +{"clusterStatus":{"status":"yellow","indicesCount":47,"documentCount":39688,"dataSize":33007934,"nodesCount":1,"upTime":779257,"version":["8.7.0"],"memUsed":586378752,"memMax":1073741824,"unassignedShards":28,"totalShards":75},"rows":[{"ml":{"job":{"data_counts":{"processed_record_count":44},"id":"high_mean_cpu_iowait_ecs","state":"closed","forecasts_stats":{"total":0}}},"node":{}},{"ml":{"job":{"data_counts":{"processed_record_count":8},"id":"max_disk_utilization_ecs","state":"closed","forecasts_stats":{"total":0}}},"node":{}},{"ml":{"job":{"data_counts":{"processed_record_count":1029},"id":"metricbeat_outages_ecs","state":"closed","forecasts_stats":{"total":0}}},"node":{}}]} diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/node_detail.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/node_detail.json new file mode 100644 index 0000000000000..370dcb08a19da --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/node_detail.json @@ -0,0 +1 @@ +{"nodeSummary":{"resolver":"1ksGajLvSW-OwnAYH-X3Sg","node_ids":["1ksGajLvSW-OwnAYH-X3Sg"],"transport_address":"https://elasticsearch:9200","name":"712a47f7f7df","type":"master","nodeTypeLabel":"Master Node","nodeTypeClass":"starFilled","totalShards":47,"indexCount":47,"documents":39688,"dataSize":33007934,"freeSpace":37511475200,"totalSpace":193393164288,"usedHeap":54,"status":"Online","isOnline":true},"metrics":{"node_total_io":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.fs.io_stats.total.operations","metricAgg":"max","label":"Total I/O","title":"I/O Operations Rate","description":"Total I/O. (This metric is not supported on all platforms and may display N/A if I/O data is unavailable.)","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,null],[1674575140000,null],[1674575150000,null],[1674575160000,null],[1674575170000,null],[1674575180000,null],[1674575190000,null],[1674575200000,null],[1674575210000,null],[1674575220000,null],[1674575230000,null],[1674575240000,null],[1674575250000,null],[1674575260000,null],[1674575270000,null],[1674575280000,null],[1674575290000,null],[1674575300000,null],[1674575310000,null],[1674575320000,null],[1674575330000,null],[1674575340000,null],[1674575350000,null],[1674575360000,null],[1674575370000,null],[1674575380000,null],[1674575390000,null],[1674575400000,null],[1674575410000,null],[1674575420000,null],[1674575430000,null],[1674575440000,null],[1674575450000,null],[1674575460000,null],[1674575470000,null],[1674575480000,null]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.fs.io_stats.total.read_operations","metricAgg":"max","label":"Total Read I/O","title":"I/O Operations Rate","description":"Total Read I/O. (This metric is not supported on all platforms and may display N/A if I/O data is unavailable.)","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,null],[1674575140000,null],[1674575150000,null],[1674575160000,null],[1674575170000,null],[1674575180000,null],[1674575190000,null],[1674575200000,null],[1674575210000,null],[1674575220000,null],[1674575230000,null],[1674575240000,null],[1674575250000,null],[1674575260000,null],[1674575270000,null],[1674575280000,null],[1674575290000,null],[1674575300000,null],[1674575310000,null],[1674575320000,null],[1674575330000,null],[1674575340000,null],[1674575350000,null],[1674575360000,null],[1674575370000,null],[1674575380000,null],[1674575390000,null],[1674575400000,null],[1674575410000,null],[1674575420000,null],[1674575430000,null],[1674575440000,null],[1674575450000,null],[1674575460000,null],[1674575470000,null],[1674575480000,null]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.fs.io_stats.total.write_operations","metricAgg":"max","label":"Total Write I/O","title":"I/O Operations Rate","description":"Total Write I/O. (This metric is not supported on all platforms and may display N/A if I/O data is unavailable.)","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,null],[1674575140000,null],[1674575150000,null],[1674575160000,null],[1674575170000,null],[1674575180000,null],[1674575190000,null],[1674575200000,null],[1674575210000,null],[1674575220000,null],[1674575230000,null],[1674575240000,null],[1674575250000,null],[1674575260000,null],[1674575270000,null],[1674575280000,null],[1674575290000,null],[1674575300000,null],[1674575310000,null],[1674575320000,null],[1674575330000,null],[1674575340000,null],[1674575350000,null],[1674575360000,null],[1674575370000,null],[1674575380000,null],[1674575390000,null],[1674575400000,null],[1674575410000,null],[1674575420000,null],[1674575430000,null],[1674575440000,null],[1674575450000,null],[1674575460000,null],[1674575470000,null],[1674575480000,null]]}],"node_latency":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.search.query_total","metricAgg":"sum","label":"Search","title":"Latency","description":"Average latency for searching, which is time it takes to execute searches divided by number of searches submitted. This considers primary and replica shards.","units":"ms","format":"0,0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,null],[1674575140000,0.6527777777777778],[1674575150000,0.6176470588235294],[1674575160000,0.4861111111111111],[1674575170000,1.802816901408451],[1674575180000,1.787878787878788],[1674575190000,0.5],[1674575200000,0.5416666666666667],[1674575210000,0.4264705882352941],[1674575220000,0.5211267605633804],[1674575230000,0.5068493150684932],[1674575240000,0.45312499999999994],[1674575250000,0.43243243243243246],[1674575260000,0.4411764705882353],[1674575270000,1.2352941176470589],[1674575280000,0.45945945945945943],[1674575290000,0.5571428571428572],[1674575300000,0.3731343283582089],[1674575310000,0.45070422535211274],[1674575320000,0.4444444444444445],[1674575330000,0.34375],[1674575340000,0.5405405405405405],[1674575350000,1.338235294117647],[1674575360000,0.554054054054054],[1674575370000,0.36619718309859156],[1674575380000,0.6176470588235294],[1674575390000,0.5882352941176471],[1674575400000,0.3918918918918919],[1674575410000,0.4090909090909091],[1674575420000,0.39436619718309857],[1674575430000,0.39436619718309857],[1674575440000,0.44776119402985076],[1674575450000,0.37681159420289856],[1674575460000,0.4647887323943662],[1674575470000,0.5316455696202531],[1674575480000,0.6595744680851063]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.indexing.index_total","metricAgg":"sum","label":"Indexing","title":"Latency","description":"Average latency for indexing documents, which is time it takes to index documents divided by number that were indexed. This considers any shard located on this node, including replicas.","units":"ms","format":"0,0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,null],[1674575140000,0.15322580645161288],[1674575150000,0.1911764705882353],[1674575160000,0.16935483870967744],[1674575170000,0.15671641791044777],[1674575180000,0.15909090909090912],[1674575190000,0.16666666666666669],[1674575200000,0.16935483870967744],[1674575210000,0.18045112781954886],[1674575220000,0.1953125],[1674575230000,0.1328125],[1674575240000,0.1450381679389313],[1674575250000,0.1811023622047244],[1674575260000,0.13709677419354838],[1674575270000,0.5413533834586466],[1674575280000,0.18253968253968253],[1674575290000,0.1382113821138211],[1674575300000,0.14074074074074072],[1674575310000,0.16129032258064516],[1674575320000,0.32031249999999994],[1674575330000,0.1640625],[1674575340000,0.11707317073170731],[1674575350000,0.17968749999999997],[1674575360000,0.19863013698630136],[1674575370000,0.20967741935483872],[1674575380000,0.152],[1674575390000,0.16666666666666669],[1674575400000,0.15267175572519084],[1674575410000,0.15833333333333333],[1674575420000,0.1691176470588235],[1674575430000,0.15079365079365079],[1674575440000,0.1652892561983471],[1674575450000,0.21481481481481482],[1674575460000,0.1138211382113821],[1674575470000,0.140625],[1674575480000,0.21641791044776118]]}],"node_jvm_mem":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.jvm.mem.heap_max_in_bytes","metricAgg":"max","label":"Max Heap","title":"JVM Heap","description":"Total heap available to Elasticsearch running in the JVM.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,1073741824],[1674575140000,1073741824],[1674575150000,1073741824],[1674575160000,1073741824],[1674575170000,1073741824],[1674575180000,1073741824],[1674575190000,1073741824],[1674575200000,1073741824],[1674575210000,1073741824],[1674575220000,1073741824],[1674575230000,1073741824],[1674575240000,1073741824],[1674575250000,1073741824],[1674575260000,1073741824],[1674575270000,1073741824],[1674575280000,1073741824],[1674575290000,1073741824],[1674575300000,1073741824],[1674575310000,1073741824],[1674575320000,1073741824],[1674575330000,1073741824],[1674575340000,1073741824],[1674575350000,1073741824],[1674575360000,1073741824],[1674575370000,1073741824],[1674575380000,1073741824],[1674575390000,1073741824],[1674575400000,1073741824],[1674575410000,1073741824],[1674575420000,1073741824],[1674575430000,1073741824],[1674575440000,1073741824],[1674575450000,1073741824],[1674575460000,1073741824],[1674575470000,1073741824],[1674575480000,1073741824]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.jvm.mem.heap_used_in_bytes","metricAgg":"max","label":"Used Heap","title":"JVM Heap","description":"Total heap used by Elasticsearch running in the JVM.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,552044032],[1674575140000,707233280],[1674575150000,284409344],[1674575160000,447987200],[1674575170000,628342272],[1674575180000,201092608],[1674575190000,364670464],[1674575200000,511471104],[1674575210000,675048960],[1674575220000,353320448],[1674575230000,512704000],[1674575240000,663698944],[1674575250000,246750720],[1674575260000,406134272],[1674575270000,569712128],[1674575280000,750067200],[1674575290000,335591936],[1674575300000,494975488],[1674575310000,738245120],[1674575320000,325381120],[1674575330000,505736192],[1674575340000,694479872],[1674575350000,281868288],[1674575360000,495777792],[1674575370000,667744256],[1674575380000,247774208],[1674575390000,436517888],[1674575400000,679787520],[1674575410000,250852352],[1674575420000,443790336],[1674575430000,624145408],[1674575440000,193553920],[1674575450000,382297600],[1674575460000,562652672],[1674575470000,784950784],[1674575480000,586378752]]}],"node_cpu_metric":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.process.cpu.percent","metricAgg":"max","label":"CPU Utilization","description":"Percentage of CPU usage for the Elasticsearch process.","units":"%","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,6],[1674575140000,5],[1674575150000,10],[1674575160000,5],[1674575170000,7],[1674575180000,6],[1674575190000,5],[1674575200000,4],[1674575210000,6],[1674575220000,10],[1674575230000,5],[1674575240000,5],[1674575250000,5],[1674575260000,5],[1674575270000,4],[1674575280000,6],[1674575290000,6],[1674575300000,4],[1674575310000,5],[1674575320000,7],[1674575330000,5],[1674575340000,5],[1674575350000,6],[1674575360000,7],[1674575370000,4],[1674575380000,6],[1674575390000,6],[1674575400000,5],[1674575410000,5],[1674575420000,5],[1674575430000,4],[1674575440000,4],[1674575450000,4],[1674575460000,5],[1674575470000,5],[1674575480000,15]]}],"node_load_average":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.os.cpu.load_average.1m","metricAgg":"max","label":"1m","title":"System Load","description":"Load average over the last minute.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,0.58984375],[1674575140000,0.64990234375],[1674575150000,0.5498046875],[1674575160000,0.5498046875],[1674575170000,0.68017578125],[1674575180000,0.740234375],[1674575190000,0.93994140625],[1674575200000,0.9501953125],[1674575210000,1.2099609375],[1674575220000,1.400390625],[1674575230000,1.5],[1674575240000,1.349609375],[1674575250000,1.2099609375],[1674575260000,1.099609375],[1674575270000,0.93017578125],[1674575280000,1.1103515625],[1674575290000,1.259765625],[1674575300000,1.0703125],[1674575310000,0.89990234375],[1674575320000,0.759765625],[1674575330000,0.93994140625],[1674575340000,0.7998046875],[1674575350000,0.91015625],[1674575360000,1.08984375],[1674575370000,1.08984375],[1674575380000,0.919921875],[1674575390000,1.330078125],[1674575400000,1.2099609375],[1674575410000,1.01953125],[1674575420000,0.93994140625],[1674575430000,0.8798828125],[1674575440000,0.81982421875],[1674575450000,0.68994140625],[1674575460000,0.66015625],[1674575470000,0.56005859375],[1674575480000,0.6298828125]]}],"node_segment_count":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.segments.count","metricAgg":"max","label":"Segment Count","description":"Maximum segment count for primary and replica shards on this node.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,187],[1674575140000,199],[1674575150000,202],[1674575160000,213],[1674575170000,218],[1674575180000,219],[1674575190000,222],[1674575200000,233],[1674575210000,237],[1674575220000,170],[1674575230000,184],[1674575240000,194],[1674575250000,198],[1674575260000,209],[1674575270000,220],[1674575280000,224],[1674575290000,226],[1674575300000,237],[1674575310000,185],[1674575320000,189],[1674575330000,198],[1674575340000,212],[1674575350000,214],[1674575360000,213],[1674575370000,226],[1674575380000,228],[1674575390000,230],[1674575400000,180],[1674575410000,188],[1674575420000,195],[1674575430000,207],[1674575440000,217],[1674575450000,221],[1674575460000,231],[1674575470000,236],[1674575480000,239]]}]},"logs":{"enabled":false,"logs":[],"reason":{"indexPatternExists":false,"indexPatternInTimeRangeExists":false,"typeExistsAtAnyTime":false,"typeExists":false,"usingStructuredLogs":false,"clusterExists":false,"nodeExists":false,"indexExists":null},"limit":10},"shards":[{"index":"kibana_sample_data_flights","node":"1ksGajLvSW-OwnAYH-X3Sg","primary":true,"relocating_node":null,"shard":0,"state":"STARTED"},{"index":"kibana_sample_data_ecommerce","node":"1ksGajLvSW-OwnAYH-X3Sg","primary":true,"relocating_node":null,"shard":0,"state":"STARTED"}],"shardStats":{"indices":{".apm-agent-configuration":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".apm-custom-link":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".apm-source-map":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".async-search":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-.logs-deprecation.elasticsearch-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-ilm-history-5-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-kibana_sample_data_logs-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-logs-elastic_agent-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-logs-elastic_agent.filebeat-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-logs-elastic_agent.fleet_server-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-logs-elastic_agent.metricbeat-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elastic_agent.elastic_agent-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elastic_agent.filebeat-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elastic_agent.fleet_server-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elastic_agent.metricbeat-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elasticsearch.stack_monitoring.cluster_stats-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elasticsearch.stack_monitoring.enrich-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elasticsearch.stack_monitoring.index-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elasticsearch.stack_monitoring.index_recovery-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elasticsearch.stack_monitoring.index_summary-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elasticsearch.stack_monitoring.node-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elasticsearch.stack_monitoring.node_stats-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-elasticsearch.stack_monitoring.shard-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.cpu-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.diskio-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.filesystem-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.fsstat-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.load-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.memory-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.network-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.process-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.process.summary-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.socket_summary-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".ds-metrics-system.uptime-default-2023.01.24-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".fleet-agents-7":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".fleet-enrollment-api-keys-7":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".fleet-policies-7":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".fleet-policies-leader-7":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".fleet-servers-7":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".kibana-event-log-8.7.0-snapshot-000001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".kibana_8.7.0_001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".kibana_security_session_1":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".kibana_task_manager_8.7.0_001":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".security-7":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},".security-profile-8":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},"kibana_sample_data_ecommerce":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}},"kibana_sample_data_flights":{"status":"green","primary":1,"replica":0,"unassigned":{"primary":0,"replica":0}}}},"nodes":{"1ksGajLvSW-OwnAYH-X3Sg":{"shardCount":47,"indexCount":47,"name":"712a47f7f7df","node_ids":["1ksGajLvSW-OwnAYH-X3Sg"],"type":"master"}},"stateUuid":"v1_XbWynRRGKGG7gX7U86g"} diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/node_detail_advanced.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/node_detail_advanced.json new file mode 100644 index 0000000000000..7ce5184d1f2af --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/node_detail_advanced.json @@ -0,0 +1 @@ +{"nodeSummary":{"resolver":"1ksGajLvSW-OwnAYH-X3Sg","node_ids":["1ksGajLvSW-OwnAYH-X3Sg"],"transport_address":"https://elasticsearch:9200","name":"712a47f7f7df","type":"master","nodeTypeLabel":"Master Node","nodeTypeClass":"starFilled","totalShards":47,"indexCount":47,"documents":39688,"dataSize":33007934,"freeSpace":37511475200,"totalSpace":193393164288,"usedHeap":54,"status":"Online","isOnline":true},"metrics":{"node_jvm_mem":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.jvm.mem.heap_max_in_bytes","metricAgg":"max","label":"Max Heap","title":"JVM Heap","description":"Total heap available to Elasticsearch running in the JVM.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,1073741824],[1674575140000,1073741824],[1674575150000,1073741824],[1674575160000,1073741824],[1674575170000,1073741824],[1674575180000,1073741824],[1674575190000,1073741824],[1674575200000,1073741824],[1674575210000,1073741824],[1674575220000,1073741824],[1674575230000,1073741824],[1674575240000,1073741824],[1674575250000,1073741824],[1674575260000,1073741824],[1674575270000,1073741824],[1674575280000,1073741824],[1674575290000,1073741824],[1674575300000,1073741824],[1674575310000,1073741824],[1674575320000,1073741824],[1674575330000,1073741824],[1674575340000,1073741824],[1674575350000,1073741824],[1674575360000,1073741824],[1674575370000,1073741824],[1674575380000,1073741824],[1674575390000,1073741824],[1674575400000,1073741824],[1674575410000,1073741824],[1674575420000,1073741824],[1674575430000,1073741824],[1674575440000,1073741824],[1674575450000,1073741824],[1674575460000,1073741824],[1674575470000,1073741824],[1674575480000,1073741824]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.jvm.mem.heap_used_in_bytes","metricAgg":"max","label":"Used Heap","title":"JVM Heap","description":"Total heap used by Elasticsearch running in the JVM.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,552044032],[1674575140000,707233280],[1674575150000,284409344],[1674575160000,447987200],[1674575170000,628342272],[1674575180000,201092608],[1674575190000,364670464],[1674575200000,511471104],[1674575210000,675048960],[1674575220000,353320448],[1674575230000,512704000],[1674575240000,663698944],[1674575250000,246750720],[1674575260000,406134272],[1674575270000,569712128],[1674575280000,750067200],[1674575290000,335591936],[1674575300000,494975488],[1674575310000,738245120],[1674575320000,325381120],[1674575330000,505736192],[1674575340000,694479872],[1674575350000,281868288],[1674575360000,495777792],[1674575370000,667744256],[1674575380000,247774208],[1674575390000,436517888],[1674575400000,679787520],[1674575410000,250852352],[1674575420000,443790336],[1674575430000,624145408],[1674575440000,193553920],[1674575450000,382297600],[1674575460000,562652672],[1674575470000,784950784],[1674575480000,586378752]]}],"node_gc":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.jvm.gc.collectors.old.collection_count","metricAgg":"max","label":"Old","title":"GC Rate","description":"Number of old Garbage Collections.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.jvm.gc.collectors.young.collection_count","metricAgg":"max","label":"Young","title":"GC Rate","description":"Number of young Garbage Collections.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0.1],[1674575160000,0],[1674575170000,0],[1674575180000,0.1],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0.1],[1674575230000,0],[1674575240000,0],[1674575250000,0.1],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0.1],[1674575300000,0],[1674575310000,0],[1674575320000,0.1],[1674575330000,0],[1674575340000,0],[1674575350000,0.1],[1674575360000,0],[1674575370000,0],[1674575380000,0.1],[1674575390000,0],[1674575400000,0],[1674575410000,0.1],[1674575420000,0],[1674575430000,0],[1674575440000,0.1],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0.1]]}],"node_gc_time":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.jvm.gc.collectors.old.collection_time_in_millis","metricAgg":"max","label":"Old","title":"GC Duration","description":"Time spent performing old Garbage Collections.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.jvm.gc.collectors.young.collection_time_in_millis","metricAgg":"max","label":"Young","title":"GC Duration","description":"Time spent performing young Garbage Collections.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,4.2],[1674575160000,0],[1674575170000,0],[1674575180000,2.7],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,4.3],[1674575230000,0],[1674575240000,0],[1674575250000,2.3],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,3.1],[1674575300000,0],[1674575310000,0],[1674575320000,2.2],[1674575330000,0],[1674575340000,0],[1674575350000,2.5],[1674575360000,0],[1674575370000,0],[1674575380000,4.7],[1674575390000,0],[1674575400000,0],[1674575410000,3],[1674575420000,0],[1674575430000,0],[1674575440000,3.3],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,2.5]]}],"node_index_3":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.segments.fixed_bit_set_memory_in_bytes","metricAgg":"max","label":"Fixed Bitsets","title":"Index Memory - Lucene","description":"Heap memory used by Fixed Bit Sets (e.g., deeply nested documents). This is a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,704],[1674575140000,768],[1674575150000,688],[1674575160000,752],[1674575170000,832],[1674575180000,736],[1674575190000,800],[1674575200000,864],[1674575210000,768],[1674575220000,720],[1674575230000,800],[1674575240000,832],[1674575250000,752],[1674575260000,816],[1674575270000,848],[1674575280000,800],[1674575290000,720],[1674575300000,752],[1674575310000,816],[1674575320000,736],[1674575330000,768],[1674575340000,832],[1674575350000,752],[1674575360000,736],[1674575370000,832],[1674575380000,864],[1674575390000,784],[1674575400000,848],[1674575410000,848],[1674575420000,768],[1674575430000,816],[1674575440000,864],[1674575450000,784],[1674575460000,832],[1674575470000,768],[1674575480000,832]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.segments.version_map_memory_in_bytes","metricAgg":"max","label":"Version Map","title":"Index Memory","description":"Heap memory used by Versioning (e.g., updates and deletes). This is NOT a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,348],[1674575160000,348],[1674575170000,1032],[1674575180000,348],[1674575190000,348],[1674575200000,348],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,174],[1674575260000,174],[1674575270000,348],[1674575280000,348],[1674575290000,348],[1674575300000,348],[1674575310000,348],[1674575320000,348],[1674575330000,348],[1674575340000,348],[1674575350000,1410],[1674575360000,834],[1674575370000,348],[1674575380000,348],[1674575390000,348],[1674575400000,348],[1674575410000,0],[1674575420000,0],[1674575430000,168],[1674575440000,0],[1674575450000,174],[1674575460000,516],[1674575470000,348],[1674575480000,0]]}],"node_index_4":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.query_cache.memory_size_in_bytes","metricAgg":"max","label":"Query Cache","title":"Index Memory - Elasticsearch","description":"Heap memory used by Query Cache (e.g., cached filters). This is for the same shards, but not a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.request_cache.memory_size_in_bytes","metricAgg":"max","label":"Request Cache","title":"Index Memory","description":"Heap memory used by Request Cache (e.g., instant aggregations). This is for the same shards, but not a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,254888],[1674575140000,127672],[1674575150000,189440],[1674575160000,262768],[1674575170000,337160],[1674575180000,421560],[1674575190000,513456],[1674575200000,69000],[1674575210000,162464],[1674575220000,263648],[1674575230000,372520],[1674575240000,491000],[1674575250000,619176],[1674575260000,67816],[1674575270000,196880],[1674575280000,332192],[1674575290000,475304],[1674575300000,626136],[1674575310000,784624],[1674575320000,241600],[1674575330000,423200],[1674575340000,627232],[1674575350000,824312],[1674575360000,1029040],[1674575370000,1241312],[1674575380000,288544],[1674575390000,517448],[1674575400000,755056],[1674575410000,999752],[1674575420000,1299040],[1674575430000,1545792],[1674575440000,312360],[1674575450000,556080],[1674575460000,806640],[1674575470000,1064080],[1674575480000,1340536]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.fielddata.memory_size_in_bytes","metricAgg":"max","label":"Fielddata","title":"Index Memory","description":"Heap memory used by Fielddata (e.g., global ordinals or explicitly enabled fielddata on text fields). This is for the same shards, but not a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,504],[1674575140000,504],[1674575150000,504],[1674575160000,504],[1674575170000,504],[1674575180000,504],[1674575190000,504],[1674575200000,504],[1674575210000,504],[1674575220000,504],[1674575230000,504],[1674575240000,504],[1674575250000,504],[1674575260000,504],[1674575270000,504],[1674575280000,504],[1674575290000,504],[1674575300000,504],[1674575310000,504],[1674575320000,504],[1674575330000,504],[1674575340000,528],[1674575350000,528],[1674575360000,528],[1674575370000,528],[1674575380000,528],[1674575390000,528],[1674575400000,528],[1674575410000,272],[1674575420000,528],[1674575430000,528],[1674575440000,528],[1674575450000,528],[1674575460000,528],[1674575470000,528],[1674575480000,528]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.segments.index_writer_memory_in_bytes","metricAgg":"max","label":"Index Writer","title":"Index Memory","description":"Heap memory used by the Index Writer. This is NOT a part of Lucene Total.","units":"B","format":"0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,4053336],[1674575140000,4122648],[1674575150000,4703012],[1674575160000,4777368],[1674575170000,5034292],[1674575180000,5445780],[1674575190000,5539300],[1674575200000,5610856],[1674575210000,5376028],[1674575220000,5630244],[1674575230000,5697432],[1674575240000,5793776],[1674575250000,6160632],[1674575260000,6226752],[1674575270000,6328176],[1674575280000,6399460],[1674575290000,6468560],[1674575300000,6560844],[1674575310000,6632560],[1674575320000,6740320],[1674575330000,6830208],[1674575340000,6901240],[1674575350000,7166588],[1674575360000,7256960],[1674575370000,6637952],[1674575380000,6712756],[1674575390000,6799552],[1674575400000,6871800],[1674575410000,6912150],[1674575420000,6357892],[1674575430000,6671452],[1674575440000,6530724],[1674575450000,6926804],[1674575460000,7251116],[1674575470000,7068232],[1674575480000,6853356]]}],"node_request_total":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.search.query_total","metricAgg":"max","label":"Search Total","title":"Request Rate","description":"Amount of search operations (per shard).","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,7.1],[1674575140000,7.2],[1674575150000,6.8],[1674575160000,7.2],[1674575170000,7.1],[1674575180000,6.6],[1674575190000,7.2],[1674575200000,2.4],[1674575210000,6.8],[1674575220000,7.1],[1674575230000,7.3],[1674575240000,6.4],[1674575250000,7.4],[1674575260000,6.8],[1674575270000,6.8],[1674575280000,7.4],[1674575290000,7],[1674575300000,6.7],[1674575310000,7.1],[1674575320000,7.2],[1674575330000,6.4],[1674575340000,7.4],[1674575350000,6.8],[1674575360000,7.4],[1674575370000,7.1],[1674575380000,6.8],[1674575390000,6.8],[1674575400000,7.4],[1674575410000,6.6],[1674575420000,7.1],[1674575430000,7.1],[1674575440000,6.7],[1674575450000,6.9],[1674575460000,7.1],[1674575470000,7.9],[1674575480000,9.4]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.indexing.index_total","metricAgg":"max","label":"Indexing Total","title":"Request Rate","description":"Amount of indexing operations.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,19.6],[1674575140000,12.4],[1674575150000,13.6],[1674575160000,12.4],[1674575170000,13.4],[1674575180000,13.2],[1674575190000,12.6],[1674575200000,12.4],[1674575210000,13.3],[1674575220000,12.8],[1674575230000,12.8],[1674575240000,13.1],[1674575250000,12.7],[1674575260000,12.4],[1674575270000,13.3],[1674575280000,12.6],[1674575290000,12.3],[1674575300000,13.5],[1674575310000,12.4],[1674575320000,12.8],[1674575330000,12.8],[1674575340000,20.5],[1674575350000,12.8],[1674575360000,14.6],[1674575370000,12.4],[1674575380000,12.5],[1674575390000,13.2],[1674575400000,13.1],[1674575410000,12],[1674575420000,13.6],[1674575430000,12.6],[1674575440000,12.1],[1674575450000,13.5],[1674575460000,12.3],[1674575470000,12.8],[1674575480000,13.4]]}],"node_index_time":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.indexing.index_time_in_millis","metricAgg":"max","label":"Index Time","title":"Indexing Time","description":"Amount of time spent on indexing operations.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,3.3],[1674575140000,1.9],[1674575150000,2.6],[1674575160000,2.1],[1674575170000,2.1],[1674575180000,2.1],[1674575190000,2.1],[1674575200000,2.1],[1674575210000,2.4],[1674575220000,2.5],[1674575230000,1.7],[1674575240000,1.9],[1674575250000,2.3],[1674575260000,1.7],[1674575270000,7.2],[1674575280000,2.3],[1674575290000,1.7],[1674575300000,1.9],[1674575310000,2],[1674575320000,4.1],[1674575330000,2.1],[1674575340000,2.4],[1674575350000,2.3],[1674575360000,2.9],[1674575370000,2.6],[1674575380000,1.9],[1674575390000,2.2],[1674575400000,2],[1674575410000,1.9],[1674575420000,2.3],[1674575430000,1.9],[1674575440000,2],[1674575450000,2.9],[1674575460000,1.4],[1674575470000,1.8],[1674575480000,2.9]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.indexing.throttle_time_in_millis","metricAgg":"max","label":"Index Throttling Time","title":"Indexing Time","description":"Amount of time spent with index throttling, which indicates slow disks on a node.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]}],"node_index_threads":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.thread_pool.write.queue","metricAgg":"max","label":"Write Queue","title":"Indexing Threads","description":"Number of index, bulk, and write operations in the queue. The bulk threadpool was renamed to write in 6.3, and the index threadpool is deprecated.","units":"","format":"0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.thread_pool.write.rejected","metricAgg":"max","label":"Write Rejections","title":"Indexing Threads","description":"Number of index, bulk, and write operations that have been rejected, which occurs when the queue is full. The bulk threadpool was renamed to write in 6.3, and the index threadpool is deprecated.","units":"","format":"0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,null],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]}],"node_read_threads":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.thread_pool.search.queue","metricAgg":"max","label":"Search Queue","title":"Read Threads","description":"Number of search operations in the queue (e.g., shard level searches).","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.thread_pool.search.rejected","metricAgg":"max","label":"Search Rejections","title":"Read Threads","description":"Number of search operations that have been rejected, which occurs when the queue is full.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.thread_pool.get.queue","metricAgg":"max","label":"GET Queue","title":"Read Threads","description":"Number of GET operations in the queue.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.thread_pool.get.rejected","metricAgg":"max","label":"GET Rejections","title":"Read Threads","description":"Number of GET operations that have been rejected, which occurs when the queue is full.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0],[1674575210000,0],[1674575220000,0],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]}],"node_cpu_utilization":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.process.cpu.percent","metricAgg":"max","label":"CPU Utilization","description":"Percentage of CPU usage for the Elasticsearch process.","units":"%","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1674575130000,6],[1674575140000,5],[1674575150000,10],[1674575160000,5],[1674575170000,7],[1674575180000,6],[1674575190000,5],[1674575200000,4],[1674575210000,6],[1674575220000,10],[1674575230000,5],[1674575240000,5],[1674575250000,5],[1674575260000,5],[1674575270000,4],[1674575280000,6],[1674575290000,6],[1674575300000,4],[1674575310000,5],[1674575320000,7],[1674575330000,5],[1674575340000,5],[1674575350000,6],[1674575360000,7],[1674575370000,4],[1674575380000,6],[1674575390000,6],[1674575400000,5],[1674575410000,5],[1674575420000,5],[1674575430000,4],[1674575440000,4],[1674575450000,4],[1674575460000,5],[1674575470000,5],[1674575480000,15]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.process.cpu.percent","metricAgg":"max","label":"Cgroup CPU Utilization","title":"CPU Utilization","description":"CPU Usage time compared to the CPU quota shown in percentage. If CPU quotas are not set, then no data will be shown.","units":"%","format":"0,0.[00]","hasCalculation":true,"isDerivative":true},"data":[[1674575130000,9.932179333333332],[1674575140000,7.189654126262626],[1674575150000,12.497820854838707],[1674575160000,8.090102772727272],[1674575170000,9.948483150537633],[1674575180000,8.241960810526317],[1674575190000,7.538191626373626],[1674575200000,7.1454033],[1674575210000,8.55830190625],[1674575220000,12.105556952127658],[1674575230000,7.479955557894737],[1674575240000,7.5453155913978485],[1674575250000,7.611682088888888],[1674575260000,7.697310833333335],[1674575270000,6.851937951086957],[1674575280000,8.120758419354837],[1674575290000,8.623801347058823],[1674575300000,6.193957314606742],[1674575310000,7.770994406593405],[1674575320000,9.311657229885059],[1674575330000,7.355580874999999],[1674575340000,7.509322570652175],[1674575350000,9.06210795882353],[1674575360000,9.562570538888888],[1674575370000,7.243725532967033],[1674575380000,8.942577744565218],[1674575390000,7.730642920731709],[1674575400000,7.27146032967033],[1674575410000,7.136797789772725],[1674575420000,7.1478655894736844],[1674575430000,6.559077831460675],[1674575440000,6.618275951086957],[1674575450000,6.850623777777779],[1674575460000,7.832602384615385],[1674575470000,7.64784261627907],[1674575480000,17.655557410526317]]}],"node_cgroup_cpu":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.os.cgroup.cpuacct.usage_nanos","metricAgg":"max","label":"Cgroup Usage","title":"Cgroup CPU Performance","description":"The usage, reported in nanoseconds, of the cgroup. Compare this with the throttling to discover issues.","units":"ns","format":"0,0.[0]a","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,190697843.2],[1674575140000,142355151.7],[1674575150000,232459467.9],[1674575160000,142385808.8],[1674575170000,185041786.6],[1674575180000,156597255.4],[1674575190000,137195087.6],[1674575200000,135762662.7],[1674575210000,164319396.6],[1674575220000,227584470.7],[1674575230000,142119155.6],[1674575240000,140342870],[1674575250000,137010277.6],[1674575260000,133933208.5],[1674575270000,126075658.3],[1674575280000,151046106.6],[1674575290000,146604622.9],[1674575300000,110252440.2],[1674575310000,141432098.2],[1674575320000,162022835.8],[1674575330000,129458223.4],[1674575340000,138171535.3],[1674575350000,154055835.3],[1674575360000,172126269.7],[1674575370000,131835804.7],[1674575380000,164543430.5],[1674575390000,126782543.9],[1674575400000,132340578],[1674575410000,125607641.1],[1674575420000,135809446.2],[1674575430000,116751585.4],[1674575440000,121776277.5],[1674575450000,123311228],[1674575460000,142553363.4],[1674575470000,131542893],[1674575480000,335455590.8]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.os.cgroup.cpu.stat.time_throttled_nanos","metricAgg":"max","label":"Cgroup Throttling","title":"Cgroup CPU Performance","description":"The amount of throttled time, reported in nanoseconds, of the cgroup.","units":"ns","format":"0,0.[0]a","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,310085.9],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,5028489],[1674575210000,1622002.2],[1674575220000,1097025.9],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,42700427.8],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,105438.5],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,1984966.7],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]}],"node_cgroup_stats":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.os.cgroup.cpu.stat.number_of_elapsed_periods","metricAgg":"max","label":"Cgroup Elapsed Periods","title":"Cgroup CFS Stats","description":"The number of sampling periods from the Completely Fair Scheduler (CFS). Compare against the number of times throttled.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,9.6],[1674575140000,9.9],[1674575150000,9.3],[1674575160000,8.8],[1674575170000,9.3],[1674575180000,9.5],[1674575190000,9.1],[1674575200000,9.5],[1674575210000,9.6],[1674575220000,9.4],[1674575230000,9.5],[1674575240000,9.3],[1674575250000,9],[1674575260000,8.7],[1674575270000,9.2],[1674575280000,9.3],[1674575290000,8.5],[1674575300000,8.9],[1674575310000,9.1],[1674575320000,8.7],[1674575330000,8.8],[1674575340000,9.2],[1674575350000,8.5],[1674575360000,9],[1674575370000,9.1],[1674575380000,9.2],[1674575390000,8.2],[1674575400000,9.1],[1674575410000,8.8],[1674575420000,9.5],[1674575430000,8.9],[1674575440000,9.2],[1674575450000,9],[1674575460000,9.1],[1674575470000,8.6],[1674575480000,9.5]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.os.cgroup.cpu.stat.number_of_times_throttled","metricAgg":"max","label":"Cgroup Throttled Count","title":"Cgroup CFS Stats","description":"The number of times that the CPU was throttled by the cgroup.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,0],[1674575140000,0],[1674575150000,0],[1674575160000,0.1],[1674575170000,0],[1674575180000,0],[1674575190000,0],[1674575200000,0.1],[1674575210000,0.1],[1674575220000,0.1],[1674575230000,0],[1674575240000,0],[1674575250000,0],[1674575260000,0],[1674575270000,0.1],[1674575280000,0],[1674575290000,0],[1674575300000,0],[1674575310000,0.1],[1674575320000,0],[1674575330000,0],[1674575340000,0],[1674575350000,0],[1674575360000,0],[1674575370000,0],[1674575380000,0.1],[1674575390000,0],[1674575400000,0],[1674575410000,0],[1674575420000,0],[1674575430000,0],[1674575440000,0],[1674575450000,0],[1674575460000,0],[1674575470000,0],[1674575480000,0]]}],"node_latency":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.search.query_total","metricAgg":"sum","label":"Search","title":"Latency","description":"Average latency for searching, which is time it takes to execute searches divided by number of searches submitted. This considers primary and replica shards.","units":"ms","format":"0,0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,null],[1674575140000,0.6527777777777778],[1674575150000,0.6176470588235294],[1674575160000,0.4861111111111111],[1674575170000,1.802816901408451],[1674575180000,1.787878787878788],[1674575190000,0.5],[1674575200000,0.5416666666666667],[1674575210000,0.4264705882352941],[1674575220000,0.5211267605633804],[1674575230000,0.5068493150684932],[1674575240000,0.45312499999999994],[1674575250000,0.43243243243243246],[1674575260000,0.4411764705882353],[1674575270000,1.2352941176470589],[1674575280000,0.45945945945945943],[1674575290000,0.5571428571428572],[1674575300000,0.3731343283582089],[1674575310000,0.45070422535211274],[1674575320000,0.4444444444444445],[1674575330000,0.34375],[1674575340000,0.5405405405405405],[1674575350000,1.338235294117647],[1674575360000,0.554054054054054],[1674575370000,0.36619718309859156],[1674575380000,0.6176470588235294],[1674575390000,0.5882352941176471],[1674575400000,0.3918918918918919],[1674575410000,0.4090909090909091],[1674575420000,0.39436619718309857],[1674575430000,0.39436619718309857],[1674575440000,0.44776119402985076],[1674575450000,0.37681159420289856],[1674575460000,0.4647887323943662],[1674575470000,0.5316455696202531],[1674575480000,0.6595744680851063]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"node_stats.indices.indexing.index_total","metricAgg":"sum","label":"Indexing","title":"Latency","description":"Average latency for indexing documents, which is time it takes to index documents divided by number that were indexed. This considers any shard located on this node, including replicas.","units":"ms","format":"0,0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,null],[1674575140000,0.15322580645161288],[1674575150000,0.1911764705882353],[1674575160000,0.16935483870967744],[1674575170000,0.15671641791044777],[1674575180000,0.15909090909090912],[1674575190000,0.16666666666666669],[1674575200000,0.16935483870967744],[1674575210000,0.18045112781954886],[1674575220000,0.1953125],[1674575230000,0.1328125],[1674575240000,0.1450381679389313],[1674575250000,0.1811023622047244],[1674575260000,0.13709677419354838],[1674575270000,0.5413533834586466],[1674575280000,0.18253968253968253],[1674575290000,0.1382113821138211],[1674575300000,0.14074074074074072],[1674575310000,0.16129032258064516],[1674575320000,0.32031249999999994],[1674575330000,0.1640625],[1674575340000,0.11707317073170731],[1674575350000,0.17968749999999997],[1674575360000,0.19863013698630136],[1674575370000,0.20967741935483872],[1674575380000,0.152],[1674575390000,0.16666666666666669],[1674575400000,0.15267175572519084],[1674575410000,0.15833333333333333],[1674575420000,0.1691176470588235],[1674575430000,0.15079365079365079],[1674575440000,0.1652892561983471],[1674575450000,0.21481481481481482],[1674575460000,0.1138211382113821],[1674575470000,0.140625],[1674575480000,0.21641791044776118]]}]}} diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/nodes.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/nodes.json new file mode 100644 index 0000000000000..c3814a2b56fa9 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/nodes.json @@ -0,0 +1 @@ +{"clusterStatus":{"status":"yellow","indicesCount":47,"documentCount":39688,"dataSize":33007934,"nodesCount":1,"upTime":779257,"version":["8.7.0"],"memUsed":586378752,"memMax":1073741824,"unassignedShards":28,"totalShards":75},"nodes":[{"name":"712a47f7f7df","uuid":"1ksGajLvSW-OwnAYH-X3Sg","isOnline":true,"shardCount":47,"node_cgroup_quota":{"metric":{"app":"elasticsearch","field":"node_stats.process.cpu.percent","metricAgg":"max","label":"Cgroup CPU Utilization","title":"CPU Utilization","description":"CPU Usage time compared to the CPU quota shown in percentage. If CPU quotas are not set, then no data will be shown.","units":"%","format":"0,0.[00]","hasCalculation":true,"isDerivative":true},"summary":{"minVal":6.193957314606742,"maxVal":17.655557410526317,"lastVal":17.655557410526317,"slope":-1}},"node_cgroup_throttled":{"metric":{"app":"elasticsearch","field":"node_stats.os.cgroup.cpu.stat.time_throttled_nanos","metricAgg":"max","label":"Cgroup Throttling","title":"Cgroup CPU Performance","description":"The amount of throttled time, reported in nanoseconds, of the cgroup.","units":"ns","format":"0,0.[0]a","hasCalculation":false,"isDerivative":true},"summary":{"minVal":0,"maxVal":61011551272,"lastVal":0,"slope":-1}},"node_cpu_utilization":{"metric":{"app":"elasticsearch","field":"node_stats.process.cpu.percent","metricAgg":"max","label":"CPU Utilization","description":"Percentage of CPU usage for the Elasticsearch process.","units":"%","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"summary":{"minVal":4,"maxVal":15,"lastVal":15,"slope":-1}},"node_load_average":{"metric":{"app":"elasticsearch","field":"node_stats.os.cpu.load_average.1m","metricAgg":"max","label":"1m","title":"System Load","description":"Load average over the last minute.","units":"","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"summary":{"minVal":0.5498046875,"maxVal":1.5,"lastVal":0.6298828125,"slope":-1}},"node_jvm_mem_percent":{"metric":{"app":"elasticsearch","field":"node_stats.jvm.mem.heap_used_percent","metricAgg":"max","label":"Used Heap","title":"JVM Heap","description":"Total heap used by Elasticsearch running in the JVM.","units":"%","format":"0,0.[00]","hasCalculation":false,"isDerivative":false},"summary":{"minVal":18,"maxVal":73,"lastVal":54,"slope":1}},"node_free_space":{"metric":{"app":"elasticsearch","field":"node_stats.fs.total.available_in_bytes","metricAgg":"max","label":"Disk Free Space","description":"Free disk space available on the node.","units":"","format":"0.0 b","hasCalculation":false,"isDerivative":false},"summary":{"minVal":37494857728,"maxVal":37521543168,"lastVal":37511475200,"slope":1}},"transport_address":"https://elasticsearch:9200","type":"master","nodeTypeLabel":"Master Node","nodeTypeClass":"starFilled","resolver":"1ksGajLvSW-OwnAYH-X3Sg"}],"totalNodeCount":1} diff --git a/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/overview.json b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/overview.json new file mode 100644 index 0000000000000..7eeb94537ad7a --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/elasticsearch/overview.json @@ -0,0 +1 @@ +{"clusterStatus":{"status":"yellow","indicesCount":47,"documentCount":39688,"dataSize":33007934,"nodesCount":1,"upTime":779257,"version":["8.7.0"],"memUsed":586378752,"memMax":1073741824,"unassignedShards":28,"totalShards":75},"metrics":{"cluster_search_request_rate":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"indices_stats._all.total.search.query_total","metricAgg":"max","label":"Total Shards","title":"Search Rate","description":"Number of search requests being executed across primary and replica shards. A single search can run against multiple shards!","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,4.5],[1674575140000,4.5],[1674575150000,4.5],[1674575160000,4.5],[1674575170000,4.5],[1674575180000,4.5],[1674575190000,0.3],[1674575200000,4.2],[1674575210000,4.5],[1674575220000,4.5],[1674575230000,4.5],[1674575240000,4.5],[1674575250000,4.5],[1674575260000,4.5],[1674575270000,4.5],[1674575280000,4.5],[1674575290000,4.5],[1674575300000,4.5],[1674575310000,4.5],[1674575320000,4.5],[1674575330000,4.5],[1674575340000,4.5],[1674575350000,4.5],[1674575360000,4.5],[1674575370000,4.5],[1674575380000,4.5],[1674575390000,4.5],[1674575400000,4.5],[1674575410000,4.5],[1674575420000,4.5],[1674575430000,4.5],[1674575440000,4.5],[1674575450000,4.5],[1674575460000,4.5],[1674575470000,4.5],[1674575480000,4.5]]}],"cluster_query_latency":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"indices_stats._all.total.search.query_total","metricAgg":"sum","label":"Search Latency","description":"Average latency for searching, which is time it takes to execute searches divided by number of searches submitted. This considers primary and replica shards.","units":"ms","format":"0,0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,null],[1674575140000,0.7555555555555555],[1674575150000,0.6000000000000001],[1674575160000,0.5555555555555556],[1674575170000,2.511111111111111],[1674575180000,2.3777777777777778],[1674575190000,0.33333333333333337],[1674575200000,0.5952380952380952],[1674575210000,0.4666666666666667],[1674575220000,0.5333333333333333],[1674575230000,0.5333333333333333],[1674575240000,0.48888888888888893],[1674575250000,0.4444444444444444],[1674575260000,0.4666666666666667],[1674575270000,1.6444444444444446],[1674575280000,0.4666666666666667],[1674575290000,0.5555555555555556],[1674575300000,0.4222222222222222],[1674575310000,0.4444444444444444],[1674575320000,0.4222222222222222],[1674575330000,0.35555555555555557],[1674575340000,0.5333333333333333],[1674575350000,1.1777777777777778],[1674575360000,0.5555555555555556],[1674575370000,0.35555555555555557],[1674575380000,0.7111111111111111],[1674575390000,0.6222222222222222],[1674575400000,0.35555555555555557],[1674575410000,0.37777777777777777],[1674575420000,0.3333333333333333],[1674575430000,0.4222222222222222],[1674575440000,0.4222222222222222],[1674575450000,0.35555555555555557],[1674575460000,0.4444444444444444],[1674575470000,0.5777777777777778],[1674575480000,0.48888888888888893]]}],"cluster_index_request_rate":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"indices_stats._all.total.indexing.index_total","metricAgg":"max","label":"Total Shards","title":"Indexing Rate","description":"Number of documents being indexed for primary and replica shards.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,19],[1674575140000,11.7],[1674575150000,12.5],[1674575160000,11.8],[1674575170000,11.7],[1674575180000,12.7],[1674575190000,11.6],[1674575200000,11.8],[1674575210000,12.4],[1674575220000,11.8],[1674575230000,11.8],[1674575240000,12.7],[1674575250000,11.6],[1674575260000,11.8],[1674575270000,12.5],[1674575280000,11.6],[1674575290000,11.7],[1674575300000,12.7],[1674575310000,11.7],[1674575320000,11.8],[1674575330000,12.4],[1674575340000,19.1],[1674575350000,11.7],[1674575360000,12.7],[1674575370000,11.6],[1674575380000,11.8],[1674575390000,12.5],[1674575400000,11.7],[1674575410000,11.7],[1674575420000,12.8],[1674575430000,11.6],[1674575440000,11.8],[1674575450000,12.4],[1674575460000,11.6],[1674575470000,11.8],[1674575480000,12.7]]},{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"indices_stats._all.primaries.indexing.index_total","metricAgg":"max","label":"Primary Shards","title":"Indexing Rate","description":"Number of documents being indexed for primary shards.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1674575130000,19],[1674575140000,11.7],[1674575150000,12.5],[1674575160000,11.8],[1674575170000,11.7],[1674575180000,12.7],[1674575190000,11.6],[1674575200000,11.8],[1674575210000,12.4],[1674575220000,11.8],[1674575230000,11.8],[1674575240000,12.7],[1674575250000,11.6],[1674575260000,11.8],[1674575270000,12.5],[1674575280000,11.6],[1674575290000,11.7],[1674575300000,12.7],[1674575310000,11.7],[1674575320000,11.8],[1674575330000,12.4],[1674575340000,19.1],[1674575350000,11.7],[1674575360000,12.7],[1674575370000,11.6],[1674575380000,11.8],[1674575390000,12.5],[1674575400000,11.7],[1674575410000,11.7],[1674575420000,12.8],[1674575430000,11.6],[1674575440000,11.8],[1674575450000,12.4],[1674575460000,11.6],[1674575470000,11.8],[1674575480000,12.7]]}],"cluster_index_latency":[{"bucket_size":"10 seconds","timeRange":{"min":1674575130000,"max":1674575490000},"metric":{"app":"elasticsearch","field":"indices_stats._all.primaries.indexing.index_total","metricAgg":"sum","label":"Indexing Latency","description":"Average latency for indexing documents, which is time it takes to index documents divided by number that were indexed. This only considers primary shards.","units":"ms","format":"0,0.[00]","hasCalculation":true,"isDerivative":false},"data":[[1674575130000,null],[1674575140000,0.11965811965811966],[1674575150000,0.17600000000000002],[1674575160000,0.14406779661016947],[1674575170000,0.12820512820512822],[1674575180000,0.14173228346456693],[1674575190000,0.13793103448275862],[1674575200000,0.14406779661016947],[1674575210000,0.16129032258064516],[1674575220000,0.16101694915254236],[1674575230000,0.11016949152542373],[1674575240000,0.12598425196850396],[1674575250000,0.15517241379310345],[1674575260000,0.11016949152542373],[1674575270000,0.552],[1674575280000,0.14655172413793102],[1674575290000,0.11111111111111112],[1674575300000,0.13385826771653545],[1674575310000,0.1452991452991453],[1674575320000,0.2966101694915254],[1674575330000,0.14516129032258066],[1674575340000,0.09947643979057591],[1674575350000,0.1452991452991453],[1674575360000,0.14173228346456693],[1674575370000,0.18965517241379312],[1674575380000,0.13559322033898305],[1674575390000,0.136],[1674575400000,0.13675213675213677],[1674575410000,0.15384615384615385],[1674575420000,0.140625],[1674575430000,0.11206896551724138],[1674575440000,0.16101694915254236],[1674575450000,0.1854838709677419],[1674575460000,0.09482758620689656],[1674575470000,0.11864406779661016],[1674575480000,0.1811023622047244]]}]},"logs":{"enabled":false,"logs":[],"reason":{"indexPatternExists":false,"indexPatternInTimeRangeExists":false,"typeExistsAtAnyTime":false,"typeExists":false,"usingStructuredLogs":false,"clusterExists":false,"nodeExists":null,"indexExists":null},"limit":10},"shardActivity":[{"start_time":{"ms":1674574784767},"stop_time":{"ms":1674574784836},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elastic_agent.fleet_server-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786227},"stop_time":{"ms":1674574786257},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.diskio-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786142},"stop_time":{"ms":1674574786168},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elastic_agent.metricbeat-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674575114717},"stop_time":{"ms":1674575114748},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elasticsearch.stack_monitoring.shard-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786426},"stop_time":{"ms":1674574786453},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.process.summary-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574781779},"stop_time":{"ms":1674574781836},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-logs-elastic_agent.fleet_server-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786452},"stop_time":{"ms":1674574786479},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.network-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786240},"stop_time":{"ms":1674574786270},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.load-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786624},"stop_time":{"ms":1674574786648},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.uptime-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786443},"stop_time":{"ms":1674574786472},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.process-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574781827},"stop_time":{"ms":1674574781928},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-logs-elastic_agent.metricbeat-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574781733},"stop_time":{"ms":1674574781763},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-logs-elastic_agent-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574781818},"stop_time":{"ms":1674574781917},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-logs-elastic_agent.filebeat-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574784997},"stop_time":{"ms":1674574785017},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elastic_agent.elastic_agent-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674575114496},"stop_time":{"ms":1674575114526},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elasticsearch.stack_monitoring.enrich-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574787065},"stop_time":{"ms":1674574787118},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elastic_agent.filebeat-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786217},"stop_time":{"ms":1674574786251},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.socket_summary-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574899413},"stop_time":{"ms":1674574899436},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":"kibana_sample_data_flights","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674575114701},"stop_time":{"ms":1674575114734},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elasticsearch.stack_monitoring.node_stats-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674575114513},"stop_time":{"ms":1674575114541},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elasticsearch.stack_monitoring.node-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786432},"stop_time":{"ms":1674574786461},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.fsstat-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674575114503},"stop_time":{"ms":1674575114535},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elasticsearch.stack_monitoring.index-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574901448},"stop_time":{"ms":1674574901471},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-kibana_sample_data_logs-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674575114709},"stop_time":{"ms":1674575114738},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elasticsearch.stack_monitoring.cluster_stats-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786644},"stop_time":{"ms":1674574786673},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.memory-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786633},"stop_time":{"ms":1674574786661},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.cpu-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574786656},"stop_time":{"ms":1674574786690},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-system.filesystem-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674575114694},"stop_time":{"ms":1674575114719},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elasticsearch.stack_monitoring.index_summary-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674575114488},"stop_time":{"ms":1674575114517},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":".ds-metrics-elasticsearch.stack_monitoring.index_recovery-default-2023.01.24-000001","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}},{"start_time":{"ms":1674574823950},"stop_time":{"ms":1674574823970},"stage":"DONE","translog":{"total_on_start":0,"total":0,"percent":"100.0%"},"name":"kibana_sample_data_ecommerce","index":{"size":{"total_in_bytes":0,"reused_in_bytes":0,"recovered_in_bytes":0},"files":{"recovered":0,"total":0,"percent":"0.0%","reused":0}},"id":0,"source":{},"type":"EMPTY_STORE","primary":true,"target":{"transport_address":"127.0.0.1:9300","host":"127.0.0.1","name":"712a47f7f7df","id":"1ksGajLvSW-OwnAYH-X3Sg"}}]} diff --git a/x-pack/test/monitoring_api_integration/fixtures/enterprisesearch/overview.json b/x-pack/test/monitoring_api_integration/fixtures/enterprisesearch/overview.json new file mode 100644 index 0000000000000..9928265a8e5b8 --- /dev/null +++ b/x-pack/test/monitoring_api_integration/fixtures/enterprisesearch/overview.json @@ -0,0 +1 @@ +{"stats":{"appSearchEngines":1,"workplaceSearchOrgSources":1,"workplaceSearchPrivateSources":0,"totalInstances":1,"uptime":1670762,"memUsed":1110220288,"memCommitted":2147483648,"memTotal":2147483648,"versions":["8.7.0"]},"metrics":{"enterprise_search_heap":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.jvm.memory_usage.heap_max.bytes","metricAgg":"max","label":"Total","title":"JVM Heap Usage","description":"Maximum amount of JVM heap memory available to the application.","units":"bytes","format":"0,0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,2147483648],[1673470470000,2147483648],[1673470480000,2147483648],[1673470490000,2147483648],[1673470500000,2147483648],[1673470510000,2147483648],[1673470520000,2147483648],[1673470530000,2147483648],[1673470540000,2147483648],[1673470550000,2147483648],[1673470560000,2147483648],[1673470570000,2147483648],[1673470580000,2147483648],[1673470590000,2147483648],[1673470600000,2147483648],[1673470610000,2147483648],[1673470620000,2147483648],[1673470630000,2147483648],[1673470640000,2147483648],[1673470650000,2147483648],[1673470660000,2147483648],[1673470670000,2147483648],[1673470680000,2147483648],[1673470690000,2147483648],[1673470700000,2147483648],[1673470710000,2147483648],[1673470720000,2147483648],[1673470730000,2147483648],[1673470740000,2147483648],[1673470750000,2147483648],[1673470760000,2147483648],[1673470770000,2147483648],[1673470780000,2147483648],[1673470790000,2147483648],[1673470800000,2147483648],[1673470810000,2147483648],[1673470820000,2147483648],[1673470830000,2147483648],[1673470840000,2147483648]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.jvm.memory_usage.heap_committed.bytes","metricAgg":"max","label":"Committed","description":"The amount of memory JVM has allocated from the OS and is available to the application.","units":"bytes","format":"0,0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,2147483648],[1673470470000,2147483648],[1673470480000,2147483648],[1673470490000,2147483648],[1673470500000,2147483648],[1673470510000,2147483648],[1673470520000,2147483648],[1673470530000,2147483648],[1673470540000,2147483648],[1673470550000,2147483648],[1673470560000,2147483648],[1673470570000,2147483648],[1673470580000,2147483648],[1673470590000,2147483648],[1673470600000,2147483648],[1673470610000,2147483648],[1673470620000,2147483648],[1673470630000,2147483648],[1673470640000,2147483648],[1673470650000,2147483648],[1673470660000,2147483648],[1673470670000,2147483648],[1673470680000,2147483648],[1673470690000,2147483648],[1673470700000,2147483648],[1673470710000,2147483648],[1673470720000,2147483648],[1673470730000,2147483648],[1673470740000,2147483648],[1673470750000,2147483648],[1673470760000,2147483648],[1673470770000,2147483648],[1673470780000,2147483648],[1673470790000,2147483648],[1673470800000,2147483648],[1673470810000,2147483648],[1673470820000,2147483648],[1673470830000,2147483648],[1673470840000,2147483648]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.jvm.memory_usage.heap_used.bytes","metricAgg":"max","label":"Used","description":"Current amount of JVM Heam memory used by the application.","units":"bytes","format":"0,0.0 b","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,480026112],[1673470470000,493657600],[1673470480000,503094784],[1673470490000,512531968],[1673470500000,523017728],[1673470510000,534552064],[1673470520000,543989248],[1673470530000,554475008],[1673470540000,564960768],[1673470550000,574397952],[1673470560000,590126592],[1673470570000,600612352],[1673470580000,627875328],[1673470590000,653041152],[1673470600000,698129920],[1673470610000,764190208],[1673470620000,784113152],[1673470630000,794598912],[1673470640000,804036096],[1673470650000,814521856],[1673470660000,836541952],[1673470670000,845979136],[1673470680000,859610624],[1673470690000,870096384],[1673470700000,880582144],[1673470710000,893165056],[1673470720000,904699392],[1673470730000,914136576],[1673470740000,927768064],[1673470750000,937205248],[1673470760000,947691008],[1673470770000,977051136],[1673470780000,1046257152],[1673470790000,1056742912],[1673470800000,1070374400],[1673470810000,1080860160],[1673470820000,1090297344],[1673470830000,1100783104],[1673470840000,1110220288]]}],"enterprise_search_jvm_finalizer_queue":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.jvm.memory_usage.object_pending_finalization_count","metricAgg":"max","label":"JVM Objects Pending Finalization","description":"Number of objects within the JVM heap waiting for the finalizer thread.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,0],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,0],[1673470780000,0],[1673470790000,0],[1673470800000,0],[1673470810000,0],[1673470820000,0],[1673470830000,0],[1673470840000,0]]}],"enterprise_search_gc_time":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.jvm.gc.collection_time.ms","metricAgg":"max","label":"Time spent on JVM garbage collection","description":"Time spent performing JVM garbage collections.","units":"ms","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,0],[1673470780000,0],[1673470790000,0],[1673470800000,0],[1673470810000,0],[1673470820000,0],[1673470830000,0],[1673470840000,0]]}],"enterprise_search_gc_rate":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.jvm.gc.collection_count","metricAgg":"max","label":"JVM GC Rate","description":"The rate of JVM garbage collector invocations across the fleet.","units":"/s","format":"0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,0],[1673470780000,0],[1673470790000,0],[1673470800000,0],[1673470810000,0],[1673470820000,0],[1673470830000,0],[1673470840000,0]]}],"enterprise_search_threads":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.jvm.threads.current","metricAgg":"max","label":"Active Threads","title":"JVM Threads","description":"Currently running JVM threads used by the application.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,27],[1673470470000,29],[1673470480000,29],[1673470490000,29],[1673470500000,28],[1673470510000,28],[1673470520000,28],[1673470530000,27],[1673470540000,27],[1673470550000,28],[1673470560000,28],[1673470570000,28],[1673470580000,28],[1673470590000,29],[1673470600000,29],[1673470610000,29],[1673470620000,29],[1673470630000,29],[1673470640000,29],[1673470650000,28],[1673470660000,28],[1673470670000,28],[1673470680000,29],[1673470690000,29],[1673470700000,29],[1673470710000,28],[1673470720000,28],[1673470730000,28],[1673470740000,29],[1673470750000,29],[1673470760000,29],[1673470770000,30],[1673470780000,36],[1673470790000,36],[1673470800000,35],[1673470810000,35],[1673470820000,35],[1673470830000,34],[1673470840000,34]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.jvm.threads.daemon","metricAgg":"max","label":"Daemon Threads","description":"Currently running JVM daemon threads used by the application.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,16],[1673470470000,17],[1673470480000,17],[1673470490000,17],[1673470500000,16],[1673470510000,16],[1673470520000,16],[1673470530000,16],[1673470540000,16],[1673470550000,16],[1673470560000,16],[1673470570000,16],[1673470580000,16],[1673470590000,16],[1673470600000,16],[1673470610000,16],[1673470620000,16],[1673470630000,16],[1673470640000,16],[1673470650000,16],[1673470660000,16],[1673470670000,16],[1673470680000,17],[1673470690000,17],[1673470700000,17],[1673470710000,17],[1673470720000,17],[1673470730000,17],[1673470740000,17],[1673470750000,17],[1673470760000,17],[1673470770000,17],[1673470780000,23],[1673470790000,23],[1673470800000,22],[1673470810000,22],[1673470820000,22],[1673470830000,22],[1673470840000,22]]}],"enterprise_search_threads_rate":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.jvm.threads.total_started","metricAgg":"max","label":"Thread Creation Rate","description":"Currently running JVM threads used by the application.","units":"/s","format":"0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,0.2],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0.1],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0.1],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0.1],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0.1],[1673470750000,0],[1673470760000,0],[1673470770000,0.1],[1673470780000,0.6],[1673470790000,0],[1673470800000,0],[1673470810000,0],[1673470820000,0],[1673470830000,0],[1673470840000,0]]}],"enterprise_search_http_connections_current":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.http.connections.current","metricAgg":"max","label":"Open HTTP Connections","description":"Currently open incoming HTTP connections across all instances.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,2],[1673470470000,2],[1673470480000,2],[1673470490000,2],[1673470500000,2],[1673470510000,2],[1673470520000,2],[1673470530000,2],[1673470540000,2],[1673470550000,2],[1673470560000,2],[1673470570000,2],[1673470580000,2],[1673470590000,2],[1673470600000,2],[1673470610000,2],[1673470620000,2],[1673470630000,2],[1673470640000,2],[1673470650000,2],[1673470660000,2],[1673470670000,2],[1673470680000,2],[1673470690000,2],[1673470700000,2],[1673470710000,2],[1673470720000,2],[1673470730000,2],[1673470740000,2],[1673470750000,2],[1673470760000,2],[1673470770000,2],[1673470780000,2],[1673470790000,2],[1673470800000,2],[1673470810000,2],[1673470820000,2],[1673470830000,2],[1673470840000,2]]}],"enterprise_search_http_connections_rate":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.http.connections.total","metricAgg":"max","label":"HTTP Connections Rate","description":"The rate of incoming HTTP connections across all instances.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,0.9],[1673470480000,0.9],[1673470490000,0.8],[1673470500000,0.9],[1673470510000,0.9],[1673470520000,0.8],[1673470530000,0.9],[1673470540000,1],[1673470550000,0.7],[1673470560000,0.9],[1673470570000,0.9],[1673470580000,1],[1673470590000,1],[1673470600000,1.2],[1673470610000,1.4],[1673470620000,1],[1673470630000,0.9],[1673470640000,0.9],[1673470650000,0.9],[1673470660000,0.9],[1673470670000,0.9],[1673470680000,0.9],[1673470690000,0.9],[1673470700000,0.9],[1673470710000,0.8],[1673470720000,0.9],[1673470730000,0.9],[1673470740000,1],[1673470750000,0.9],[1673470760000,0.9],[1673470770000,1.1],[1673470780000,1.6],[1673470790000,0.9],[1673470800000,0.9],[1673470810000,0.9],[1673470820000,0.9],[1673470830000,0.9],[1673470840000,0.8]]}],"enterprise_search_http_traffic":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.http.network.received.bytes","metricAgg":"max","label":"Received","title":"HTTP Traffic","description":"Incoming HTTP traffic rate across all instances in the deployment.","units":"/s","format":"0,0.0 b","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,112.5],[1673470480000,112.5],[1673470490000,100],[1673470500000,112.5],[1673470510000,112.5],[1673470520000,100],[1673470530000,112.5],[1673470540000,125],[1673470550000,87.5],[1673470560000,112.5],[1673470570000,112.5],[1673470580000,154.8],[1673470590000,201.1],[1673470600000,259.2],[1673470610000,347.3],[1673470620000,156.6],[1673470630000,112.5],[1673470640000,112.5],[1673470650000,112.5],[1673470660000,112.5],[1673470670000,112.5],[1673470680000,112.5],[1673470690000,112.5],[1673470700000,112.5],[1673470710000,100],[1673470720000,112.5],[1673470730000,112.5],[1673470740000,125],[1673470750000,112.5],[1673470760000,112.5],[1673470770000,251.8],[1673470780000,460.2],[1673470790000,112.5],[1673470800000,112.5],[1673470810000,112.5],[1673470820000,112.5],[1673470830000,112.5],[1673470840000,100]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.http.network.sent.bytes","metricAgg":"max","label":"Sent","description":"Outgoing HTTP traffic across all instances in the deployment.","units":"/s","format":"0,0.0 b","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,675.9],[1673470480000,675.9],[1673470490000,600.8],[1673470500000,675.9],[1673470510000,675.9],[1673470520000,600.8],[1673470530000,675.9],[1673470540000,751],[1673470550000,525.7],[1673470560000,675.9],[1673470570000,675.9],[1673470580000,830.5],[1673470590000,838.2],[1673470600000,1115.4],[1673470610000,1389.5],[1673470620000,836.1],[1673470630000,675.9],[1673470640000,675.9],[1673470650000,675.9],[1673470660000,675.9],[1673470670000,675.9],[1673470680000,675.9],[1673470690000,675.9],[1673470700000,675.9],[1673470710000,600.8],[1673470720000,675.9],[1673470730000,675.9],[1673470740000,751],[1673470750000,675.9],[1673470760000,675.9],[1673470770000,1044.1],[1673470780000,1675.2],[1673470790000,675.9],[1673470800000,675.9],[1673470810000,675.9],[1673470820000,675.9],[1673470830000,675.9],[1673470840000,600.8]]}],"enterprise_search_http_responses":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.http.responses.1xx","metricAgg":"max","label":"1xx","title":"HTTP Responses","description":"Outgoing HTTP 1xx responses across all instances in the deployment.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,0],[1673470780000,0],[1673470790000,0],[1673470800000,0],[1673470810000,0],[1673470820000,0],[1673470830000,0],[1673470840000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.http.responses.2xx","metricAgg":"max","label":"2xx","description":"Outgoing HTTP 2xx responses across all instances in the deployment.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,0.3],[1673470480000,0.2],[1673470490000,0.2],[1673470500000,0.2],[1673470510000,0.2],[1673470520000,0.2],[1673470530000,0.2],[1673470540000,0.1],[1673470550000,0.3],[1673470560000,0.2],[1673470570000,0.2],[1673470580000,0.3],[1673470590000,0.4],[1673470600000,0.5],[1673470610000,0.7],[1673470620000,0.3],[1673470630000,0.2],[1673470640000,0.2],[1673470650000,0.2],[1673470660000,0.2],[1673470670000,0.2],[1673470680000,0.2],[1673470690000,0.2],[1673470700000,0.2],[1673470710000,0.2],[1673470720000,0.2],[1673470730000,0.2],[1673470740000,0.2],[1673470750000,0.2],[1673470760000,0.2],[1673470770000,0.5],[1673470780000,0.9],[1673470790000,0.2],[1673470800000,0.2],[1673470810000,0.2],[1673470820000,0.2],[1673470830000,0.2],[1673470840000,0.2]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.http.responses.3xx","metricAgg":"max","label":"3xx","description":"Outgoing HTTP 3xx responses across all instances in the deployment.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,0.9],[1673470480000,0.9],[1673470490000,0.8],[1673470500000,0.9],[1673470510000,0.9],[1673470520000,0.8],[1673470530000,0.9],[1673470540000,1],[1673470550000,0.7],[1673470560000,0.9],[1673470570000,0.9],[1673470580000,0.9],[1673470590000,0.8],[1673470600000,0.9],[1673470610000,0.9],[1673470620000,0.9],[1673470630000,0.9],[1673470640000,0.9],[1673470650000,0.9],[1673470660000,0.9],[1673470670000,0.9],[1673470680000,0.9],[1673470690000,0.9],[1673470700000,0.9],[1673470710000,0.8],[1673470720000,0.9],[1673470730000,0.9],[1673470740000,1],[1673470750000,0.9],[1673470760000,0.9],[1673470770000,0.8],[1673470780000,0.9],[1673470790000,0.9],[1673470800000,0.9],[1673470810000,0.9],[1673470820000,0.9],[1673470830000,0.9],[1673470840000,0.8]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.http.responses.4xx","metricAgg":"max","label":"4xx","description":"Outgoing HTTP 4xx responses across all instances in the deployment.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,0],[1673470780000,0],[1673470790000,0],[1673470800000,0],[1673470810000,0],[1673470820000,0],[1673470830000,0],[1673470840000,0]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.http.responses.5xx","metricAgg":"max","label":"5xx","description":"Outgoing HTTP 5xx responses across all instances in the deployment.","units":"/s","format":"0,0.[00]","hasCalculation":false,"isDerivative":true},"data":[[1673470460000,null],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,0],[1673470780000,0],[1673470790000,0],[1673470800000,0],[1673470810000,0],[1673470820000,0],[1673470830000,0],[1673470840000,0]]}],"app_search_total_engines":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.product_usage.app_search.total_engines","metricAgg":"avg","label":"App Search Engines","description":"Current number of App Search engines within the Enterprise Search deployment.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,0],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,1],[1673470780000,1],[1673470790000,1],[1673470800000,1],[1673470810000,1],[1673470820000,1],[1673470830000,1],[1673470840000,1]]}],"crawler_workers":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.crawler.workers.pool_size","metricAgg":"max","label":"Total","title":"Crawler Workers","description":"The number of crawler workers configured across all instances of App Search.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,20],[1673470470000,20],[1673470480000,20],[1673470490000,20],[1673470500000,20],[1673470510000,20],[1673470520000,20],[1673470530000,20],[1673470540000,20],[1673470550000,20],[1673470560000,20],[1673470570000,20],[1673470580000,20],[1673470590000,20],[1673470600000,20],[1673470610000,20],[1673470620000,20],[1673470630000,20],[1673470640000,20],[1673470650000,20],[1673470660000,20],[1673470670000,20],[1673470680000,20],[1673470690000,20],[1673470700000,20],[1673470710000,20],[1673470720000,20],[1673470730000,20],[1673470740000,20],[1673470750000,20],[1673470760000,20],[1673470770000,20],[1673470780000,20],[1673470790000,20],[1673470800000,20],[1673470810000,20],[1673470820000,20],[1673470830000,20],[1673470840000,20]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.health.crawler.workers.active","metricAgg":"max","label":"Active","description":"Currently active App Search crawler workers.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,0],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,0],[1673470780000,0],[1673470790000,0],[1673470800000,0],[1673470810000,0],[1673470820000,0],[1673470830000,0],[1673470840000,0]]}],"workplace_search_total_sources":[{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.product_usage.workplace_search.total_org_sources","metricAgg":"avg","label":"Org Sources","title":"Workpace Search Content Sources","description":"Current number of Workplace Search org-wide content sources within the Enterprise Search deployment.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,0],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,1],[1673470780000,1],[1673470790000,1],[1673470800000,1],[1673470810000,1],[1673470820000,1],[1673470830000,1],[1673470840000,1]]},{"bucket_size":"10 seconds","timeRange":{"min":1673470440000,"max":1673470860000},"metric":{"app":"enterprise_search","field":"enterprisesearch.stats.product_usage.workplace_search.total_private_sources","metricAgg":"avg","label":"Private Sources","description":"Current number of Workplace Search private content sources within the Enterprise Search deployment.","units":"","format":"0.[00]","hasCalculation":false,"isDerivative":false},"data":[[1673470460000,0],[1673470470000,0],[1673470480000,0],[1673470490000,0],[1673470500000,0],[1673470510000,0],[1673470520000,0],[1673470530000,0],[1673470540000,0],[1673470550000,0],[1673470560000,0],[1673470570000,0],[1673470580000,0],[1673470590000,0],[1673470600000,0],[1673470610000,0],[1673470620000,0],[1673470630000,0],[1673470640000,0],[1673470650000,0],[1673470660000,0],[1673470670000,0],[1673470680000,0],[1673470690000,0],[1673470700000,0],[1673470710000,0],[1673470720000,0],[1673470730000,0],[1673470740000,0],[1673470750000,0],[1673470760000,0],[1673470770000,0],[1673470780000,0],[1673470790000,0],[1673470800000,0],[1673470810000,0],[1673470820000,0],[1673470830000,0],[1673470840000,0]]}]}} diff --git a/x-pack/test/monitoring_api_integration/fixtures/packages/elasticsearch-1.2.0.zip b/x-pack/test/monitoring_api_integration/fixtures/packages/elasticsearch-1.2.0.zip new file mode 100644 index 0000000000000..9f48ad17073d4 Binary files /dev/null and b/x-pack/test/monitoring_api_integration/fixtures/packages/elasticsearch-1.2.0.zip differ diff --git a/x-pack/test/monitoring_api_integration/fixtures/packages/enterprisesearch-1.0.0.zip b/x-pack/test/monitoring_api_integration/fixtures/packages/enterprisesearch-1.0.0.zip new file mode 100644 index 0000000000000..b4c9c9a756ece Binary files /dev/null and b/x-pack/test/monitoring_api_integration/fixtures/packages/enterprisesearch-1.0.0.zip differ diff --git a/x-pack/test/monitoring_api_integration/packages.ts b/x-pack/test/monitoring_api_integration/packages.ts index 9c85b89fd1057..6eda6d0e94722 100644 --- a/x-pack/test/monitoring_api_integration/packages.ts +++ b/x-pack/test/monitoring_api_integration/packages.ts @@ -7,7 +7,11 @@ import path from 'path'; -const PACKAGES = [{ name: 'beat', version: '0.0.1' }]; +const PACKAGES = [ + { name: 'beat', version: '0.0.1' }, + { name: 'elasticsearch', version: '1.2.0' }, + { name: 'enterprisesearch', version: '1.0.0' }, +]; export const getPackagesArgs = (): string[] => { return PACKAGES.flatMap((pkg, i) => { diff --git a/x-pack/test/monitoring_api_integration/scripts/transform_archive.js b/x-pack/test/monitoring_api_integration/scripts/transform_archive.js index 7f0e4e148624c..819e25ba325a5 100644 --- a/x-pack/test/monitoring_api_integration/scripts/transform_archive.js +++ b/x-pack/test/monitoring_api_integration/scripts/transform_archive.js @@ -56,6 +56,8 @@ const { ? 'kibana' : source.beat ? 'beats' + : source.enterprisesearch + ? 'ent-search' : source.elasticsearch ? 'es' : null; diff --git a/x-pack/test/monitoring_api_integration/utils/lifecycle_methods.ts b/x-pack/test/monitoring_api_integration/utils/lifecycle_methods.ts index bd7b86bfc69ba..c4b7bea2ea964 100644 --- a/x-pack/test/monitoring_api_integration/utils/lifecycle_methods.ts +++ b/x-pack/test/monitoring_api_integration/utils/lifecycle_methods.ts @@ -33,7 +33,7 @@ export const getLifecycleMethods = (getService: FtrProviderContext['getService'] // the tests suites. since the archiver doesn't have any reference to the // mappings it can't automatically delete it and we have to do the cleanup manually await deleteDataStream('.monitoring-*'); - await deleteDataStream('metrics-beats.stack_monitoring.*'); + await deleteDataStream('metrics-*.stack_monitoring.*'); }, }; }; diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts index 56cbfb782a8cc..789e0930ca6ce 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/responder.ts @@ -9,6 +9,7 @@ import { IndexedHostsAndAlertsResponse } from '@kbn/security-solution-plugin/com import { TimelineResponse } from '@kbn/security-solution-plugin/common/types'; import { FtrProviderContext } from '../../ftr_provider_context'; import { DATE_RANGE_OPTION_TO_TEST_SUBJ_MAP } from '../../../security_solution_ftr/page_objects/helpers/super_date_picker'; +import { IndexedEndpointRuleAlerts } from '../../../security_solution_ftr/services/detections'; export default ({ getPageObjects, getService }: FtrProviderContext) => { const pageObjects = getPageObjects([ @@ -26,6 +27,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const detectionsTestService = getService('detections'); const log = getService('log'); + // The Alerts Rule seems to run every 5 minutes when there are no failures. This timeout ensures + // that we wait long enough for them to show up. + const MAX_WAIT_FOR_ALERTS_TIMEOUT = 60_000 * 6; + const performResponderSanityChecks = async () => { // Show the Action log await pageObjects.responder.openActionLogFlyout(); @@ -76,8 +81,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { ); }; - // Failing: See https://github.com/elastic/kibana/issues/142148 - describe.skip('Response Actions Responder', function () { + describe('Response Actions Responder', function () { let indexedData: IndexedHostsAndAlertsResponse; let endpointAgentId: string; @@ -117,9 +121,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); }); - // FLAKY: https://github.com/elastic/kibana/issues/140546 - describe.skip('from timeline', () => { + describe('from timeline', () => { let timeline: TimelineResponse; + let indexedAlerts: IndexedEndpointRuleAlerts; before(async () => { timeline = await timelineTestService.createTimeline('endpoint responder test'); @@ -142,11 +146,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { timeline.data.persistTimeline.timeline.version ); + indexedAlerts = await detectionsTestService.loadEndpointRuleAlerts(endpointAgentId); + await detectionsTestService.waitForAlerts( getEndpointAlertsQueryForAgentId(endpointAgentId), - // The Alerts rules seems to run every 5 minutes, so we wait here a max - // of 6 minutes to ensure it runs and completes and alerts are available. - 60_000 * 6 + MAX_WAIT_FOR_ALERTS_TIMEOUT ); await pageObjects.timeline.navigateToTimelineList(); @@ -161,6 +165,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { timeline.data.persistTimeline.timeline.savedObjectId ); } + + if (indexedAlerts) { + log.info(`Cleaning up loaded alerts for Timeline`); + await indexedAlerts.cleanup(); + } }); it('should show Responder from alert in a timeline', async () => { @@ -185,15 +194,24 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); describe('from alerts', () => { + let indexedAlerts: IndexedEndpointRuleAlerts; + before(async () => { + indexedAlerts = await detectionsTestService.loadEndpointRuleAlerts(endpointAgentId); + await detectionsTestService.waitForAlerts( getEndpointAlertsQueryForAgentId(endpointAgentId), - // The Alerts rules seems to run every 5 minutes, so we wait here a max - // of 6 minutes to ensure it runs and completes and alerts are available. - 60_000 * 6 + MAX_WAIT_FOR_ALERTS_TIMEOUT ); }); + after(async () => { + if (indexedAlerts) { + log.info(`Cleaning up alerts loaded for Alerts page`); + await indexedAlerts.cleanup(); + } + }); + it('should show Responder from alert details under alerts list page', async () => { const hostname = indexedData.hosts[0].host.name; await pageObjects.detections.navigateToAlerts( diff --git a/yarn.lock b/yarn.lock index eacc6c1c31d2b..9ee3aaaee9a42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1531,10 +1531,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@73.0.0": - version "73.0.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-73.0.0.tgz#e1340997e2807ef9416daeb3bff71aad14549d19" - integrity sha512-vOdZH5FE9iBRHpSpHnVOH/L8AMX2VJDXlpOQpSprE6kK32k5a0C8PtjHWVntRwWbN9t/pcdqC4oHcZsABIv9GA== +"@elastic/eui@74.0.1": + version "74.0.1" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-74.0.1.tgz#4397d9d5308f9da7abcf66a376bf87fd6f33af7f" + integrity sha512-vaaysWN/CzzMXvt8bGnwHXLPbMgeN7qNUo+mYdqda7aHo2BPvlapmtZmf3L3cIX1m9bxQW/dcuSLLQ5Wcx3fTA== dependencies: "@types/chroma-js" "^2.0.0" "@types/lodash" "^4.14.160"